NginxをApacheのリバースプロキシとして設定する方法
注:このチュートリアルは古く、保守されていません。 Ubuntu18.04およびUbuntu16.04の更新バージョンが利用可能です
NginxとApacheを一緒に実行する理由
nginxとapacheはどちらも強力で効果的なサーバーです。 Apacheは現在、Webサイトのナンバーワンサーバーとして君臨しており、2006年の公開以来、nginxは世界を席巻し、現在はアクティブサイトのナンバー2サーバーになっています。 それぞれのサーバーが人気を博している理由は明らかです。apacheのパワーとnginxの速度はよく知られています。 ただし、どちらのサーバーにも欠点があります。apacheはサーバーのメモリに負担をかけますが、nginx(静的ファイルに最適)は動的コンテンツ用にphp-fpmまたは同様のモジュールの助けを必要とします。
ただし、静的Webサーバーのフロントとしてnginxを使用し、バックエンドをApacheで処理することで、2つのWebサーバーを組み合わせて大きな効果を上げることができます。
設定
このチュートリアルの手順を実行するには、仮想プライベートサーバーに対するsudo権限が必要です。
sudo権限を持つユーザーを作成するには、初期ubuntuサーバーセットアップチュートリアルの3番目と4番目の手順を実行します。
nginxをインストールします
まず、サイトのフロントエンドにサービスを提供するnginxをインストールして構成する必要があります。
apt-getからダウンロードしましょう:
sudo apt-get install nginx
ダウンロードが完了したら、先に進んで、フロントエンドで実行するように仮想ホストを構成できます。
構成に加える必要のある変更がいくつかあります。
nginxを構成する
nginx構成を開きます。
sudo nano /etc/nginx/sites-available/example
次の構成では、nginxをフロントエンドサーバーとして使用するように設定します。 これはデフォルトの設定と非常によく似ており、詳細は構成の下にあります。
server { listen 80; root /var/www/; index index.php index.html index.htm; server_name example.com; location / { try_files $uri $uri/ /index.php; } location ~ \.php$ { proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $remote_addr; proxy_set_header Host $host; proxy_pass http://127.0.0.1:8080; } location ~ /\.ht { deny all; } }
次の変更が構成に実装されました。
- ルートが正しいWebディレクトリに設定されました
- index.phpがインデックス行に追加されました
- try_filesは、訪問者が要求するページを提供しようとします。 nginxができない場合、ファイルはプロキシに渡されます
- proxy_passは、プロキシされたサーバーのアドレスをnginxに許可します
- 最後に、Apacheのドキュメントルートがnginxのドキュメントルートと一致する場合、 “location〜/\。ht{“ロケーションブロックは.htaccessファイルへのアクセスを拒否します
この構成は、phpで終わるすべての拡張機能がポート8080で実行されるapacheバックエンドに再ルーティングされるシステムをセットアップします。
仮想ホストをアクティブ化します。
sudo ln -s /etc/nginx/sites-available/example /etc/nginx/sites-enabled/example
さらに、デフォルトのnginxサーバーブロックを削除します。
sudo rm /etc/nginx/sites-enabled/default
次のステップは、apacheをインストールして構成することです。
Apacheをインストールします
nginxの処理が完了したら、バックエンドであるapacheをインストールします。
sudo apt-get install apache2
nginxがまだオンになっていないため、Apacheはポート80で実行を開始します。
Apacheを構成する
バックエンドを引き継ぐようにApacheを設定する必要があります。これは、nginxに伝えたように、ポート8080で実行されます。 apacheポートファイルを開いて、正しいポートでのapacheの設定を開始します。
sudo nano /etc/apache2/ports.conf
次の行を見つけて変更し、ローカルホストからのみアクセスできるポート8080でapacheを実行します。
NameVirtualHost 127.0.0.1:8080 Listen 127.0.0.1:8080
保存して終了。
続いて、新しい仮想ホストファイルを開き、デフォルトのapacheファイルからレイアウトをコピーします。
sudo cp /etc/apache2/sites-available/default /etc/apache2/sites-available/example
sudo nano /etc/apache2/sites-available/example
ここで対処する必要がある主な問題は、仮想ホストをもう一度ポート8080で実行する必要があることです(nginxに指定されたデフォルトの80ではありません)。
行は次のようになります。
<VirtualHost 127.0.0.1:8080>
ドキュメントルートが正しいことを確認してください。 ファイルを保存して終了し、その仮想ホストをアクティブ化します。
sudo a2ensite example
テストを開始する前に、apacheにphpを装備する必要があります。 さあ、今すぐインストールしてください:
sudo apt-get install php5
両方のサーバーを再起動して、変更を有効にします。
sudo service apache2 restart
sudo service nginx restart
終わらせる
サイトのフロントエンドでnginxを実行し、バックエンドでapache処理phpを使用してVPSを設定しました。 ドメインをロードすると、サイトのデフォルトページに移動します。
一般的なphpスクリプトを実行することで、情報がapacheにルーティングされていることを確認できます。
先に進み、php.infoファイルを作成します。
sudo nano /var/www/info.php
次の行をそのファイルに貼り付けます。
<? phpinfo( ); ?>
保存して終了。
domain / info.phpにアクセスすると、php情報画面が表示され、これがapacheによって処理されたことがわかります。 (スクリーンショットここ)
最後に、このコマンドを入力すると、開いているポートと各ポートにあるアプリケーションを確認できます。
sudo netstat -plunt
続きを見る
nginxとApacheを一緒に構成すると、サーバーが大幅に強化される可能性があります。これは簡単な概要です。 2つを一緒に構成することについて具体的な質問がある場合は、お気軽に Q&Aフォーラム喜んでお答えします。