前書き
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は2つのサービスを提供します: + example.com +
(デフォルトの仮想ホスト)と + sample.org +
。 残りの2つ、「+ foobar.net 」と「 test.io +」は、Apacheによって提供されます。
前提条件
-
新しいUbuntu 16.04ドロップレット。
-
`+ sudo +`特権を持つ標準ユーザーアカウント。 Ubuntu 16.04での初期サーバーセットアップのステップ2および3に従って、標準アカウントをセットアップできます。 。
-
目的のドメイン名は、DigitalOceanコントロールパネルでドロップレットのIPアドレスを指している必要があります。 例については、https://www.digitalocean.com/community/tutorials/how-to-set-up-a-host-name-with-digitalocean [DigitalOceanでホスト名を設定する方法]のステップ3を参照してください。これを行う方法。 ドメインのDNSを他の場所でホストしている場合は、代わりに適切なAレコードを作成する必要があります。
オプションの参照
このチュートリアルでは、ApacheおよびNginxの仮想ホストの基本的な知識と、SSL証明書の作成および構成が必要です。 これらのトピックの詳細については、次の記事を参照してください。
ステップ1-ApacheおよびPHP-FPMのインストール
ApacheとPHP-FPMに加えて、libapache2-mod-fastcgiという名前のPHP FastCGI Apacheモジュールもインストールする必要があります。
まず、aptリポジトリを更新して、最新のパッケージがあることを確認します。
sudo apt-get update
次に、必要なパッケージをインストールします。
sudo apt-get install apache2 libapache2-mod-fastcgi php-fpm
次に、Apacheのデフォルト設定を変更します。
ステップ2-ApacheおよびPHP-FPMの構成
この手順では、Apacheのポート番号を8080に変更し、mod_fastcgiモジュールを使用してPHP-FPMで動作するように構成します。 Apache構成ファイルを編集し、Apacheのポート番号を変更します。
sudo nano /etc/apache2/ports.conf
次の行を見つけます。
Listen 80
それをに変更してください。
Listen
保存して `+ ports.conf +`を終了します。
次に、Apacheのデフォルトの仮想ホストファイルを編集します。 このファイルの「+ <VirtualHost> 」ディレクティブは、ポート「+80」でのみサイトにサービスを提供するように設定されているため、同様に変更する必要があります。 デフォルトの仮想ホストファイルを開きます。
sudo nano /etc/apache2/sites-available/000-default.conf
最初の行は次のようになります。
<VirtualHost *:80>
それをに変更してください。
<VirtualHost *:>
ファイルを保存し、Apacheをリロードします。
sudo systemctl reload apache2
Apacheが「8080」をリッスンしていることを確認します。
sudo netstat -tlpn
- 出力は、*
-
8080 でリッスンする apache2 *を使用した次の例のようになります。
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 :::22 :::* LISTEN 1086/sshd
Apacheが正しいポートでリッスンしていることを確認したら、PHPおよびFastCGIのサポートを構成できます。
ステップ3-mod_fastcgiを使用するためのApacheの構成
Apacheはデフォルトで `+ mod_php +`を使用してPHPページを提供しますが、PHP-FPMを使用するには追加の設定が必要です。
sudo a2dismod php7.0
`+ mod_action `に依存する ` mod_fastcgi `の設定ブロックを追加します。 ` mod_action +`はデフォルトでは無効になっているため、まず有効にする必要があります。
sudo a2enmod actions
これらの設定ディレクティブは、 `+ .php +`ファイルのリクエストをPHP-FPM UNIXソケットに渡します。
sudo nano /etc/apache2/mods-enabled/fastcgi.conf
`+ <IfModule mod_fastcgi.c>内に次の行を追加します。 . . </ IfModule> + `ブロック、そのブロック内の既存のアイテムの下:
AddType application/x-httpd-fastphp .php
Action application/x-httpd-fastphp /php-fcgi
Alias /php-fcgi /usr/lib/cgi-bin/php-fcgi
FastCgiExternalServer /usr/lib/cgi-bin/php-fcgi -socket /run/php/php7.0-fpm.sock -pass-header Authorization
<Directory /usr/lib/cgi-bin>
Require all granted
</Directory>
`+ fastcgi.conf +`に加えた変更を保存し、構成テストを行います。
sudo apachectl -t
-
Syntax OK *が表示されたら、Apacheをリロードします。 127.0.1.1を使用して、「+ Couldがサーバーの完全修飾ドメイン名を確実に判断できませんでした」という警告が表示された場合。 「ServerName」ディレクティブをグローバルに設定して、このメッセージを抑制します。+ `、それで問題ありません。 今は影響しません。
sudo systemctl reload apache2
では、ApacheからPHPを提供できることを確認しましょう。
ステップ4-PHP機能の検証
PHPが動作するかどうかを確認するには、 `+ phpinfo()+`ファイルを作成し、Webブラウザーからアクセスします。
echo "<?php phpinfo(); ?>" | sudo tee /var/www/html/info.php
ブラウザでファイルを見るには、 `+ http://:8080 / info.php`にアクセスしてください。 これにより、PHPが使用している構成設定のリストが表示されます。
画像:https://assets.digitalocean.com/articles/apache_nginx_reverse_proxy_ubuntu_16.04/YbWDj9i.png [phpinfoサーバーAPI]
image:https://assets.digitalocean.com/articles/apache_nginx_reverse_proxy_ubuntu_16.04/363bUHT.png [phpinfo PHP変数]
ページの上部で、* Server API が FPM / FastCGI と表示されていることを確認します。 ページの3分の2ほど下にある PHP変数*セクションに、* SERVER_SOFTWARE *がUbuntu上のApacheであることが表示されます。 これらは、 `+ mod_fastcgi +`がアクティブであり、ApacheがPHP-FPMを使用してPHPファイルを処理していることを確認します。
ステップ5-Apache用の仮想ホストの作成
ドメイン `+ foobar.net `および ` test.io +`のApache仮想ホストファイルを作成しましょう。 そのためには、最初に両方のサイトのドキュメントルートディレクトリを作成し、それらのディレクトリにいくつかのデフォルトファイルを配置して、設定を簡単にテストできるようにします。
まず、ルートディレクトリを作成します。
sudo mkdir -v /var/www/{,}
次に、サイトごとに `+ index`ファイルを作成します。
echo "<h1 style='color: green;'>Foo Bar</h1>" | sudo tee /var/www//index.html
echo "<h1 style='color: red;'>Test IO</h1>" | sudo tee /var/www//index.html
次に、各サイトの `+ phpinfo()+`ファイルを作成して、PHPが適切に構成されていることをテストします。
echo "<?php phpinfo(); ?>" | sudo tee /var/www//info.php
echo "<?php phpinfo(); ?>" | sudo tee /var/www//info.php
ここで、 `+ foobar.net +`ドメインの仮想ホストファイルを作成します。
sudo nano /etc/apache2/sites-available/.conf
この新しいファイルに次のディレクティブを配置します。
<VirtualHost *:8080>
ServerName
ServerAlias www.
DocumentRoot /var/www/
<Directory /var/www/>
AllowOverride All
</Directory>
</VirtualHost>
これらは最も基本的なディレクティブのみです。 Apacheでの仮想ホストのセットアップに関する完全なガイドについては、https://www.digitalocean.com/community/tutorials/how-to-set-up-apache-virtual-hosts-on-ubuntu-16-04 [How Ubuntu 16.04でApache仮想ホストをセットアップするには]。
ファイルを保存して閉じます。 次に、 `+ test.io +`に対して同様の構成を作成します。
sudo nano /etc/apache2/sites-available/.conf
<VirtualHost *:8080>
ServerName
ServerAlias www.
DocumentRoot /var/www/
<Directory /var/www/>
AllowOverride All
</Directory>
</VirtualHost>
両方のApache仮想ホストがセットアップされたので、 `+ a2ensite `コマンドを使用してサイトを有効にします。 これにより、 ` sites-enabled +`ディレクトリに仮想ホストファイルへのシンボリックリンクが作成されます。
sudo a2ensite
sudo a2ensite
Apacheの構成エラーを再度確認します。
sudo apachectl -t
-
Syntax OK *が表示されたら、Apacheをリロードします。
sudo systemctl reload apache2
サイトが機能していることを確認するには、ブラウザで「+ http://:8080+」と「+ http://:8080+」を開き、各サイトに* index.html *ファイルが表示されていることを確認します。
次の結果が表示されます。
image:https://assets.digitalocean.com/articles/apache_and_nginx/3.png [foobar.net index page]
画像:https://assets.digitalocean.com/articles/apache_and_nginx/4.png [test.ioインデックスページ]
また、各サイトの* info.php *ファイルにアクセスして、PHPが機能していることを確認します。 ブラウザで `+ http://:8080 / info.php `および ` http://:8080 / info.php +`にアクセスします。
手順4で見たのと同じPHP構成仕様リストが各サイトに表示されるはずです。 現在、ポート `+ 8080 +`でApacheにホストされている2つのWebサイトがあります。
ステップ6-Nginxのインストールと構成
このステップでは、Nginxをインストールし、ドメイン「+ example.com 」と「 sample.org +」をNginxの仮想ホストとして設定します。 Nginxでの仮想ホストのセットアップに関する完全なガイドについては、https://www.digitalocean.com/community/tutorials/how-to-set-up-nginx-server-blocks-virtual-hosts-on-ubuntu-16を参照してください-04 [Ubuntu 16.04でNginxサーバーブロック(仮想ホスト)をセットアップする方法]。
パッケージマネージャーを使用してNginxをインストールします。
sudo apt-get install nginx
次に、デフォルトの仮想ホストのシンボリックリンクを削除します。これはもう使用しないためです。 独自のデフォルトサイトレター( + example.com +
)を作成します。
sudo rm /etc/nginx/sites-enabled/default
次に、Apacheで使用したのと同じ手順を使用して、Nginxの仮想ホストを作成します。 まず、両方のWebサイトのドキュメントルートディレクトリを作成します。
sudo mkdir -v /usr/share/nginx/{,}
Apache仮想ホストで行ったように、セットアップが完了した後のテストのために、 + index`ファイルと
+ phpinfo()+ `ファイルを再度作成します。
echo "<h1 style='color: green;'>Example.com</h1>" | sudo tee /usr/share/nginx//index.html
echo "<h1 style='color: red;'>Sample.org</h1>" | sudo tee /usr/share/nginx//index.html
echo "<?php phpinfo(); ?>" | sudo tee /usr/share/nginx//info.php
echo "<?php phpinfo(); ?>" | sudo tee /usr/share/nginx//info.php
ドメイン `+ example.com +`の仮想ホストファイルを作成します。
sudo nano /etc/nginx/sites-available/
Nginxは `+ server {。を呼び出します。 。 。} + `構成ファイルの領域*サーバーブロック*。 プライマリ仮想ホストのサーバーブロックを作成します。 `+ default_server +`設定ディレクティブは、これをデフォルトの仮想ホストにして、他の仮想ホストと一致しないHTTPリクエストを処理します。
次のファイルをファイルに貼り付けます:
server {
listen 80 default_server;
root /usr/share/nginx/;
index index.php index.html index.htm;
server_name ;
location / {
try_files $uri $uri/ /index.php;
}
location ~ \.php$ {
fastcgi_pass unix:/run/php/php7.0-fpm.sock;
include snippets/fastcgi-php.conf;
}
}
ファイルを保存して閉じます。 次に、Nginxの2番目のドメインである「+ sample.org +」の仮想ホストファイルを作成します。
sudo nano /etc/nginx/sites-available/
サーバーブロックは次のようになります。
server {
root /usr/share/nginx/;
index index.php index.html index.htm;
server_name ;
location / {
try_files $uri $uri/ /index.php;
}
location ~ \.php$ {
fastcgi_pass unix:/run/php/php7.0-fpm.sock;
include snippets/fastcgi-php.conf;
}
}
ファイルを保存して閉じます。 次に、 `+ sites-enabled +`ディレクトリへのシンボリックリンクを作成して、両方のサイトを有効にします。
sudo ln -s /etc/nginx/sites-available/ /etc/nginx/sites-enabled/
sudo ln -s /etc/nginx/sites-available/ /etc/nginx/sites-enabled/
Nginx構成テストを実行します。
sudo nginx -t
-
OK *が表示されたら、Nginxをリロードします。
sudo systemctl reload nginx
次に、 `+ http:/// info.php `と ` http:/// info.php `にアクセスして、WebブラウザーでNginx仮想ホストの ` phpinfo()+`ファイルにアクセスします。 PHP変数セクションをもう一度見てください。
画像:https://assets.digitalocean.com/articles/apache_nginx_reverse_proxy_ubuntu_16.04/A43puCy.png [Nginx PHP Variables]
-
[“ SERVER_SOFTWARE”] *は、ファイルがNginxによって直接提供されたことを示す「+ nginx +」と言う必要があります。 * [“ DOCUMENT_ROOT”] *は、各Nginxサイトに対してこの手順で作成したディレクトリを指す必要があります。
この時点で、Nginxをインストールし、2つの仮想ホストを作成しました。 次に、Apacheでホストされるドメイン向けのリクエストをプロキシするようにNginxを設定します。
ステップ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 ;
location / {
proxy_pass http://: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 nginx -t
-
OK *が表示されたら、Nginxをリロードします。
sudo systemctl reload nginx
ブラウザーを開き、ブラウザーでURL `+ http:/// info.php +`にアクセスします。 * PHP Variables *セクションまでスクロールダウンし、表示された値を確認します。
画像:https://assets.digitalocean.com/articles/apache_nginx_reverse_proxy_ubuntu_16.04/A465fzT.png [Nginx経由のApacheのphpinfo]
変数* SERVER_SOFTWARE および DOCUMENT_ROOT は、この要求がApacheによって処理されたことを確認します。 変数 HTTPXREAL_IP および HTTPXFORWARDED_FOR *はNginxによって追加され、URLへのアクセスに使用しているコンピューターのパブリックIPアドレスを表示する必要があります。
特定のドメインのリクエストをApacheにプロキシするようにNginxを正常に設定しました。 次に、あたかもこれらのリクエストを直接処理しているかのように、 `+ REMOTE_ADDR +`変数を設定するようにApacheを設定しましょう。
ステップ8-mod_rpafのインストールと構成
このステップでは、* mod_rpaf という名前のApacheモジュールをインストールします。これは、リバースプロキシによって提供される値に基づいて、 REMOTE_ADDR 、 HTTPS 、および HTTP_PORT *の値を書き換えます。 このモジュールがないと、一部のPHPアプリケーションでは、プロキシの背後からシームレスに動作するようにコードを変更する必要があります。 このモジュールはUbuntuリポジトリに「+ libapache2-mod-rpaf」として存在しますが、時代遅れであり、特定の設定ディレクティブをサポートしていません。 代わりに、ソースからインストールします。
モジュールのビルドに必要なパッケージをインストールします。
sudo apt-get install unzip build-essential apache2-dev
GitHubから最新の安定版リリースをダウンロードします。
wget https://github.com/gnif/mod_rpaf/archive/stable.zip
以下で抽出します:
unzip stable.zip
作業ディレクトリに移動します。
cd mod_rpaf-stable
次に、モジュールをコンパイルしてインストールします。
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アドレスを必ず追加してください。
<IfModule mod_rpaf.c>
RPAF_Enable On
RPAF_Header X-Real-Ip
RPAF_ProxyIPs
RPAF_SetHostName On
RPAF_SetHTTPS On
RPAF_SetPort On
</IfModule>
各ディレクティブの簡単な説明を次に示します。 詳細については、 + 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
これにより、ファイル「+ ipaf.load」と「+ rpaf.conf 」のシンボリックリンクが「 mods-enabled」ディレクトリに作成されます。 次に、構成テストを行います。
sudo apachectl -t
-
Syntax OK *が返された場合、Apacheをリロードします。
sudo systemctl reload apache2
ブラウザでApacheのWebサイトのいずれかの `+ phpinfo()+`ページにアクセスし、* PHP変数*セクションを確認します。 * REMOTE_ADDR *変数は、ローカルコンピューターのパブリックIPアドレスの変数にもなります。
ステップ9-HTTPS Webサイトのセットアップ(オプション)
この手順では、Apacheでホストされている両方のドメインのSSL証明書を構成します。 NginxはSSL終了をサポートしているため、Apacheの構成ファイルを変更せずにSSLをセットアップできます。 `+ mod_rpaf +`モジュールは、必要な環境変数がApacheに設定され、SSLリバースプロキシの背後でアプリケーションがシームレスに動作するようにします。
SSL証明書とその秘密キー用のディレクトリを作成します。
sudo mkdir /etc/nginx/ssl
この記事では、有効期間が10年の自己署名SSL証明書を使用します。 `+ foobar.net `と ` test.io +`の両方の自己署名証明書を生成します。
sudo openssl req -x509 -sha256 -newkey rsa:2048 -keyout /etc/nginx/ssl/-key.pem -out /etc/nginx/ssl/-cert.pem -days 3650 -nodes
sudo openssl req -x509 -sha256 -newkey rsa:2048 -keyout /etc/nginx/ssl/-key.pem -out /etc/nginx/ssl/-cert.pem -days 3650 -nodes
毎回、証明書識別の詳細の入力を求められます。 毎回、「+ Common Name +」に適切なドメインを入力します。
Country Name (2 letter code) [AU]:
State or Province Name (full name) [Some-State]:
Locality Name (eg, city) []:
Organization Name (eg, company) [Internet Widgits Pty Ltd]:
Organizational Unit Name (eg, section) []:
Common Name (e.g. server FQDN or YOUR name) []:
Email Address []:
NginxからApacheにリクエストをプロキシするApache仮想ホストファイルを開きます。
sudo nano /etc/nginx/sites-available/apache
各ドメインに個別の証明書とキーがあるため、個別の `+ server {が必要です。 . . ドメインごとに} + `ブロック。 ファイルの現在のコンテンツを削除し、次のコンテンツに置き換える必要があります。
server {
listen 80;
listen 443 ssl;
server_name ;
ssl on;
ssl_certificate /etc/nginx/ssl/-cert.pem;
ssl_certificate_key /etc/nginx/ssl/-key.pem;
location / {
proxy_pass http://: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 ;
ssl on;
ssl_certificate /etc/nginx/ssl/-cert.pem;
ssl_certificate_key /etc/nginx/ssl/-key.pem;
location / {
proxy_pass http://: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;
}
}
元のサーバーブロックを2つの別々のブロックに分割し、また、Nginxに、セキュアサイトのデフォルトポートであるポート443でリッスンするように指示しました。
ファイルを保存し、構成テストを実行します。
sudo nginx -t
テストが成功したらNginxをリロードします。
sudo systemctl reload nginx
ここで、 `+ https:// `プレフィックスを使用して、ブラウザーでApacheのドメインの1つにアクセスします。 まず、 ` https:/// info.php +`にアクセスすると、これが表示されます。
画像:https://assets.digitalocean.com/articles/apache_nginx_reverse_proxy_ubuntu_16.04/hkuGcN8.png [phpinfo ssl]
-
PHP変数*セクションを見てください。 変数* SERVER_PORT は 443 に設定され、 HTTPS は on *に設定されています。これは、ApacheがHTTPS経由で直接アクセスされているかのようです。 これらの変数を設定すると、リバースプロキシの背後で動作するようにPHPアプリケーションを特別に構成する必要がなくなります。
ステップ10-Apacheへの直接アクセスのブロック(オプション)
ApacheはパブリックIPアドレスのポート「8080」でリッスンしているため、誰でもアクセスできます。 次のIPtablesコマンドをファイアウォールルールセットに組み込むことでブロックできます。
sudo iptables -I INPUT -p tcp --dport 8080 ! -s -j REJECT --reject-with tcp-reset
赤色の例の代わりに、必ずドロップレットのIPアドレスを使用してください。 ポート `+ 8080 `がファイアウォールでブロックされたら、Apacheが到達できないことをテストします。 ウェブブラウザを開き、ポート ` 8080 +`でApacheのドメイン名の1つにアクセスしてみてください。 例:http://:8080
ブラウザに「接続できません」または「Webページが利用できません」というエラーメッセージが表示されます。 IPtablesの「+ tcp-reset 」オプションが設定されている場合、部外者はポート「+8080」とサービスのないポートとの違いを確認できません。
注意: IPtablesルールは、デフォルトではシステムの再起動後は存続しません。 IPtablesルールを保持するには複数の方法がありますが、最も簡単なのはUbuntuのリポジトリで `+ iptables-persistent +`を使用することです。 IPTablesの構成方法の詳細については、https://www.digitalocean.com/community/tutorials/how-to-set-up-a-firewall-using-iptables-on-ubuntu-14-04 [この記事]をご覧ください。 。
手順11-Nginxを使用した静的ファイルの提供(オプション)
Nginxは、Apacheのドメインへのリクエストをプロキシするとき、そのドメインへのすべてのファイルリクエストをApacheに送信します。 Nginxは、画像、JavaScript、スタイルシートなどの静的ファイルの提供において、Apacheよりも高速です。 そこで、Nginxの「+ apache +」仮想ホストファイルを設定して、静的ファイルを直接提供し、PHPリクエストをApacheに送信します。
まず、 `+ apache`仮想ホストファイルを開きます。
sudo nano /etc/nginx/sites-available/apache
*各サーバーブロックに2つのロケーションブロックを追加し、既存のロケーションブロックを変更する必要があります。 (前の手順でサーバーブロックが1つしかない場合、ファイルのコンテンツを完全に置き換えて、以下に示すコンテンツと一致させることができます。)さらに、各サイトの静的ファイルの場所をNginxに指示する必要があります。 。 これらの変更は、次のコードで赤で示されています。
server {
listen 80;
server_name test.io www.test.io;
proxy_pass http://your_ip_address: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;
server_name foobar.net www.foobar.net;
proxy_pass http://your_ip_address: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;
}
}
`+ try_files `ディレクティブは、Nginxにドキュメントルートでファイルを検索させ、それらを直接提供します。 ファイルの拡張子が ` .php +`の場合、リクエストはApacheに渡されます。 ファイルがドキュメントルートで見つからない場合でも、パーマリンクなどのアプリケーション機能が問題なく機能するように、リクエストはApacheに渡されます。
ファイルを保存し、構成テストを実行します。
sudo nginx -t
テストが成功したらNginxをリロードします。
sudo service nginx reload
これが機能していることを確認するには、 `+ / var / log / apache2 `のApacheのログファイルを調べ、 ` test.io `と ` foobar.net `の ` info.php `ファイルに対するGETリクエストを確認します。 。 ` tail `コマンドを使用してファイルの最後の数行を表示し、 ` -f +`スイッチを使用してファイルの変更を監視します。
sudo tail -f /var/log/apache2/other_vhosts_access.log
ブラウザで `+ http:// test.io / info.php +`にアクセスし、ログの出力を確認します。 Apacheが実際に応答していることがわかります。
- - [01/Jul/2016:18:18:34 -0400] "GET /info.php HTTP/1.0" 200 20414 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.111 Safari/537.36"
次に、各サイトの `+ index.html`ページにアクセスすると、Apacheからのログエントリは表示されません。 Nginxはそれらを提供しています。
ログファイルの確認が終わったら、 `+ CTRL + C +`を押してファイルの末尾を停止します。
このセットアップの唯一の注意点は、Apacheが静的ファイルへのアクセスを制限できないことです。 静的ファイルのアクセス制御は、Nginxの「+ apache」仮想ホストファイルで設定する必要があります。
結論
これで、Nginxが `+ example.com `と ` sample.org `を提供し、Apacheが ` foobar.net `と ` test.o +`を提供するUbuntuドロップレットが1つできました。 NginxはApacheのリバースプロキシとして機能していますが、Nginxのプロキシサービスは透過的であり、Apacheのドメインへの接続はApache自体から直接提供されるようです。 この方法を使用して、安全で静的なサイトを提供できます。