序章

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.nettest.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リポジトリを更新して、最新のパッケージがあることを確認します。

  1. sudo apt-get update

次に、必要なパッケージをインストールします。

  1. sudo apt-get install apache2 libapache2-mod-fastcgi php-fpm

次に、Apacheのデフォルト構成を変更しましょう。

ステップ2—ApacheとPHP-FPMの設定

このステップでは、Apacheのポート番号を8080に変更し、mod_fastcgiモジュールを使用してPHP-FPMで動作するように構成します。 Apache構成ファイルを編集し、Apacheのポート番号を変更します。

  1. 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、それでそれも変更する必要があります。 デフォルトの仮想ホストファイルを開きます。

  1. sudo nano /etc/apache2/sites-available/000-default.conf

最初の行は次のようになります。

<VirtualHost *:80>

次のように変更します。

<VirtualHost *:8080>

ファイルを保存し、Apacheをリロードします。

  1. sudo systemctl reload apache2

Apacheが現在リッスンしていることを確認します 8080.

  1. 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の既存のインストールでこのチュートリアルを試している場合は、最初に次のコマンドで無効にしてください。

  1. sudo a2dismod php7.0

の構成ブロックを追加します mod_fastcgi に依存します mod_action. mod_action デフォルトでは無効になっているため、最初に有効にする必要があります。

  1. sudo a2enmod actions

これらの構成ディレクティブは、 .php PHP-FPMUNIXソケットへのファイル。

  1. 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 構成テストを行います。

  1. 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.、 それはいいです。 今は影響しません。

  1. sudo systemctl reload apache2

それでは、ApacheからPHPを提供できることを確認しましょう。

ステップ4—PHPの機能を確認する

PHPが機能するかどうかを確認するには、 phpinfo() ファイルを作成し、Webブラウザからアクセスします。

  1. echo "<?php phpinfo(); ?>" | sudo tee /var/www/html/info.php

ブラウザでファイルを表示するには、次のURLにアクセスしてください。 http://your_ip_address:8080/info.php. これにより、PHPが使用している構成設定のリストが表示されます。

ページの上部で、サーバーAPIFPM /FastCGIと表示されていることを確認します。 ページの約3分の2のところにあるPHP変数セクションでは、SERVER_SOFTWAREがUbuntu上のApacheであることがわかります。 これらはそれを確認します mod_fastcgi はアクティブであり、ApacheはPHP-FPMを使用してPHPファイルを処理しています。

ステップ5—Apache用の仮想ホストを作成する

ドメイン用のApache仮想ホストファイルを作成しましょう foobar.nettest.io. これを行うには、最初に両方のサイトのドキュメントルートディレクトリを作成し、それらのディレクトリにいくつかのデフォルトファイルを配置して、構成を簡単にテストできるようにします。

まず、ルートディレクトリを作成します。

  1. sudo mkdir -v /var/www/{foobar.net,test.io}

次に、を作成します index 各サイトのファイル。

  1. echo "<h1 style='color: green;'>Foo Bar</h1>" | sudo tee /var/www/foobar.net/index.html
  1. echo "<h1 style='color: red;'>Test IO</h1>" | sudo tee /var/www/test.io/index.html

次に、を作成します phpinfo() PHPが適切に構成されていることをテストできるように、各サイトのファイル。

  1. echo "<?php phpinfo(); ?>" | sudo tee /var/www/foobar.net/info.php
  1. echo "<?php phpinfo(); ?>" | sudo tee /var/www/test.io/info.php

次に、の仮想ホストファイルを作成します foobar.net ドメイン。

  1. 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.

  1. 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 ディレクトリ。

  1. sudo a2ensite foobar.net
  1. sudo a2ensite test.io

Apacheで構成エラーを再度確認してください。

  1. sudo apachectl -t

Syntax OK が表示されたら、Apacheをリロードします。

  1. sudo systemctl reload apache2

サイトが機能していることを確認するには、 http://foobar.net:8080http://test.io:8080 ブラウザで、各サイトにindex.htmlファイルが表示されていることを確認します。

次の結果が表示されます。

また、各サイトの info.php ファイルにアクセスして、PHPが機能していることを確認してください。 訪問 http://foobar.net:8080/info.phphttp://test.io:8080/info.php ブラウザで。

手順4で見たのと同じPHP構成仕様リストが各サイトに表示されます。 現在、ポートでApacheでホストされている2つのWebサイトがあります 8080

ステップ6—Nginxのインストールと構成

このステップでは、Nginxをインストールしてドメインを構成します example.comsample.org Nginxの仮想ホストとして。 Nginxで仮想ホストを設定するための完全なガイドについては、 Ubuntu 16.04 でNginxサーバーブロック(仮想ホスト)を設定する方法を参照してください。

パッケージマネージャーを使用してNginxをインストールします。

  1. sudo apt-get install nginx

次に、デフォルトの仮想ホストのsymlinkを削除します。これは、これ以上使用しないためです。 後で独自のデフォルトサイトを作成します(example.com).

  1. sudo rm /etc/nginx/sites-enabled/default

次に、Apacheで使用したのと同じ手順を使用して、Nginxの仮想ホストを作成します。 まず、両方のWebサイトのドキュメントルートディレクトリを作成します。

  1. sudo mkdir -v /usr/share/nginx/{example.com,sample.org}

Apacheの仮想ホストで行ったように、もう一度作成します indexphpinfo() セットアップが完了した後にテストするためのファイル。

  1. echo "<h1 style='color: green;'>Example.com</h1>" | sudo tee /usr/share/nginx/example.com/index.html
  1. echo "<h1 style='color: red;'>Sample.org</h1>" | sudo tee /usr/share/nginx/sample.org/index.html
  1. echo "<?php phpinfo(); ?>" | sudo tee /usr/share/nginx/example.com/info.php
  1. echo "<?php phpinfo(); ?>" | sudo tee /usr/share/nginx/sample.org/info.php

次に、ドメインの仮想ホストファイルを作成します example.com.

  1. 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.

  1. 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 ディレクトリ。

  1. sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/example.com
  1. sudo ln -s /etc/nginx/sites-available/sample.org /etc/nginx/sites-enabled/sample.org

Nginx構成テストを実行します。

  1. sudo nginx -t

次に、 OK が表示されたら、Nginxをリロードします。

  1. sudo systemctl reload nginx

今すぐアクセスします phpinfo() にアクセスして、WebブラウザでNginx仮想ホストのファイルを作成します http://example.com/info.phphttp://sample.org/info.php. PHP変数セクションをもう一度見てください。

[“ SERVER_SOFTWARE”]は言うべきです nginx、ファイルがNginxによって直接提供されたことを示します。 [“ DOCUMENT_ROOT”] は、各Nginxサイトに対してこのステップの前半で作成したディレクトリを指している必要があります。

この時点で、Nginxをインストールし、2つの仮想ホストを作成しました。 次に、Apacheでホストされているドメインを対象としたリクエストをプロキシするようにNginxを構成します。

ステップ7—Apacheの仮想ホスト用にNginxを構成する

複数のドメイン名を持つ追加のNginx仮想ホストを作成しましょう server_name ディレクティブ。 これらのドメイン名のリクエストはApacheにプロキシされます。

新しいNginx仮想ホストファイルを作成します。

  1. 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;
    }
}

ファイルを保存し、シンボリックリンクを作成してこの新しい仮想ホストを有効にします。

  1. sudo ln -s /etc/nginx/sites-available/apache /etc/nginx/sites-enabled/apache

構成テストを実行します。

  1. sudo nginx -t

OK が表示されたら、Nginxをリロードします。

  1. 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 ただし、古く、特定の構成ディレクティブをサポートしていません。 代わりに、ソースからインストールします。

モジュールのビルドに必要なパッケージをインストールします。

  1. sudo apt-get install unzip build-essential apache2-dev

GitHubから最新の安定したリリースをダウンロードします。

  1. wget https://github.com/gnif/mod_rpaf/archive/stable.zip

でそれを抽出します:

  1. unzip stable.zip

作業ディレクトリに移動します。

  1. cd mod_rpaf-stable

次に、モジュールをコンパイルしてインストールします。

  1. make
  1. sudo make install

でファイルを作成します mods-available rpafモジュールをロードするディレクトリ。

  1. sudo nano /etc/apache2/mods-available/rpaf.load

次の行をファイルに追加します。

LoadModule rpaf_module /usr/lib/apache2/modules/mod_rpaf.so

このディレクトリに別のファイルを作成します。 これには、構成ディレクティブが含まれます。

  1. 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 モジュールを有効にします。

  1. sudo a2enmod rpaf

これにより、ファイルのシンボリックリンクが作成されます rpaf.loadrpaf.conf の中に mods-enabled ディレクトリ。 次に、構成テストを実行します。

  1. sudo apachectl -t

Syntax OK が返された場合は、Apacheをリロードします。

  1. 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証明書とその秘密鍵用のディレクトリを作成します。

  1. sudo mkdir /etc/nginx/ssl

この記事では、有効期間が10年の自己署名SSL証明書を使用します。 両方の自己署名証明書を生成する foobar.nettest.io.

  1. 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
  1. 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仮想ホストファイルを開きます。

  1. 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に指示しました。

ファイルを保存し、構成テストを実行します。

  1. sudo nginx -t

テストが成功した場合は、Nginxをリロードします。

  1. sudo systemctl reload nginx

次に、ブラウザでApacheのドメインの1つにアクセスします。 https:// プレフィックス。 まず、 https://foobar.net/info.php そして、あなたはこれを見るでしょう:

このチュートリアルでは自己署名証明書を使用したため、ブラウザは接続が信頼できない可能性があることを警告する場合があります。 サイトを信頼することで安全に進めることができます。

PHP変数セクションを見てください。 変数SERVER_PORT443に設定され、HTTPSonに設定されています。 これらの変数を設定すると、リバースプロキシの背後で動作するようにPHPアプリケーションを特別に構成する必要がなくなります。

ステップ10— Apacheへの直接アクセスをブロックする(オプション)

Apacheはポートでリッスンしているので 8080 パブリックIPアドレスでは、誰でもアクセスできます。 次のIPtablesコマンドをファイアウォールルールセットに適用することでブロックできます。

  1. 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 仮想ホストファイル。

  1. 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 機密情報が含まれています。

ファイルを保存し、構成テストを実行します。

  1. sudo nginx -t

テストが成功した場合は、Nginxをリロードします。

  1. sudo service nginx reload

これが機能していることを確認するために、Apacheのログファイルを調べることができます。 /var/log/apache2 とのGETリクエストを参照してください info.php のファイル test.iofoobar.net. 使用 tail コマンドを使用してファイルの最後の数行を表示し、 -f ファイルの変更を監視するように切り替えます。

  1. 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.comsample.org、Apacheサービングと一緒に foobar.nettest.io. NginxはApacheのリバースプロキシとして機能していますが、Nginxのプロキシサービスは透過的であり、Apacheのドメインへの接続はApache自体から直接提供されているように見えます。 この方法を使用して、安全で静的なサイトにサービスを提供できます。