1つのUbuntu16.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によって提供されます。
前提条件
- 新しいUbuntu16.04ドロップレット。
- の標準ユーザーアカウント
sudo
特権。 Ubuntu 16.04 を使用したサーバーの初期設定の手順2と3に従って、標準アカウントを設定できます。 - 目的のドメイン名は、DigitalOceanコントロールパネルのDropletのIPアドレスを指している必要があります。 これを行う方法の例については、DigitalOceanを使用してホスト名を設定する方法のステップ3を参照してください。 ドメインのDNSを他の場所でホストする場合は、代わりに適切なAレコードを作成する必要があります。
オプションのリファレンス
このチュートリアルでは、ApacheとNginxの仮想ホストの基本的な知識と、SSL証明書の作成と構成が必要です。 これらのトピックの詳細については、次の記事を参照してください。
ステップ1—ApacheとPHP-FPMのインストール
ApacheとPHP-FPMに加えて、libapache2-mod-fastcgiという名前のPHPFastCGIApacheモジュールもインストールする必要があります。
まず、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 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 systemctl reload apache2
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
Apacheが正しいポートでリッスンしていることを確認したら、PHPとFastCGIのサポートを設定できます。
ステップ3—mod_fastcgiを使用するようにApacheを設定する
Apacheはを使用してPHPページを提供します mod_php
デフォルトですが、PHP-FPMを使用するには追加の構成が必要です。
注:mod_phpを使用したLAMPの既存のインストールでこのチュートリアルを試している場合は、最初に次のコマンドで無効にしてください。
- sudo a2dismod php7.0
の構成ブロックを追加します mod_fastcgi
に依存します mod_action
. mod_action
デフォルトでは無効になっているため、最初に有効にする必要があります。
- sudo a2enmod actions
これらの構成ディレクティブは、 .php
PHP-FPMUNIXソケットへのファイル。
- 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をリロードします。 警告が表示された場合 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 systemctl reload apache2
それでは、ApacheからPHPを提供できることを確認しましょう。
ステップ4—PHPの機能を確認する
PHPが機能するかどうかを確認するには、 phpinfo()
ファイルを作成し、Webブラウザからアクセスします。
- echo "<?php phpinfo(); ?>" | sudo tee /var/www/html/info.php
ブラウザでファイルを表示するには、次のURLにアクセスしてください。 http://your_ip_address:8080/info.php
. これにより、PHPが使用している構成設定のリストが表示されます。
ページの上部で、サーバーAPIがFPM /FastCGIと表示されていることを確認します。 ページの約3分の2のところにあるPHP変数セクションでは、SERVER_SOFTWAREがUbuntu上のApacheであることがわかります。 これらはそれを確認します mod_fastcgi
はアクティブであり、ApacheはPHP-FPMを使用してPHPファイルを処理しています。
ステップ5—Apache用の仮想ホストを作成する
ドメイン用のApache仮想ホストファイルを作成しましょう foobar.net
と test.io
. これを行うには、最初に両方のサイトのドキュメントルートディレクトリを作成し、それらのディレクトリにいくつかのデフォルトファイルを配置して、構成を簡単にテストできるようにします。
まず、ルートディレクトリを作成します。
- sudo mkdir -v /var/www/{foobar.net,test.io}
次に、を作成します 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()
PHPが適切に構成されていることをテストできるように、各サイトのファイル。
- 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 *:8080>
ServerName foobar.net
ServerAlias www.foobar.net
DocumentRoot /var/www/foobar.net
<Directory /var/www/foobar.net>
AllowOverride All
</Directory>
</VirtualHost>
注: AllowOverride All
有効にする .htaccess
サポート。
これらは最も基本的なディレクティブにすぎません。 Apacheで仮想ホストを設定するための完全なガイドについては、 Ubuntu16.04でApache仮想ホストを設定する方法を参照してください。
ファイルを保存して閉じます。 次に、同様の構成を作成します test.io
.
- sudo nano /etc/apache2/sites-available/test.io.conf
<VirtualHost *:8080>
ServerName test.io
ServerAlias www.test.io
DocumentRoot /var/www/test.io
<Directory /var/www/test.io>
AllowOverride All
</Directory>
</VirtualHost>
両方のApache仮想ホストがセットアップされたので、を使用してサイトを有効にします。 a2ensite
指図。 これにより、仮想ホストファイルへのシンボリックリンクが作成されます。 sites-enabled
ディレクトリ。
- sudo a2ensite foobar.net
- sudo a2ensite test.io
Apacheで構成エラーを再度確認してください。
- sudo apachectl -t
Syntax OK が表示されたら、Apacheをリロードします。
- sudo systemctl reload apache2
サイトが機能していることを確認するには、 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
ブラウザで。
手順4で見たのと同じPHP構成仕様リストが各サイトに表示されます。 現在、ポートでApacheでホストされている2つのWebサイトがあります 8080
ステップ6—Nginxのインストールと構成
このステップでは、Nginxをインストールしてドメインを構成します example.com
と sample.org
Nginxの仮想ホストとして。 Nginxで仮想ホストを設定するための完全なガイドについては、 Ubuntu 16.04 でNginxサーバーブロック(仮想ホスト)を設定する方法を参照してください。
パッケージマネージャーを使用してNginxをインストールします。
- sudo apt-get install nginx
次に、デフォルトの仮想ホストのsymlinkを削除します。これは、これ以上使用しないためです。 後で独自のデフォルトサイトを作成します(example.com
).
- sudo rm /etc/nginx/sites-enabled/default
次に、Apacheで使用したのと同じ手順を使用して、Nginxの仮想ホストを作成します。 まず、両方のWebサイトのドキュメントルートディレクトリを作成します。
- 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$ {
fastcgi_pass unix:/run/php/php7.0-fpm.sock;
include snippets/fastcgi-php.conf;
}
}
ファイルを保存して閉じます。 次に、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$ {
fastcgi_pass unix:/run/php/php7.0-fpm.sock;
include snippets/fastcgi-php.conf;
}
}
ファイルを保存して閉じます。 次に、へのシンボリックリンクを作成して、両方のサイトを有効にします。 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 nginx -t
次に、 OK が表示されたら、Nginxをリロードします。
- sudo systemctl reload nginx
今すぐアクセスします phpinfo()
にアクセスして、WebブラウザでNginx仮想ホストのファイルを作成します http://example.com/info.php
と http://sample.org/info.php
. PHP変数セクションをもう一度見てください。
[“ SERVER_SOFTWARE”]は言うべきです nginx
、ファイルがNginxによって直接提供されたことを示します。 [“ DOCUMENT_ROOT”] は、各Nginxサイトに対してこのステップの前半で作成したディレクトリを指している必要があります。
この時点で、Nginxをインストールし、2つの仮想ホストを作成しました。 次に、Apacheでホストされているドメインを対象としたリクエストをプロキシするようにNginxを構成します。
ステップ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://your_server_ip: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://foobar.net/info.php
ブラウザで。 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-dev
GitHubから最新の安定したリリースをダウンロードします。
- wget https://github.com/gnif/mod_rpaf/archive/stable.zip
でそれを抽出します:
- unzip stable.zip
作業ディレクトリに移動します。
- cd mod_rpaf-stable
次に、モジュールをコンパイルしてインストールします。
- 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 your_server_ip
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 systemctl reload apache2
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
毎回、証明書識別の詳細の入力を求められます。 に適切なドメインを入力します Common Name
毎回。
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) []:foobar.net
Email Address []:
次に、NginxからApacheにリクエストをプロキシするApache仮想ホストファイルを開きます。
- sudo nano /etc/nginx/sites-available/apache
ドメインごとに個別の証明書とキーがあるため、個別に用意する必要があります server { . . . }
各ドメインのブロック。 ファイルの現在の内容を削除して、次の内容に置き換える必要があります。
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://your_server_ip: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://your_server_ip: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つの別々のブロックに分割し、安全なサイトのデフォルトポートであるポート443でリッスンするようにNginxに指示しました。
ファイルを保存し、構成テストを実行します。
- sudo nginx -t
テストが成功した場合は、Nginxをリロードします。
- sudo systemctl reload nginx
次に、ブラウザで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 your_server_ip -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のリポジトリにあります。 この記事を調べて、IPTablesの構成方法の詳細を確認してください。
ステップ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;
root /var/www/test.io;
index index.php index.htm index.html;
location / {
try_files $uri $uri/ /index.php;
}
location ~ \.php$ {
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;
}
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://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;
}
location ~ /\. {
deny all;
}
}
HTTPSも利用できるようにする場合は、 listen 443 ssl;
手順9の回線およびその他のSSL設定。
The try_files
ディレクティブにより、Nginxはドキュメントルート内のファイルを検索し、それらを直接提供します。 ファイルに .php
拡張機能の場合、リクエストはApacheに渡されます。 ファイルがドキュメントルートに見つからない場合でも、リクエストはApacheに渡されるため、パーマリンクなどのアプリケーション機能は問題なく機能します。
警告: location ~ /\.
ディレクティブは非常に重要です。 これにより、Nginxが次のようなファイルの内容を印刷するのを防ぎます .htaccess
と .htpasswd
機密情報が含まれています。
ファイルを保存し、構成テストを実行します。
- sudo nginx -t
テストが成功した場合は、Nginxをリロードします。
- sudo service nginx reload
これが機能していることを確認するために、Apacheのログファイルを調べることができます。 /var/log/apache2
とのGETリクエストを参照してください info.php
のファイル test.io
と foobar.net
. 使用 tail
コマンドを使用してファイルの最後の数行を表示し、 -f
ファイルの変更を監視するように切り替えます。
- sudo tail -f /var/log/apache2/other_vhosts_access.log
訪問 http://test.io/info.php
ブラウザで、ログからの出力を確認します。 Apacheが実際に応答していることがわかります。
test.io:80 your_server_ip - - [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を提供するUbuntuドロップレットが1つできました。 example.com
と sample.org
、Apacheサービングと一緒に foobar.net
と test.io
. NginxはApacheのリバースプロキシとして機能していますが、Nginxのプロキシサービスは透過的であり、Apacheのドメインへの接続はApache自体から直接提供されているように見えます。 この方法を使用して、安全で静的なサイトにサービスを提供できます。