このチュートリアルでは、Ubuntu16.04上のApache2Webサーバーの前でリバースプロキシとしてnginxを設定する方法を示します。 nginx(「エンジンx」と発音)は、無料のオープンソースの高性能HTTPサーバーです。 nginxは、その安定性、豊富な機能セット、シンプルな構成、および低リソース消費で知られています。
1予備メモ
このチュートリアルでは、ホスト名server1.example.comとIPアドレス192.168.1.100を使用します。これらの設定はユーザーによって異なる場合があるため、必要に応じて置き換える必要があります。
nginxを介してプロキシするIPアドレス192.168.1.100のポート80でリッスンしている既存のApache仮想ホスト(このチュートリアルではapacheのデフォルトの仮想ホストを使用します)があると想定しています。基本としてUbuntuLAMPチュートリアルを使用します。このチュートリアルは、https(SSL)ではなくhttpのみを対象としていることに注意してください。
2Apacheの構成
最初に行う必要があるのは、80以外の未使用のポート(8000など)でローカルホスト(127.0.0.1)をリッスンするようにApache仮想ホストを構成することです。 /etc/apache2/ports.confを開きます...
nano /etc/apache2/ports.conf
...そしてポート8000のNameVirtualHost行とListen行を変更してポート8000を使用します:
# If you just change the port or add more ports here, you will likely also
# have to change the VirtualHost statement in
# /etc/apache2/sites-enabled/000-default.conf
Listen 8000
<IfModule ssl_module>
Listen 443
</IfModule>
<IfModule mod_gnutls.c>
Listen 443
</IfModule>
次に、vhost構成ファイル(例:/etc/apache2/sites-available/000-default.conf)を開きます...
nano /etc/apache2/sites-available/000-default.conf
...そして、IPアドレス127.0.0.1とポート8000を使用するように
<VirtualHost 127.0.0.1:8000> [...]
nginxを透過プロキシとして構成します。つまり、X-Forwarded-Forというフィールドで元のユーザーのIPアドレスをバックエンドApacheに渡します。もちろん、バックエンドのApacheは、nginx(127.0.0.1)のIPアドレスではなく、元のユーザーのIPアドレスをアクセスログに記録する必要があります。これを実現するには、次の2つの方法があります。
1)/etc/apache2/apache2.confのLogFormat行を変更し、%hを%{X-Forwarded-For} iに置き換えることができます:
nano /etc/apache2/apache2.conf
[...] #LogFormat "%h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" combined LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined [...]
2)Debian / Ubuntuでは、正しいIPアドレスのログ記録を処理するApacheモジュールlibapache2-mod-rpafをインストールできます:
apt-get -y install libapache2-mod-rpaf
これらすべての変更が完了したら、Apacheを再起動します。
service apache2 restart
3nginxの構成
nginxがまだインストールされていない場合は、次のようにインストールします。
apt-get -y install nginx
システム起動リンクを作成し、起動していることを確認します:
systemctl enable nginx.service
service nginx restart
これで、ポート80でリッスンしているはずです。
いくつかの標準プロキシパラメータはファイル/etc/ nginx / proxy_paramsにあります:
nano /etc/nginx/proxy_params
proxy_set_header Host $http_host;>
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
後でそのファイルをexample.comなどのnginxvhostのプロキシ部分に含めるので、必要に応じて、そのファイルにさらにプロキシディレクティブを追加することをお勧めします。次のように:
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme; client_max_body_size 100M; client_body_buffer_size 1m; proxy_intercept_errors on; proxy_buffering on; proxy_buffer_size 128k; proxy_buffers 256 16k; proxy_busy_buffers_size 256k; proxy_temp_file_write_size 256k; proxy_max_temp_file_size 0; proxy_read_timeout 300;
次に、nginxのデフォルトのvhostを変更します。nginxがリクエストをApacheに渡さずに静的ファイルを直接配信できるように、example.comのApache vhostと同じドキュメントルート(例:/ var / www / html)を使用していることを確認してください。
nano /etc/nginx/sites-available/default
server {
listen 80 default_server;
listen [::]:80 default_server;
root /var/www/html;
# Add index.php to the list if you are using PHP
index index.html index.htm index.nginx-debian.html;
server_name _;
location / {
proxy_pass http://localhost:8000;
include /etc/nginx/proxy_params;
}
}
これは、すべてのリクエストをApacheにプロキシする非常に単純な構成です。
変更を有効にするためにnginxをリロードします:
service nginx reload
これで、サーバーのホスト名またはIP 192.168.1.100をブラウザに入力できます。これで、apacheのデフォルトのWebサイトが表示されますが、今回はnginxを介して配信されます。
前に述べたように、これはすべてのリクエストをApacheにプロキシする非常に単純な構成です。ただし、nginxはApacheよりも静的ファイル(JavaScript、CSS、画像、PDFファイル、静的HTMLファイルなど)の配信がはるかに高速であるため、nginxにこれらのファイルを直接提供させることをお勧めします。これは、これらのファイルの新しい場所を追加することで実行できます。次のように:
server { listen 80 default_server;
listen [::]:80 default_server;
root /var/www/html;
# Add index.php to the list if you are using PHP
index index.html index.htm index.nginx-debian.html;
server_name _;
location / {
proxy_pass http://localhost:8000;
include /etc/nginx/proxy_params;
} location ~* \.(js|css|jpg|jpeg|gif|png|svg|ico|pdf|html|htm)$ { } }
nginxをリロードします:
service nginx reload
ブラウザがこれらのファイルをキャッシュするように、これらのファイルにExpires HTTPヘッダーを設定することもできます(詳細については、ブラウザがnginxで静的ファイルをキャッシュするを参照してください):
server { listen 80 default_server;
listen [::]:80 default_server;
root /var/www/html;
# Add index.php to the list if you are using PHP
index index.html index.htm index.nginx-debian.html;
server_name _;
location / {
proxy_pass http://localhost:8000;
include /etc/nginx/proxy_params;
} location ~* \.(js|css|jpg|jpeg|gif|png|svg|ico|pdf|html|htm)$ { expires 30d; } }
これで、nginxが実行できる限り多くのリクエストを処理し、残りのリクエストとPHPファイルのみをApacheに渡すことで、このセットアップをさらに一歩進めることができます。
server { listen 80 default_server;
listen [::]:80 default_server;
root /var/www/html;
# Add index.php to the list if you are using PHP
index index.html index.htm index.nginx-debian.html;
server_name _;
location / {
proxy_pass http://localhost:8000;
include /etc/nginx/proxy_params;
} location ~* \.(js|css|jpg|jpeg|gif|png|svg|ico|pdf|html|htm)$ { expires 30d; } location @proxy { proxy_pass http://127.0.0.1:8000; include /etc/nginx/proxy_params; } location ~* \.php$ { proxy_pass http://127.0.0.1:8000; include /etc/nginx/proxy_params; } }
nginxをリロードします:
service nginx reload
もちろん、たとえばnginx proxy_cacheを使用して、この設定をさらに微調整することもできます(たとえば、アプリケーションで許可されている場合は、キャプチャまたはショッピングカートがキャッシュされていないこと、およびログインしているユーザーがキャッシュされていないことを確認する必要があります)常にページの新しいコピーを取得します)またはアプリケーションにフルページキャッシュがある場合-このような場合、nginxはフルページキャッシュに直接アクセスできます(このチュートリアルで例を見つけることができます:ブーストでDrupal7.7を高速化する方法nginx(Debian Squeeze))。
4つのリンク
- nginx:http://nginx.net/
- Apache:http://httpd.apache.org/
- Ubuntu:http://www.ubuntu.com/