Apache vs nginx:違いと設定の書き換え方

Apache vs nginx

Apache vs nginx:プロセス、.htaccess、設定の変換 | We.Inc

Apacheとnginxを、接続の処理方法、ディレクトリ単位の設定ファイルと集中設定の違い、リロード、プロキシの観点で比較します。よく使うリライトルールの変換ツール付きです。

どちらも成熟したオープンソースのWebサーバーです。Apacheはモジュールを読み込み、プロセスモデル(prefork、worker、event)を選べて、ディレクトリごとに.htaccessファイルで設定を上書きできます。後者は1つのマスタープロセスと少数のイベント駆動型ワーカーで動き、中央の設定ファイルだけを読み込み、アプリケーションサーバーの前段にリバースプロキシとして置かれることがよくあります。

Apacheと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が子プロセスに対して同じことを行います。

プロセスモデルをわかりやすく

.htaccessが重要な理由

同じサイトを両方のサーバーで

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マーケティングと集客を学ぶ

製品

ご利用いただける方

機能

リソース

会社情報

サイトマップを見る