NginxとApacheはどっちが良い?速度や歴史、人気等を比較していく

スポンサーリンク
スポンサーリンク

サーバソフトウェアには様々な種類がありますが、多くの場合、NginxとApacheの間で競合が絞られます。これは、両者がさまざまなサーバ構成で最高のパフォーマンスを発揮し、特定のアプリケーションに適しているためです。

それでも、自分のニーズにはどちらが適しているのかを検討する必要があります。OSのサポート、セキュリティ、ドキュメンテーション、そしてもちろん性能など、調べるべき項目はいくつかあります。

この記事では、Nginx と Apache を様々な角度から比較します。最後に、調査結果をまとめ、正しい選択肢を選ぶために必要な情報を提供します。

スポンサーリンク

NginxとApacheの紹介

Nginx

The Nginx logo.
Nginx は Apache と比べると、サーバーサイドの技術としては比較的新しい存在です。しかし、開発チームは Apache システムの制限を拡張するタスクを引き受けました。

Nginx はオープンソースのソリューションであり、その安定性と拡張性から多くのユーザーに支持されています。これは、イベント駆動型アーキテクチャによるものです(詳細は後述)。

実際、Nginxの初期リリースでは、10,000コネクションを同時に処理できるようにすることが目標の一つでした。これは2004年当時、急速に拡大するウェブのために必要なことでした。

全体として、Nginx はパフォーマンスが高く、静的ファイルとの相性が抜群で、ロードバランサーと「リバースプロキシ」の機能を備えているため、システム管理者とサイトオーナーは Nginx を気に入っています。これらはすべてアップタイム、スピード、セキュリティに関連することです。

アパッチ

Apacheはウェブサーバー技術の「老舗」とも言える存在です。1995年からApacheは何千、何百万ものサーバーの核となるソフトウェアでした。

長い間、Apacheは “シスアド “の間で支配的な技術であり続けました。これには多くの理由があります-パフォーマンスに関連するものもあれば、習慣によるものもあります。ともかく、Apache サーバは設定が重要な場面で多く使われています。

ApacheはすべてのLinuxディストロにプリインストールされているので、そのOSのための解決策になります。しかし、Nginxとは異なるアーキテクチャを使用していますが、パワー、スケーラビリティ、そして素晴らしいドキュメントを提供しています。

また、多くのシスアドがApacheのカスタマイズ性や、様々なモジュールをロードすることで自分好みのサーバを作ることができる点を気に入っています。

Nginx と Apache の一般的な使用例

ウェブサイトを提供する上で、Apacheは「何でも屋」であると言ってもいいでしょう。しかし、これは混同された恵みです。確かにApacheサーバはNginxができることはほとんどすべてできますが、その分パフォーマンスの低いコードが犠牲になっています。これは時代によるものです。

Apache はまだウェブサーバ用の高度なアプリケーションを持つ前の時代に登場したため、コードベースは現代のウェブサイトを提供するために必要なことを行うことができませんでした。

これらの問題は現在では必ずしも懸念材料ではありませんが、Nginx のようなソリューションはモダンウェブを念頭に置いて動作します。

そのため、Apache は共有ホスティングなどのアプリケーションで簡単に設定できるサーバとして素晴らしいものであることがおわかりいただけると思います。

また、Linux、Apache、MySQL、PHP(LAMP)スタックの一部として、ローカル開発サーバソフトウェアとして使用されることもあるようです。

The logos for all of the parts of a LAMP stack: Linux, Apache, MySQL, and PHP.

一方、Nginx は Apache に比べてソフトウェアベースが成熟しており、より合理的です。安定性とセキュリティが重要な基本要素である場合に適しています。Nginx サーバーは他のサーバーに比べて設定可能な項目が少なく、コア部分へのアクセスも少なくなります。

さらに、Nginx は Apache のようなモジュール方式ではないので、サーバーのカスタマイズが必要な場合には不向きです。

Nginx vs Apache: 各サーバータイプの人気はどうなのか

長い間、サーバソフトウェアは一騎打ちのようなものでした。Apache は何年も前から圧倒的な強さを誇り、今でも大きなマーケットシェアを誇っています。

このため、Apacheサーバーには多くの統合とサポートがあり、一流のドキュメントが用意されていることがわかります。

このことがApacheを選ぶ理由であり、Apacheが使われ続けている理由でもあります。しかし、Nginx は、それ自体が大きなシェアを持つサーバソフトウェアです。

Nginx の使用率は時間の経過とともに徐々に上昇し、現在では市場で最も優勢なウェブサーバ技術となっていますが、その差は大きくありません。

今後、Nginxはシステム管理者がウェブサーバに必要とする多くのものを提供するため、Apacheの使用率は時間とともに減少すると思われます。

しかし、LiteSpeed Web ServerとCloudflare Serverは、ユーザーベースが拡大し、強力なバックアップを受けているため、将来的に利用される可能性があります。数年後、この比較はNginxとこれらの若い新興企業を比較することになるかもしれません。

Nginx vs Apache: 特徴と機能の技術的な内訳

次のセクションでは、Nginx vs Apacheの技術的な側面をいくつか取り上げます。すべてを網羅することはできませんが、主要な部分については十分な時間をかけて説明します。

いずれにせよ、これらは両サーバの核となる要素であるため、自分に合ったソフトウェアを選ぶ際には十分すぎるほど参考になるはずです。

1. 接続とリクエストの処理

サーバーがどのようにコネクションを処理するかは、そのサーバーの「中核的な通貨」であるため、知ることが極めて重要です。議論の余地はありますが、Nginx と Apache の相対的なメリットを議論するとき、コネクションハンドリングはその認識において大きな役割を果たします。

Nginx

Nginxは「非同期」かつ「イベントドリブン」です。つまり、一度に複数のリクエストを処理し、利用可能なリソースがある間にそれらを処理することができます。一度に数千の接続を想定し、それを処理するために「ワーカープロセス」を生成します。これらはサーバーの残りの部分のための「水の運搬船」です。

例えば、各ワーカープロセスはプロセスイベントや接続をリッスンし、それらを連続したループに追加していきます。そこから、サーバーは各イベントを処理し、終了したら削除することができます。Nginx サーバーのフローは本質的なスケーラビリティを提供し、非同期、ノンブロッキングのアーキテクチャはその役割も果たします。

アパッチ

対照的に、Apache は多数のマルチプロセッシングモジュール (MPM) を通して一度に一つずつイベントを処理します。システム管理者はそのタスクに最も適した接続アーキテクチャを選択しますが、その数は少ないです。

mpm_prefork` モジュールは一般的なものです。これはイベントごとに子プロセスを生成し、一度にひとつの接続しか処理しません。もしプロセス数がリクエスト数より多ければ、パフォーマンスに関してNginxとApacheの違いを見分けるのに苦労することでしょう。

しかし、このような状況は稀であり、Apache サーバは多くの場合、プロセス数よりもリクエスト数の方が多くなります。さらに、このMPMはメモリ使用量の関係で、うまくスケールしません。

PHP を使用している人にとっては、 mpm_preforkmod_php インタプリタモジュールで動作するための唯一の安全な方法です。欠点はあるものの、WordPress 開発者が Apache サーバーにデプロイする場合は、この MPM を選択することになるでしょう。

mpm_workermpm_event` というモジュールも見かけます。これらは似たような動作をしますが、スレッドの集まりごとに複数のプロセスを生成できるため、よりよくスケールします。

この MPM バッチは、場合によっては性能に欠点があるにもかかわらず、Apache がいかに柔軟であるかを示しています。

静的コンテンツと動的コンテンツのリクエスト処理

次に進む前に、各サーバソフトの静的コンテンツと動的コンテンツについて触れておきます。Nginx は動的なコンテンツを処理できないと書いてあり、心配になるかもしれません。実際、Nginxはこの種のコンテンツをネイティブな方法で処理することはありません。代わりに、外部のプロセッサ(キャッシュなど)にコンテンツを送信し、それが戻ってくるのを待ってからコンテンツを移動させます。

開発では、システム管理者がMemcachedのようなソリューションを設定して、この処理を行います。この方法には、パフォーマンスという点でマイナスもあります。しかし、チェーンの各部分のパフォーマンスのオーバーヘッドに対する利点は、これを否定するものです。Nginxはこれらのリクエストの処理に悩まされることがないので、より効率的に担当する分野に集中することができます。

Apache の MPM システムにより、他のモジュールを使用せずに静的コンテンツと動的コンテンツの両方を処理することができます。動的なコンテンツについては、Apache は各ワーカーに言語プロセッサを組み込みます。これはシンプルなアプローチで、うまく機能しています。また、変更が必要な場合は、モジュールを交換することができます。

2. サーバの設定

NginxとApacheの明らかな違いの一つは、各サーバの設定方法です。Nginx は集中型アプローチを採用しています。つまり、ユーザは一つのメインファイル以外ではサーバを設定することができません。これはネガティブなことのように思えますが、多くの利点があります。

  • サーバ管理者はグローバルセキュリティに責任を持ち、サーバへのアクセスを全体的に強化することができます。
  • 集中管理型サーバは、他のタイプに比べてパフォーマンスが高いです。これは、Nginxが各ディレクトリにある設定ファイルをチェックするためのリクエストを処理する必要がないためです。
  • 複数の場所からサーバへのオーバーライドが発生しないので、さらにリクエスト時間が短縮されるという効果があります。

素人がApacheサーバーを使用していることを知る一つの方法は、.htaccessファイルが存在することです。これらは、サーバーのほとんどどこにでも追加できる設定ファイルです。Apacheはリクエストが行われたときに、パスの各要素に.htaccessファイルがあるかどうかを調べます。

A .htaccess file showing some rewrite rules - Nginx vs Apache comparison

これは、サーバの一部を個人的に使用したいユーザにとっては素晴らしいことですが、 ディレクティブの一つが性能やセキュリティの問題を引き起こした場合、 災害を引き起こすかもしれません。この分散化されたアプローチは、共有ホスティングで Apache が使用される理由の一つです。また、WordPressのようなコンテンツ管理システム(CMS)がApacheサーバーで良いパフォーマンスを提供する理由でもあります。

3. リクエストの解釈

Nginx と Apache の大きな違いのひとつに、リクエストをどのように解釈するかということがあります。簡単に言うと

  • Nginxは各コンポーネントにUniform Resource Identifier (URI)を使ってリクエストを解釈しマッピングします。
  • ApacheもURIを使ってリクエストを解釈することができますが、ファイルベースのパス構造を見る方が一般的です。

Apache は何よりもまずウェブサーバなので、リソースを定義するために <directory>, <files>, <location> ブロックを使用します。ここでの重要な概念は、Apache が「見る」ものはすべてウェブサーバに関連しているということで、リソースパスの中に曖昧さはありません。ドキュメントツリーを考えてみてください。これは、Apache がサーバのファイルシステムを「視覚化」する方法です。

An Apache configuration file, showing filesystem protection for specific directories - Nginx vs Apache comparison

一方、Nginx はロードバランサー、プロキシサーバー、Web サーバーなど、様々な用途で利用されています。このため、Nginxがリクエストを処理するにはURIとして来る必要があります。例えば、Nginxは serverlocation ブロックを使います。前者はリクエストされたホストを解釈し、後者はその後にURI部分をマッチさせます。前者はリクエストされたホストを解釈し、後者はその後にURI部分にマッチします。リクエスト全体がURIになります。

An Nginx configuration file - Nginx vs Apache comparison

全体として、Nginxはどんな機能にも適応できるので、URIの方が柔軟です。それでも、Webサーバとしての役割だけ果たせばいいという点では、Apacheの仕組みが有効です。

Nginx vs Apache: 2022年、あなたのサーバーはどちらを選ぶべき?

どのサーバソフトウェアを選べばいいのか、という問いに対する答えは簡単です。ホスティングプロバイダーが提供するものを選べばいいのです。多くの場合、選択肢はありません。多くのウェブホストは、NginxとApacheのどちらを選ぶか決める際に、同じパターンに従っていることに気づきました。

  • 常に設定が必要なサーバを運用したい場合、またはユーザに設定の選択肢を与えたい場合は、Apacheが適合します。
  • しかし、超高性能で強固なセキュリティを提供し、ユーザーではなく自分で設定を行いたいのであれば、Nginxが適しています。

パフォーマンスに関しては、Apacheはその固有のアーキテクチャのため、より多くのメモリを消費する可能性があります。トラフィックが多い場合、特に多くの静的コンテンツを扱う必要がある場合は、Nginx の方が優れていると言えます。

したがって、コンテンツの保存と配信をキャッシュに依存している場合は、Nginxが最適な選択肢となるでしょう。ただし、Nginx は動的コンテンツを扱えないので、サーバが使用するプロキシの効率によってはパフォーマンスが低下することがあります。

結論

WordPress(およびWebサイト運営)には、圧倒的な数の選択肢を提供する領域がたくさんあります。これは自然の摂理です。しかし、あなたのサイトを素早く公開する必要がある場合には、それは役に立ちません。

サーバーの種類の選択は、特に慎重に行いたい重要な最前線の決定の一つです。Nginx と Apache の比較はよく行われますが、どちらも特定の状況において利益をもたらすからです。

私たちは、Nginx の方がより高いパフォーマンスを発揮し、多くの WordPress ユーザーにとってより良い選択肢であると考えています。このため、Kinsta や Flywheel など、パフォーマンス重視の WordPress ホストの多くが、すべて Nginx サーバースタックに移行しています。

とはいえ、ホストに選択肢がない場合でも、ほとんどの WordPress サイトはどちらのウェブサーバーでも問題なく利用できます。

タイトルとURLをコピーしました