Apache vs nginx:違いと設定の書き換え方
Apache vs nginx
Apache vs nginx:プロセス、.htaccess、設定の変換 | We.Inc
Apacheとnginxを、接続の処理方法、ディレクトリ単位の設定ファイルと集中設定の違い、リロード、プロキシの観点で比較します。よく使うリライトルールの変換ツール付きです。
どちらも成熟したオープンソースのWebサーバーです。Apacheはモジュールを読み込み、プロセスモデル(prefork、worker、event)を選べて、ディレクトリごとに.htaccessファイルで設定を上書きできます。後者は1つのマスタープロセスと少数のイベント駆動型ワーカーで動き、中央の設定ファイルだけを読み込み、アプリケーションサーバーの前段にリバースプロキシとして置かれることがよくあります。
Apacheとnginxの比較
- 接続の処理
- MPMを選択:prefork、worker、event(最近のUnixでは通常イベント型がデフォルト)
- 1つのマスタープロセスと、イベントベースのモデルで動くワーカープロセス
- ディレクトリごとの設定
- .htaccessファイル(AllowOverrideで許可されている場合。デフォルトは許可なし)
- なし:すべてメインの設定ファイルに書く
- リライト
- mod_rewrite:RewriteCondとRewriteRule
- return、rewrite、try_files、ロケーションブロック
- FastCGI経由のPHP
- mod_proxy_fcgiでPHP-FPMプールへ
- fastcgi_passでPHP-FPMプールへ
- リバースプロキシ
- mod_proxy:ProxyPassとProxyPassReverse
- ロケーション内のproxy_pass
- ロードバランシング
- mod_proxy_balancer:byrequests、bytraffic、bybusyness、heartbeat
- upstreamブロック:ラウンドロビン、least_conn、ip_hash、hash、random
- テストとリロード
- apachectl configtest の後に apachectl graceful
- nginx -t の後に nginx -s reload
どちらを選ぶかは、主に設定がどこにあり、誰が変更できるかで決まります。このページでは、ワークロードとチューニング次第で結果が変わるベンチマークの主張は扱わず、サイトを運用するうえで実際に出会う違いに絞ります。それぞれの接続処理の仕組み、ディレクトリ単位の設定ファイルが存在する理由、そして既存のリライトルールの書き換え方です。変換ツールを使うと、おなじみのApacheルールが相手側でどう書けるかを確認できます。
- 変換ツールで、HTTPSの強制や、不明なパスをすべてindex.htmlに送るなどの用途を選びます。
- 自分のドメインを入力すると、両方のバージョンがそのまま貼り付けられる形になります。
- Apache版はバーチャルホストか.htaccessに、もう一方は対応するサーバーブロックの中に書きます。
- リロードする前にテストしましょう。Apacheはapachectl configtest、nginxはnginx -tです。
- Apacheでは、マシンを管理できるなら、ディレクトリごとのファイルよりメインのサーバー設定を使いましょう。公式ドキュメントにもはっきり書かれています。許可すると、リクエストごとにパス上のすべてのディレクトリでファイルを探すからです。
- ホストを判定するifブロックは、ほぼ必ず、return 301を書いた別のサーバーブロックにするほうが適切です。
- RewriteCondによるファイル存在チェックの連鎖は、try_files 1行に置き換えましょう。列挙したパスは順番に確認されます。
- add_headerは、自分で同じ指定を定義するブロックには継承されないことを覚えておきましょう。何かヘッダーを設定するロケーションでは、毎回セキュリティヘッダーも繰り返し書いてください。
- 両方を併用するのも一般的です。TLSと静的ファイルはエッジ側のnginxが担当し、動的なリクエストはローカルポートのApacheへプロキシします。
よくある質問
nginxはApacheより速いですか?
処理内容とチューニング次第なので、単一の数値には注意してください。こちらのイベント駆動型ワーカープロセスは、多数のアイドル接続を低コストで保持するよう設計されています。Apacheのイベント型MPMも、スレッドセーフなポーリングを使うことでその差を縮めました。速度だけを理由に切り替える前に、自分のワークロードで計測しましょう。
nginxは.htaccessファイルに対応していますか?
いいえ。ディレクトリごとの上書きファイルがないため、そのルールはサーバー設定に移してからリロードする必要があります。これは意図的なトレードオフです。リクエストごとのファイル検索はなくなりますが、メインの設定にアクセスできる人しかルールを変更できません。
.htaccessをnginxに自動変換できますか?
このページの変換ツールで確認できるように、単純なリダイレクトやフォールバックはきれいに変換できます。[P] などのフラグや環境変数を使ったRewriteCondの長い連鎖は、人が読んで判断する必要があります。同じ意図を別の部品で表現するからです。
WordPressやPHPのサイトにはどちらを選ぶべきですか?
ホスティング会社がファイルへのアクセスしか提供しないなら、ルールを変更できる唯一の手段は、ディレクトリごとの設定ファイルを使えるApacheです。自分で管理するサーバーなら、どちらもPHP-FPMと組み合わせて使えます。後者では、きれいなURLのためのフォールバックをサーバーブロックにtry_filesで一度書くだけです。
接続を切らずに設定をリロードするには?
nginx -s reloadを実行します。マスターが新しい設定を確認し、新しいワーカーを起動して、古いワーカーには処理を穏やかに終えるよう指示します。Apacheではapachectl gracefulが子プロセスに対して同じことを行います。
プロセスモデルをわかりやすく
- Apacheは接続の処理をマルチプロセッシングモジュール(MPM)に任せます。プリフォーク型は接続ごとに1つのプロセスを使い、スレッドを必要としません。ワーカー型は複数のプロセスを動かし、それぞれが多数のスレッドを持ちます。イベント型はワーカー型を土台に、スレッドセーフなポーリングを使って、アイドル状態のkeep-alive接続がスレッドを占有しないようにします。現在のLinuxとBSDでは、デフォルトでこれが選ばれます。
- nginxには、設定を読み込んでワーカーを管理する1つのマスタープロセスと、それぞれがイベントループで多数の接続を処理する少数のワーカープロセスがあります。
.htaccessが重要な理由
- .htaccessがあれば、root権限のない人でも1つのディレクトリのルールを変更できます。共有ホスティングがこれに頼っているのはそのためです。代償として、リクエストのたびに親ディレクトリをすべて調べてファイルを探すことになります。ファイルが1つもない場合でもです。デフォルトのAllowOverride Noneでは、これらのファイルは完全に無視されます。
同じサイトを両方のサーバーで
Apacheのバーチャルホスト
1つのフォルダーから静的ファイルを配信し、SPAのフォールバックも加えます。バーチャルホスト側で設定するので、ディレクトリごとの設定ファイルは不要です。
nginxのサーバーブロック
同じ動作です:ルートフォルダー、存在確認によるフォールバック、カスタムエラーページ。
HTTPSを強制する
Apacheは暗号化接続のフラグを判定し、もう一方はリダイレクトだけを行う80番ポートの別のサーバーブロックを使います。
wwwなしのドメインをwwwへ送る
公式ドキュメントでは、ホストに対するifではなく、returnを書いた専用のサーバーブロックが推奨されています。
シングルページアプリのフォールバック
実在するファイルはそのまま配信し、それ以外のパスにはindex.htmlを返します。
古いページを1つリダイレクトする
Apacheのエイリアス用モジュールによるRedirectはリライトエンジンを必要としません。もう一方は完全一致のロケーション指定でパスに一致させます。
カスタム404ページ
どちらもエラーを同じサイト内のページに向けます。
/apiをアプリサーバーへプロキシする
Apacheでは2つのプロキシ用モジュールの読み込みが必要で、両方の引数の末尾スラッシュをそろえる必要があります。もう一方はプロキシ機能が標準で組み込まれています。
.gitなどの隠しファイルをブロックする
名前がドットで始まるファイルを配信しないようにします。
セキュリティヘッダーを追加する
常に付与する指定を付けると、どちらのサーバーも成功レスポンスだけでなくエラーレスポンスにもヘッダーを追加します。
用途を絞り込む
https、proxy、404...
Apache(.htaccessまたはバーチャルホスト)
nginx(サーバーブロック)
その条件に一致する用途はありません。
無料で始める · クレジットカード不要
関連: ガイド|Webマーケティングと集客を学ぶ
製品
ご利用いただける方
機能
リソース
会社情報
サイトマップを見る