1つのUbuntu14.04ドロップレットでNginxをWebサーバーおよびApacheのリバースプロキシとして構成する方法
序章
ApacheとNginxは、PHPでよく使用される2つの人気のあるオープンソースWebサーバーです。 要件が異なる複数のWebサイトをホストする場合は、両方を同じ仮想マシンで実行すると便利です。 1つのシステムで2つのWebサーバーを実行するための一般的な解決策は、複数のIPアドレスまたは異なるポート番号を使用することです。
IPv4アドレスとIPv6アドレスの両方を持つドロップレットは、一方のプロトコルでApacheサイトにサービスを提供し、もう一方のプロトコルでNginxサイトにサービスを提供するように構成できますが、ISPによるIPv6の採用はまだ普及していないため、これは現在実用的ではありません。 次のような別のポート番号を持つ 81
また 8080
2番目のWebサーバーの場合は別の解決策ですが、URLをポート番号( http://example.com:81
)が常に合理的または理想的であるとは限りません。
このチュートリアルでは、NginxをWebサーバーとApacheのリバースプロキシの両方として構成する方法をすべて1つのドロップレットで示します。 Webアプリケーションによっては、特にSSLサイトが構成されている場合、Apacheのリバースプロキシ対応を維持するためにコードの変更が必要になる場合があります。 これを確実にするために、 mod_rpaf という名前のApacheモジュールをインストールします。これは、特定の環境変数を書き換えて、ApacheがWebクライアントからの要求を直接処理しているように見せます。
1つのドロップレットで4つのドメイン名をホストします。 2つはNginxによって提供されます: example.com
(デフォルトの仮想ホスト)および sample.org
. 残りの2つは foobar.net
と test.io
、Apacheによって提供されます。
前提条件
-
新しいUbuntu14.04ドロップレット。
-
の標準ユーザーアカウント
sudo
特権。 Ubuntu 14.04 を使用したサーバーの初期設定の手順2と3に従って、標準アカウントを設定できます。 -
目的のドメイン名は、DigitalOceanコントロールパネルのDropletのIPアドレスを指している必要があります。 これを行う方法の例については、DigitalOceanを使用してホスト名を設定する方法のステップ3を参照してください。 ドメインのDNSを他の場所でホストする場合は、代わりに適切なAレコードを作成する必要があります。
オプションのリファレンス
このチュートリアルでは、ApacheとNginxの仮想ホスト、およびSSL証明書の作成と構成に関する基本的な知識が必要です。 これらのトピックの詳細については、次の記事を参照してください。
ステップ1—ApacheとPHP5-FPMをインストールする
ApacheとPHP-FPMに加えて、PHPFastCGIApacheモジュールもインストールする必要があります。 これは 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
ステップ2—ApacheおよびPHP5-FPMの構成
このステップでは、Apacheのポート番号を次のように変更します。 8080
を使用してPHP5-FPMで動作するように構成します mod_fastcgi
モジュール。 Apache構成ファイルを編集し、Apacheのポート番号を変更します。
sudo nano /etc/apache2/ports.conf
次の行を見つけます。
Listen 80
次のように変更します。
Listen 8080
保存して終了 ports.conf
.
注: Webサーバーは通常、リッスンするように設定されています 127.0.0.1:8080
リバースプロキシを構成するが、そうすると、PHPの環境変数 SERVER_ADDR の値が、サーバーのパブリックIPではなくループバックIPアドレスに設定されます。 私たちの目的は、Webサイトの前にリバースプロキシが表示されないようにApacheを設定することです。 したがって、リッスンするように構成します 8080
すべてのIPアドレスで。
次に、Apacheのデフォルトの仮想ホストファイルを編集します。 The <VirtualHost>
このファイルのディレクティブは、ポートでのみサイトにサービスを提供するように設定されています 80
.
sudo nano /etc/apache2/sites-available/000-default.conf
最初の行は次のようになります。
<VirtualHost *:80>
次のように変更します。
<VirtualHost *:8080>
ファイルを保存し、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
ステップ3—mod_fastcgiを使用するようにApacheを設定する
Apacheはで動作します mod_php
デフォルトですが、PHP5-FPMを使用するには追加の構成が必要です。
注:このチュートリアルをLAMPの既存のインストールで試している場合
mod_php
、最初に次のコマンドで無効にします。sudo a2dismod php5
の構成ブロックを追加します mod_fastcgi
に依存します mod_action
. mod-action
デフォルトでは無効になっているため、最初に有効にする必要があります。
sudo a2enmod actions
ドロップレットにインストールされているApacheのバージョンを確認するには、次のコマンドを使用します。
sudo apache2 -v
編集します fastcgi
それに応じて構成ファイル。 これらの構成ディレクティブは、 .php
PHP5-FPMUNIXソケットへのファイル。
sudo nano /etc/apache2/mods-enabled/fastcgi.conf
の下部に次の行を追加します <IfModule mod_fastcgi.c> . . . </IfModule>
Apache 2.4 のブロック:
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
<Directory /usr/lib/cgi-bin>
Require all granted
</Directory>
Apache2.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
ステップ4—PHPの機能を確認する
PHPが機能するかどうかを確認するには、 phpinfo()
ファイルを作成し、Webブラウザからアクセスします。
echo "<?php phpinfo(); ?>" | sudo tee /var/www/html/info.php
ブラウザでファイルを表示するには、次のURLにアクセスしてください。 http://111.111.111.111:8080/info.php
ただし、DropletのIPアドレスを使用します。 これにより、PHPが使用している構成仕様のリストが表示されます。
ページの上部で、サーバーAPIがFPM /FastCGIと表示されていることを確認します。 ページの約3分の2のところにあるPHP変数セクションでは、SERVER_SOFTWAREがUbuntu上のApacheであることがわかります。 これらはそれを確認します mod_fastcgi
はアクティブであり、ApacheはPHP5-FPMを使用してPHPファイルを処理しています。
ステップ5—Apache用の仮想ホストを作成する
ドメイン用に2つのApache仮想ホストファイルを作成します foobar.net
と test.io
. これは、両方のサイトの documentrootディレクトリを作成することから始まります。
sudo mkdir -v /var/www/{foobar.net,test.io}
次に、セットアップの完了後にテストするために、各ディレクトリに2つのファイルを追加します。
まず、作成します index
各サイトのファイル。
echo "<h1 style='color: green;'>Foo Bar</h1>" | sudo tee /var/www/foobar.net/index.html
echo "<h1 style='color: red;'>Test IO</h1>" | sudo tee /var/www/test.io/index.html
次に、 phpinfo()
ファイル。
echo "<?php phpinfo(); ?>" | sudo tee /var/www/foobar.net/info.php
echo "<?php phpinfo(); ?>" | sudo tee /var/www/test.io/info.php
の仮想ホストファイルを作成します foobar.net
ドメイン。
sudo nano /etc/apache2/sites-available/foobar.net.conf
その中に次のディレクティブを配置します。
<VirtualHost *:*>
ServerName foobar.net
ServerAlias www.foobar.net
DocumentRoot /var/www/foobar.net
<Directory /var/www/foobar.net>
AllowOverride All
</Directory>
</VirtualHost>
ファイルを保存して閉じます。 次に、同じことを行います test.io
.
sudo nano /etc/apache2/sites-available/test.io.conf
<VirtualHost *:*>
ServerName test.io
ServerAlias www.test.io
DocumentRoot /var/www/test.io
<Directory /var/www/test.io>
AllowOverride All
</Directory>
</VirtualHost>
注1: AllowOverride All
有効にする .htaccess
サポート。
注2:これらは最も基本的なディレクティブにすぎません。 Apacheで仮想ホストを設定するための完全なガイドについては、 Ubuntu 14.04LTSでApache仮想ホストを設定する方法を参照してください。
両方の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 ファイルにアクセスして、PHPが機能しているかどうかを確認します。 http://foobar.net:8080/info.php
と http://test.io:8080/info.php
.
手順1で見たのと同じPHP構成仕様リストが各サイトに表示されます。 現在、ポートでApacheでホストされている2つのWebサイトがあります 8080
.
ステップ6—Nginxのインストールと構成
このステップでは、Nginxをインストールしてドメインを構成します example.com
と sample.org
Nginxの仮想ホストとして。 Nginxで仮想ホストを設定するための完全なガイドについては、 Ubuntu 14.04 LTSでNginxサーバーブロック(仮想ホスト)を設定する方法を参照してください。
Nginxをインストールします。
sudo apt-get install nginx
次に、デフォルトの仮想ホストのシンボリックリンクを削除します。
sudo rm /etc/nginx/sites-enabled/default
次に、Nginxの仮想ホストを作成します。 まず、両方のWebサイトの documentrootディレクトリを作成します。
sudo mkdir -v /usr/share/nginx/{example.com,sample.org}
Apacheの仮想ホストで行ったように、もう一度作成します index
と phpinfo()
セットアップが完了した後にテストするためのファイル。
echo "<h1 style='color: green;'>Example.com</h1>" | sudo tee /usr/share/nginx/example.com/index.html
echo "<h1 style='color: red;'>Sample.org</h1>" | sudo tee /usr/share/nginx/sample.org/index.html
echo "<?php phpinfo(); ?>" | sudo tee /usr/share/nginx/example.com/info.php
echo "<?php phpinfo(); ?>" | sudo tee /usr/share/nginx/sample.org/info.php
次に、ドメインの仮想ホストファイルを作成します example.com
.
sudo nano /etc/nginx/sites-available/example.com
Nginxの呼び出し server {. . .}
構成ファイルサーバーブロックの領域。 プライマリ仮想ホストexample.comのサーバーブロックを作成します。 The 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
今すぐアクセスします phpinfo()
WebブラウザでのNginx仮想ホストのファイル http://example.com/info.php
と http://sample.org/info.php
. PHP変数セクションをもう一度見てください。
[“ SERVER_SOFTWARE”]はnginx と表示され、ファイルがNginxによって直接提供されたことを示します。 [“ DOCUMENT_ROOT”] は、各Nginxサイトに対してこのステップの前半で作成したディレクトリを指している必要があります。
この時点で、Nginxをインストールし、2つの仮想ホストを作成しました。 次に、Apacheでホストされているドメインを対象としたリクエストをプロキシするための追加の仮想ホストを設定します。
ステップ7—Apacheの仮想ホスト用にNginxを構成する
このセクションでは、複数のドメイン名を持つ追加のNginx仮想ホストを作成します server_name
ディレクティブ。 これらのドメイン名のリクエストはApacheにプロキシされます。
新しいNginx仮想ホストファイルを作成します。
sudo nano /etc/nginx/sites-available/apache
以下にコードブロックを追加します。 これは、両方のApache仮想ホストドメインの名前を指定し、それらのリクエストをApacheにプロキシします。 でパブリックIPアドレスを使用することを忘れないでください proxy_pass
.
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
ブラウザを開き、 http://foobar.net/info.php
Apacheのドメイン名の1つ。 PHP変数セクションまで下にスクロールして、表示される値を確認します。
変数SERVER_SOFTWAREおよびDOCUMENT_ROOTは、この要求がApacheによって処理されたことを確認する必要があります。 変数HTTP_X_REAL_IPおよびHTTP_X_FORWARDED_FORはNginxによって追加され、ブラウザーでURLにアクセスしているコンピューターのパブリックIPアドレスを表示する必要があります。
特定のドメインのリクエストをApacheにプロキシするようにNginxを正常にセットアップしました。 次のステップは、変数を設定するようにApacheを構成することです。 REMOTE_ADDR
これらのリクエストを直接処理しているかのように。
ステップ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
でファイルを作成します mods-available
rpafモジュールをロードするディレクトリ。
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アドレスを追加してください。
<IfModule mod_rpaf.c>
RPAF_Enable On
RPAF_Header X-Real-Ip
RPAF_ProxyIPs 111.111.111.111
RPAF_SetHostName On
RPAF_SetHTTPS On
RPAF_SetPort On
</IfModule>
各ディレクティブの簡単な説明は次のとおりです。 を参照してください mod_rpaf
詳細については、READMEファイルを参照してください。
- RPAF_Header-クライアントの実際のIPアドレスに使用するヘッダー。
- RPAF_ProxyIPs-HTTPリクエストを調整するプロキシIP。
- RPAF_SetHostName -ServerNameとServerAliasが機能するように、vhost名を更新します。
- RPAF_SetHTTPS-を設定します
HTTPS
に含まれる値に基づく環境変数X-Forwarded-Proto
. - RPAF_SetPort-を設定します
SERVER_PORT
環境変数。 ApacheがSSLプロキシの背後にある場合に便利です。
保存 rpaf.conf
モジュールを有効にします。
sudo a2enmod rpaf
これにより、ファイルのシンボリックリンクが作成されます rpaf.load
と rpaf.conf
の中に mods-enabled
ディレクトリ。 次に、構成テストを実行します。
sudo apachectl -t
Syntax OK が返された場合は、Apacheをリロードします。
sudo service apache2 reload
ApacheのWebサイトの1つにアクセスする phpinfo()
ブラウザのページで、PHP変数セクションを確認してください。 REMOTE_ADDR 変数は、ローカルコンピューターのパブリックIPアドレスの変数にもなります。
ステップ9— HTTPS Webサイトのセットアップ(オプション)
このステップでは、Apacheでホストされている両方のドメインのSSL証明書を構成します。 NginxはSSLターミネーションをサポートしているため、Apacheの構成ファイルを変更せずにSSLをセットアップできます。 The 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 []:
今すぐ開きます apache
NginxからApacheにリクエストをプロキシする仮想ホストファイル。
sudo nano /etc/nginx/sites-available/apache
ドメインごとに個別の証明書とキーがあるため、個別に設定する必要があります server { . . . }
各ドメインのブロック。 現在の内容を削除する必要があります。終了したら、 apache
vhostファイルは次のようになります。
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
ブラウザを介してApacheのドメインの1つにアクセスします。 https://
プレフィックス: https://foobar.net/info.php
PHP変数セクションを見てください。 変数SERVER_PORTは443に設定され、HTTPSはonに設定されています。 これらの変数を設定すると、リバースプロキシの背後で動作するようにPHPアプリケーションを特別に構成する必要がなくなります。
ステップ10— Apacheへの直接アクセスをブロックする(オプション)
Apacheはポートでリッスンしているので 8080
パブリックIPアドレスでは、誰でもアクセスできます。 次のIPtablesコマンドをファイアウォールルールセットに適用することでブロックできます。
sudo iptables -I INPUT -p tcp --dport 8080 ! -s 111.111.111.111 -j REJECT --reject-with tcp-reset
赤の例の代わりに、必ずDropletのIPアドレスを使用してください。 一度ポート 8080
ファイアウォールでブロックされている場合は、Apacheがファイアウォールに到達できないことをテストします。 Webブラウザーを開き、ポートでApacheのドメイン名の1つにアクセスしてみてください 8080
. 例えば: http://example.com:8080
ブラウザに「接続できません」または「Webページが利用できません」というエラーメッセージが表示されます。 IPtablesを使って tcp-reset
オプションが設定されている場合、部外者はポート間の違いを認識しません 8080
そして、サービスが提供されていないポート。
注: IPtablesルールは、デフォルトではシステムの再起動後も存続しません。 IPtablesルールを保持する方法は複数ありますが、最も簡単な方法は iptables-persistent
Ubuntuのリポジトリにあります。
ステップ11— Nginxを使用した静的ファイルの提供(オプション)
NginxがApacheのドメインのリクエストをプロキシすると、ドメインへのすべてのファイルリクエストがApacheに送信されます。 Nginxは、画像、JavaScript、スタイルシートなどの静的ファイルの提供においてApacheよりも高速です。 したがって、このセクションでは、Nginxを構成します apache
静的ファイルを直接提供し、PHPリクエストを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;
}
}
The try_files
ディレクティブにより、Nginxはドキュメントルート内のファイルを検索し、それらを直接提供します。 ファイルに .php
拡張機能の場合、リクエストはApacheに渡されます。 ドキュメントルートにファイルが見つからない場合でも、リクエストはApacheに渡されるため、パーマリンクなどのアプリケーション機能は問題なく機能します。
ファイルを保護し、構成テストを実行します。
sudo service nginx configtest
テストが成功した場合は、Nginxをリロードします。
sudo service nginx reload
これが機能していることを確認するために、Apacheのログファイルを調べることができます。 /var/log/apache2
とのGETリクエストを参照してください index.php
のファイル test.io
と foobar.net
. この設定の唯一の注意点は、Apacheが静的ファイルへのアクセスを制限できないことです。 静的ファイルのアクセス制御は、Nginxで構成する必要があります apache
仮想ホストファイル。
警告: location ~ /\.
ディレクティブを含めることは非常に重要です。 これにより、Nginxが次のようなファイルの内容を印刷するのを防ぎます .htaccess
と .htpasswd
.
結論
このチュートリアルを完了すると、Nginxを提供するUbuntuドロップレットが1つ作成されます。 example.com
と sample.org
、Apacheサービングと一緒に foobar.net
と test.io
. NginxはApacheのリバースプロキシとして機能していますが、Nginxのプロキシサービスは透過的であり、Apacheのドメインへの接続はApache自体から直接提供されているように見えます。