前書き
ApacheとNginxは、PHPでよく使用される2つの人気のあるオープンソースWebサーバーです。 要件が異なる複数のWebサイトをホストする場合、同じ仮想マシンで両方を実行すると便利です。 単一のシステムで2つのWebサーバーを実行する一般的なソリューションは、複数のIPアドレスまたは異なるポート番号を使用することです。
IPv4とIPv6の両方のアドレスを持つドロップレットは、一方のプロトコルのApacheサイトと他方のプロトコルのNginxサイトにサービスを提供するように構成できますが、ISPによるIPv6の採用はまだ普及していないため、これは現在実用的ではありません。 2番目のWebサーバーに81
や8080
などの異なるポート番号を設定することも別の解決策ですが、URLをポート番号(http://example.com:81
など)と共有することは必ずしも合理的または理想的とは限りません。
このチュートリアルでは、NginxをWebサーバーとApacheのリバースプロキシの両方として構成する方法をすべて1つのドロップレットで説明します。 Webアプリケーションによっては、特にSSLサイトが構成されている場合、Apacheリバースプロキシ対応を維持するためにコードの変更が必要になる場合があります。 これを確実にするために、特定の環境変数を書き換えるmod_rpafという名前のApacheモジュールをインストールして、ApacheがWebクライアントからの要求を直接処理しているように見せます。
1つのドロップレットで4つのドメイン名をホストします。 Nginxは、example.com
(デフォルトの仮想ホスト)とsample.org
の2つを提供します。 残りの2つ、foobar.net
とtest.io
は、Apacheによって提供されます。
前提条件
-
新しいUbuntu 14.04ドロップレット。
-
sudo
権限を持つ標準ユーザーアカウント。 Initial Server Setup with Ubuntu 14.04の手順2と3に従って、標準アカウントを設定できます。 -
目的のドメイン名は、DigitalOceanコントロールパネルでドロップレットのIPアドレスを指している必要があります。 これを行う方法の例については、How To Set Up a Host Name with DigitalOceanのステップ3を参照してください。 ドメインのDNSを他の場所でホストしている場合は、代わりに適切なA recordsを作成する必要があります。
オプションのリファレンス
このチュートリアルでは、ApacheおよびNginxの仮想ホストの基本的な知識、およびSSL証明書の作成と構成が必要です。 これらのトピックの詳細については、次の記事を参照してください。
[[step-1 -—- installing-apache-and-php5-fpm]] ==ステップ1—ApacheとPHP5-FPMのインストール
ApacheとPHP-FPMに加えて、PHP FastCGI Apacheモジュールもインストールする必要があります。 これはlibapache2-mod-fastcgi
であり、Ubuntuのmultiverseリポジトリで利用できます。最初にsources.list
ファイルで有効にする必要があります。
sudo nano /etc/apt/sources.list
次の行を見つけて、先頭のハッシュ記号(#
)を削除してコメントを解除します。
# deb http://mirrors.digitalocean.com/ubuntu trusty multiverse
. . .
# deb http://mirrors.digitalocean.com/ubuntu trusty-updates multiverse
これにより、次のように表示されます。
deb http://mirrors.digitalocean.com/ubuntu trusty multiverse
. . .
deb http://mirrors.digitalocean.com/ubuntu trusty-updates multiverse
ファイルを保存し、aptリポジトリを更新します。
sudo apt-get update
次に、必要なパッケージをインストールします。
sudo apt-get install apache2 libapache2-mod-fastcgi php5-fpm
[[step-2 -—- configuring-apache-and-php5-fpm]] ==ステップ2—ApacheとPHP5-FPMの構成
このステップでは、Apacheのポート番号を8080
に変更し、mod_fastcgi
モジュールを使用してPHP5-FPMで動作するように構成します。 Apache構成ファイルを編集し、Apacheのポート番号を変更します。
sudo nano /etc/apache2/ports.conf
次の行を見つけます。
Listen 80
それをに変更してください。
Listen 8080
ports.conf
を保存して終了します。
Note: Webサーバーは通常、リバースプロキシを構成するときに127.0.0.1:8080
をリッスンするように設定されますが、そうすると、PHPの環境変数SERVER_ADDRの値がサーバーのパブリックIPではなくループバックIPアドレスに設定されます。 。 私たちの目的は、ApacheのWebサイトがその前にリバースプロキシを表示しないようにApacheをセットアップすることです。 したがって、すべてのIPアドレスの8080
をリッスンするように構成します。
次に、Apacheのデフォルトの仮想ホストファイルを編集します。 このファイルの<VirtualHost>
ディレクティブは、ポート80
でのみサイトにサービスを提供するように設定されています。
sudo nano /etc/apache2/sites-available/000-default.conf
最初の行は次のようになります。
それをに変更してください。
ファイルを保存し、Apacheをリロードします。
sudo service apache2 reload
Apacheが8080
をリッスンしていることを確認します。
sudo netstat -tlpn
出力は次のようになり、apache2は:::8080をリッスンします。
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1086/sshd
tcp6 0 0 :::8080 :::* LISTEN 4678/apache2
tcp6 0 0 :::22 :::* LISTEN 1086/sshd
[[step-3 -—- configuring-apache-to-use-mod_fastcgi]] ==ステップ3—mod_fastcgiを使用するようにApacheを設定する
Apacheはデフォルトでmod_php
で動作しますが、PHP5-FPMで動作するには追加の構成が必要です。
Note:
mod_php
を使用したLAMPの既存のインストールでこのチュートリアルを試している場合は、最初に次のコマンドで無効にします。sudo a2dismod php5
mod_action
に依存するmod_fastcgi
の構成ブロックを追加します。 mod-action
はデフォルトで無効になっているため、最初に有効にする必要があります。
sudo a2enmod actions
ドロップレットにインストールされているApacheのバージョンを確認するには、次を使用します。
sudo apache2 -v
それに応じてfastcgi
構成ファイルを編集します。 これらの構成ディレクティブは、.php
ファイルの要求をPHP5-FPMUNIXソケットに渡します。
sudo nano /etc/apache2/mods-enabled/fastcgi.conf
Apache 2.4の<IfModule mod_fastcgi.c> . . . </IfModule>
ブロックの下部に次の行を追加します。
AddType application/x-httpd-fastphp5 .php
Action application/x-httpd-fastphp5 /php5-fcgi
Alias /php5-fcgi /usr/lib/cgi-bin/php5-fcgi
FastCgiExternalServer /usr/lib/cgi-bin/php5-fcgi -socket /var/run/php5-fpm.sock -pass-header Authorization
Require all granted
Apache 2.2は<Directory>
セクションを必要としないため、以下を追加します。
AddType application/x-httpd-fastphp5 .php
Action application/x-httpd-fastphp5 /php5-fcgi
Alias /php5-fcgi /usr/lib/cgi-bin/php5-fcgi
FastCgiExternalServer /usr/lib/cgi-bin/php5-fcgi -socket /var/run/php5-fpm.sock -pass-header Authorization
fastcgi.conf
で終了したら、構成テストを実行します。
sudo apachectl -t
Syntax OKが表示された場合は、Apacheをリロードします。 警告Could not reliably determine the server's fully qualified domain name, using 127.0.1.1. Set the 'ServerName' directive globally to suppress this message.
が表示された場合は、問題ありません。 今は影響しません。
sudo service apache2 reload
[[step-4 -—- verifying-php-functionality]] ==ステップ4—PHP機能の検証
phpinfo()
ファイルを作成し、Webブラウザーからアクセスして、PHPが機能するかどうかを確認します。
echo "" | sudo tee /var/www/html/info.php
ブラウザでファイルを表示するには、http://111.111.111.111:8080/info.php
に移動しますが、DropletのIPアドレスを使用します。 これにより、PHPが使用している構成仕様のリストが表示されます。
ページの上部で、Server APIがFPM/FastCGIを示していることを確認します。 ページの下の約3分の2で、PHP VariablesセクションにSERVER_SOFTWAREがUbuntu上のApacheであることが示されます。 これらは、mod_fastcgi
がアクティブであり、ApacheがPHP5-FPMを使用してPHPファイルを処理していることを確認します。
[[step-5 -—- creating-virtual-hosts-for-apache]] ==ステップ5—Apache用の仮想ホストの作成
ドメインfoobar.net
とtest.io
用に2つのApache仮想ホストファイルを作成します。 これは、両方のサイトのdocument rootディレクトリを作成することから始まります。
sudo mkdir -v /var/www/{foobar.net,test.io}
次に、セットアップの完了後にテストするために、各ディレクトリに2つのファイルを追加します。
まず、サイトごとにindex
ファイルを作成します。
echo "Foo Bar
" | sudo tee /var/www/foobar.net/index.html
echo "Test IO
" | sudo tee /var/www/test.io/index.html
次に、phpinfo()
ファイル。
echo "" | sudo tee /var/www/foobar.net/info.php
echo "" | sudo tee /var/www/test.io/info.php
foobar.net
ドメインの仮想ホストファイルを作成します。
sudo nano /etc/apache2/sites-available/foobar.net.conf
次のディレクティブをその中に配置します。
ServerName foobar.net
ServerAlias www.foobar.net
DocumentRoot /var/www/foobar.net
AllowOverride All
ファイルを保存して閉じます。 次に、test.io
についても同じようにします。
sudo nano /etc/apache2/sites-available/test.io.conf
ServerName test.io
ServerAlias www.test.io
DocumentRoot /var/www/test.io
AllowOverride All
Note 1:AllowOverride All
は、.htaccess
のサポートを有効にします。
Note 2:これらは最も基本的なディレクティブにすぎません。 Apacheで仮想ホストを設定するための完全なガイドについては、How To Set Up Apache Virtual Hosts on Ubuntu 14.04 LTSを参照してください。
両方のApache仮想ホストがセットアップされたので、a2ensite
コマンドを使用してサイトを有効にします。 これにより、sites-enabled
ディレクトリに仮想ホストファイルへのシンボリックリンクが作成されます。
sudo a2ensite foobar.net
sudo a2ensite test.io
Apacheの構成エラーを再度確認します。
sudo apachectl -t
Syntax OKが表示された場合は、リロードしてください。
sudo service apache2 reload
サイトが機能していることを確認するには、ブラウザでhttp://foobar.net:8080
とhttp://test.io:8080
を開き、index.htmlファイルが表示されていることを確認します。
君は見るべきだ:
また、info.phpファイルhttp://foobar.net:8080/info.php
およびhttp://test.io:8080/info.php
にアクセスして、PHPが機能しているかどうかを確認します。
ステップ1で見たのと同じPHP構成仕様リストが各サイトに表示されるはずです。 これで、Apacheのポート8080
で2つのWebサイトがホストされました。
[[step-6 -—- installing-and-configuring-nginx]] ==ステップ6—Nginxのインストールと構成
このステップでは、Nginxをインストールし、ドメインexample.com
とsample.org
をNginxの仮想ホストとして構成します。 Nginxで仮想ホストを設定するための完全なガイドについては、How To Set Up Nginx Server Blocks (Virtual Hosts) on Ubuntu 14.04 LTSを参照してください。
Nginxをインストールします。
sudo apt-get install nginx
次に、デフォルトの仮想ホストのシンボリックリンクを削除します。
sudo rm /etc/nginx/sites-enabled/default
次に、Nginxの仮想ホストを作成します。 まず、両方のWebサイトのdocument rootディレクトリを作成します。
sudo mkdir -v /usr/share/nginx/{example.com,sample.org}
Apacheの仮想ホストで行ったように、セットアップの完了後にテスト用にindex
ファイルとphpinfo()
ファイルを再度作成します。
echo "Example.com
" | sudo tee /usr/share/nginx/example.com/index.html
echo "Sample.org
" | sudo tee /usr/share/nginx/sample.org/index.html
echo "" | sudo tee /usr/share/nginx/example.com/info.php
echo "" | sudo tee /usr/share/nginx/sample.org/info.php
次に、ドメインexample.com
の仮想ホストファイルを作成します。
sudo nano /etc/nginx/sites-available/example.com
Nginxは、構成ファイルserver blocksのserver {. . .}
領域を呼び出します。 プライマリ仮想ホストexample.comのサーバーブロックを作成します。 default_server
構成ディレクティブは、これを他の仮想ホストと一致しないHTTP要求を処理するデフォルトの仮想ホストにします。
以下をexample.comのファイルに貼り付けます。
server {
listen 80 default_server;
root /usr/share/nginx/example.com;
index index.php index.html index.htm;
server_name example.com www.example.com;
location / {
try_files $uri $uri/ /index.php;
}
location ~ \.php$ {
try_files $uri =404;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
}
}
ファイルを保存して閉じます。 次に、Nginxの2番目のドメインsample.org
の仮想ホストファイルを作成します。
sudo nano /etc/nginx/sites-available/sample.org
sample.orgのサーバーブロックは次のようになります。
server {
root /usr/share/nginx/sample.org;
index index.php index.html index.htm;
server_name sample.org www.sample.org;
location / {
try_files $uri $uri/ /index.php;
}
location ~ \.php$ {
try_files $uri =404;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
}
}
ファイルを保存して閉じます。 次に、sites-enabled
ディレクトリへのシンボリックリンクを作成して、両方のサイトを有効にします。
sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/example.com
sudo ln -s /etc/nginx/sites-available/sample.org /etc/nginx/sites-enabled/sample.org
Nginx構成テストを実行します。
sudo service nginx configtest
次に、OKが表示されている場合は、Nginxをリロードします。
sudo service nginx reload
次に、WebブラウザでNginx仮想ホストのphpinfo()
ファイルにhttp://example.com/info.php
とhttp://sample.org/info.php
でアクセスします。 PHP Variablesセクションをもう一度見てください。
[“SERVER_SOFTWARE”]はnginxと表示され、ファイルがNginxによって直接提供されたことを示します。 [“DOCUMENT_ROOT”]は、このステップの前半でNginxサイトごとに作成したディレクトリを指している必要があります。
この時点で、Nginxをインストールし、2つの仮想ホストを作成しました。 次に、Apacheでホストされているドメイン向けのリクエストをプロキシするための追加の仮想ホストを設定します。
[[step-7 -—- configuring-nginx-for-apache-39-s-virtual-hosts]] ==ステップ7—Apacheの仮想ホスト用にNginxを構成する
このセクションでは、server_name
ディレクティブに複数のドメイン名を持つ追加のNginx仮想ホストを作成します。 これらのドメイン名のリクエストはApacheにプロキシされます。
新しいNginx仮想ホストファイルを作成します。
sudo nano /etc/nginx/sites-available/apache
以下にコードブロックを追加します。 これは、両方のApache仮想ホストドメインの名前を指定し、それらのリクエストをApacheにプロキシします。 proxy_pass
でパブリックIPアドレスを使用することを忘れないでください。
server {
listen 80;
server_name foobar.net www.foobar.net test.io www.test.io;
location / {
proxy_pass http://111.111.111.111:8080;
proxy_set_header Host $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;
}
}
ファイルを保存し、シンボリックリンクを作成してこの新しい仮想ホストを有効にします。
sudo ln -s /etc/nginx/sites-available/apache /etc/nginx/sites-enabled/apache
構成テストを実行します。
sudo service nginx configtest
OKが表示された場合は、Nginxをリロードします。
sudo service nginx reload
ブラウザを開き、Apacheのドメイン名の1つでhttp://foobar.net/info.php
にアクセスします。 PHP Variablesセクションまで下にスクロールして、表示される値を確認します。
変数SERVER_SOFTWAREおよびDOCUMENT_ROOTは、この要求がApacheによって処理されたことを確認する必要があります。 変数HTTP_X_REAL_IPとHTTP_X_FORWARDED_FORはNginxによって追加され、ブラウザでURLにアクセスしているコンピュータのパブリックIPアドレスを表示する必要があります。
特定のドメインのリクエストをApacheにプロキシするようにNginxを正常にセットアップしました。 次のステップは、これらのリクエストを直接処理しているかのように変数REMOTE_ADDR
を設定するようにApacheを設定することです。
[[step-8 -—- installing-and-configuring-mod_rpaf]] ==ステップ8—mod_rpafのインストールと構成
このステップでは、mod_rpafという名前のApacheモジュールをインストールします。このモジュールは、リバースプロキシによって提供された値に基づいてREMOTE_ADDR、HTTPS、およびHTTP_PORTの値を書き換えます。 このモジュールがないと、一部のPHPアプリケーションでは、プロキシの背後からシームレスに動作するようにコードを変更する必要があります。 このモジュールはUbuntuのリポジトリにlibapache2-mod-rpaf
として存在しますが、古く、特定の構成ディレクティブをサポートしていません。 代わりに、ソースからインストールします。
モジュールのコンパイルとビルドに必要なパッケージをインストールします。
sudo apt-get install unzip build-essential apache2-threaded-dev
GitHubから最新の安定版リリースをダウンロードします。
wget https://github.com/gnif/mod_rpaf/archive/stable.zip
以下で抽出します:
unzip stable.zip
作業ディレクトリに移動します。
cd mod_rpaf-stable
次に、モジュールをコンパイルしてインストールします。
sudo make
sudo make install
rpafモジュールをロードするファイルをmods-available
ディレクトリに作成します。
sudo nano /etc/apache2/mods-available/rpaf.load
ファイルに次の行を追加します。
LoadModule rpaf_module /usr/lib/apache2/modules/mod_rpaf.so
このディレクトリに別のファイルを作成します。 これには、構成ディレクティブが含まれます。
sudo nano /etc/apache2/mods-available/rpaf.conf
次のコードブロックを追加し、ドロップレットのIPアドレスを必ず追加してください。
RPAF_Enable On
RPAF_Header X-Real-Ip
RPAF_ProxyIPs 111.111.111.111
RPAF_SetHostName On
RPAF_SetHTTPS On
RPAF_SetPort On
各ディレクティブの簡単な説明を次に示します。 詳細については、mod_rpaf
READMEファイルを参照してください。
-
RPAF_Header-クライアントの実際のIPアドレスに使用するヘッダー。
-
RPAF_ProxyIPs-HTTPリクエストを調整するプロキシIP。
-
RPAF_SetHostName-ServerNameとServerAliasが機能するように、仮想ホスト名を更新します。
-
RPAF_SetHTTPS-
X-Forwarded-Proto
に含まれる値に基づいて、HTTPS
環境変数を設定します。 -
RPAF_SetPort-
SERVER_PORT
環境変数を設定します。 ApacheがSSLプロキシの背後にある場合に役立ちます。
rpaf.conf
を保存し、モジュールを有効にします。
sudo a2enmod rpaf
これにより、mods-enabled
ディレクトリにファイルrpaf.load
とrpaf.conf
のシンボリックリンクが作成されます。 次に、構成テストを行います。
sudo apachectl -t
Syntax OKが返された場合は、Apacheをリロードします。
sudo service apache2 reload
ブラウザでApacheのWebサイトのphpinfo()
ページのいずれかにアクセスし、PHP Variablesセクションを確認します。 REMOTE_ADDR変数は、ローカルコンピューターのパブリックIPアドレスの変数にもなります。
[[step-9 -—- setting-up-https-websites-optional]] ==ステップ9— HTTPS Webサイトのセットアップ(オプション)
この手順では、Apacheでホストされている両方のドメインのSSL証明書を構成します。 NginxはSSL終了をサポートしているため、Apacheの構成ファイルを変更せずにSSLをセットアップできます。 mod_rpaf
モジュールは、アプリケーションがSSLリバースプロキシの背後でシームレスに動作するように、必要な環境変数がApacheに設定されていることを確認します。
SSL証明書とその秘密キー用のディレクトリを作成します。
sudo mkdir /etc/nginx/ssl
この記事では、有効期間が10年の自己署名SSL証明書を使用します。 foobar.net
とtest.io
の両方の自己署名証明書を生成します。
sudo openssl req -x509 -sha256 -newkey rsa:2048 -keyout /etc/nginx/ssl/foobar.net-key.pem -out /etc/nginx/ssl/foobar.net-cert.pem -days 3650 -nodes
sudo openssl req -x509 -sha256 -newkey rsa:2048 -keyout /etc/nginx/ssl/test.io-key.pem -out /etc/nginx/ssl/test.io-cert.pem -days 3650 -nodes
毎回、証明書識別の詳細の入力を求められます。
Country Name (2 letter code) [AU]:US
State or Province Name (full name) [Some-State]:New York
Locality Name (eg, city) []:New York City
Organization Name (eg, company) [Internet Widgits Pty Ltd]:DigitalOcean Inc
Organizational Unit Name (eg, section) []:
Common Name (e.g. server FQDN or YOUR name) []:example.com
Email Address []:
次に、NginxからApacheにリクエストをプロキシするapache
仮想ホストファイルを開きます。
sudo nano /etc/nginx/sites-available/apache
ドメインごとに個別の証明書とキーがあるため、ドメインごとに個別のserver { . . . }
ブロックを用意する必要があります。 現在のコンテンツを削除する必要があります。終了すると、apache
の仮想ホストファイルは次のようになります。
server {
listen 80;
listen 443 ssl;
server_name test.io www.test.io;
ssl on;
ssl_certificate /etc/nginx/ssl/test.io-cert.pem;
ssl_certificate_key /etc/nginx/ssl/test.io-key.pem;
location / {
proxy_pass http://111.111.111.111:8080;
proxy_set_header Host $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;
}
}
server {
listen 80;
listen 443 ssl;
server_name foobar.net www.foobar.net;
ssl on;
ssl_certificate /etc/nginx/ssl/foobar.net-cert.pem;
ssl_certificate_key /etc/nginx/ssl/foobar.net-key.pem;
location / {
proxy_pass http://111.111.111.111:8080;
proxy_set_header Host $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;
}
}
ファイルを保存し、構成テストを実行します。
sudo service nginx configtest
テストが成功したらNginxをリロードします。
sudo service nginx reload
https://
プレフィックスを付けてブラウザ経由でApacheのドメインの1つにアクセスします:https://foobar.net/info.php
PHP Variablesセクションを見てください。 ApacheがHTTPS経由で直接アクセスされたかのように、変数SERVER_PORTは443に設定され、HTTPSはonに設定されています。 これらの変数を設定すると、リバースプロキシの背後で動作するようにPHPアプリケーションを特別に構成する必要がなくなります。
[[step-10 -—- blocking-direct-access-to-apache-optional]] ==ステップ10— Apacheへの直接アクセスのブロック(オプション)
ApacheはパブリックIPアドレスのポート8080
でリッスンしているため、誰でもアクセスできます。 次のIPtablesコマンドをファイアウォールルールセットに組み込むことでブロックできます。
sudo iptables -I INPUT -p tcp --dport 8080 ! -s 111.111.111.111 -j REJECT --reject-with tcp-reset
赤の例の代わりに、必ずドロップレットのIPアドレスを使用してください。 ポート8080
がファイアウォールでブロックされたら、Apacheがファイアウォールで到達不能であることをテストします。 Webブラウザを開き、ポート8080
でApacheのドメイン名の1つにアクセスしてみてください。 例:http://example.com:8080
ブラウザに「接続できません」または「Webページが利用できません」というエラーメッセージが表示されます。 IPtablestcp-reset
オプションを設定すると、部外者はポート8080
とサービスが提供されていないポートの間に違いは見られません。
Note: IPtablesルールは、デフォルトではシステムの再起動後も存続しません。 IPtablesルールを保持する方法は複数ありますが、最も簡単なのは、Ubuntuのリポジトリでiptables-persistent
を使用することです。
[[step-11 -—- serving-static-files-using-nginx-optional]] ==ステップ11— Nginxを使用した静的ファイルの提供(オプション)
Nginxは、Apacheのドメインへのリクエストをプロキシする場合、ドメインへのすべてのファイルリクエストをApacheに送信します。 Nginxは、画像、JavaScript、スタイルシートなどの静的ファイルの提供において、Apacheよりも高速です。 したがって、このセクションでは、静的ファイルを直接提供し、PHPリクエストをApacheに送信するようにNginxのapache
仮想ホストファイルを構成します。
apache
仮想ホストファイルを開きます。
sudo nano /etc/nginx/sites-available/apache
以下のコードブロックに赤で示されているように、各サーバーブロックに2つのlocationブロックを追加します。
server {
listen 80;
server_name test.io www.test.io;
root /var/www/test.io;
index index.php index.htm index.html;
location / {
try_files $uri $uri/ /index.php;
}
location ~ \.php$ {
proxy_pass http://111.111.111.111:8080;
proxy_set_header Host $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;
}
location ~ /\. {
deny all;
}
}
server {
listen 80;
server_name foobar.net www.foobar.net;
root /var/www/foobar.net;
index index.php index.htm index.html;
location / {
try_files $uri $uri/ /index.php;
}
location ~ \.php$ {
proxy_pass http://111.111.111.111:8080;
proxy_set_header Host $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;
}
location ~ /\. {
deny all;
}
}
try_files
ディレクティブにより、Nginxはdocument root内のファイルを検索し、それらを直接提供します。 ファイルの拡張子が.php
の場合、リクエストはApacheに渡されます。 ファイルがdocument rootに見つからない場合でも、リクエストはApacheに渡されるため、パーマリンクなどのアプリケーション機能は問題なく機能します。
ファイルを安全にし、構成テストを実行します。
sudo service nginx configtest
テストが成功したらNginxをリロードします。
sudo service nginx reload
これが機能していることを確認するには、/var/log/apache2
内のApacheのログファイルを調べて、test.io
およびfoobar.net
のindex.php
ファイルに対するGET要求を確認します。 このセットアップの唯一の注意点は、Apacheが静的ファイルへのアクセスを制限できないことです。 静的ファイルのアクセス制御は、Nginxのapache
仮想ホストファイルで構成する必要があります。
Warning:location ~ /\.
ディレクティブを含めることは非常に重要です。 これにより、Nginxが.htaccess
や.htpasswd
などのファイルの内容を出力できなくなります。
結論
このチュートリアルを完了すると、Nginxがexample.com
とsample.org
を提供し、Apacheがfoobar.net
とtest.io
を提供するUbuntuドロップレットが1つ作成されます。 NginxはApacheのリバースプロキシとして機能していますが、Nginxのプロキシサービスは透過的であり、Apacheのドメインへの接続はApache自体から直接提供されるようです。