株式会社 科学技術研究所
ホーム > かぎけんブログ > 備忘録 > ApacheとNginxを共存させる
ApacheとNginxを共存させる
投稿日:2017/04/12
カテゴリ:備忘録

Ubuntu16.04にApacheとNginxを共存させる設定の備忘録です。
80番ポートをLISTENするのはApacheとして、特定のアクセスのみをNginxに流すようにします。
Nginx側に流す処理はApacheのリバースプロキシ機能を利用します。

今回想定している環境は以下の通りです。
ドキュメントルートは設定しますが、中にファイルは何も設置しません。
404エラーを表示させ、動作しているWEBサーバーを確認するためです。

ホスト ホスト名 ポート 設定ファイル名(Apache/Nginx) ドキュメントルート どちらで表示するか
ホストA a.example.com 80 host-a.conf / 無し /var/www/a Apache
ホストB b.example.com 8080 host-b.conf / host-b /var/www/b Nginx

 

1. ApacheとNginxをインストール
aptコマンドでそれぞれのパッケージを取得してインストールします。
Apacheのインストール後、Nginxとのポート衝突を避けるため、一時的に停止させます。


    $ sudo apt-get install apache2
    $ sudo /etc/init.d/apache2 stop
  

    $ sudo apt-get install nginx
    $ sudo /etc/init.d/nginx stop
  

 

2. Apacheの設定
/etc/apache2/sites-available以下に設定ファイル(host-a.conf)を生成し、ホストAの設定を行います。


    $ sudo touch /etc/apache2/sites-available/host-a.conf
  

    # in /etc/apache2/sites-available/host-a.conf

    <VirtualHost *:80>
      ServerName a.example.com
      DocumentRoot /var/www/a
    </VirtualHost *:80>
  

同様にホストB用の設定ファイル(host-b.conf)を生成し、ホストBの設定を行います。


    $ sudo touch /etc/apache2/sites-available/host-b.conf
  

    # in /etc/apache2/sites-available/host-b.conf

    <VirtualHost *:80>
      ServerName b.example.com

      ProxyRequests off
      ProxyPass / http://b.example.com:8080/
      ProxyPassReverse / http://b.example.com:8080/
    </VirtualHost *:80>
  

これらの設定ファイルを有効化します。


    $ sudo a2ensite host-a host-b
  

Proxy機能を利用するためモジュールを有効化します。


    $ sudo a2enmod proxy proxy_http
  

 

3. Nginxの設定
/etc/nginx/sites-available以下に設定ファイル(host-b)を作成します。
Apacheより8080番ポートへアクセスを流しているため、8080番をLISTENするよう設定します。


    $ sudo touch /etc/nginx/sites-available/host-b
  

    # in /etc/nginx/sites-available/host-b
    server {
      listen 8080;
      listen [::]:8080;
      server_name b.example.com;
      root /var/www/b;
    }
  

設定を有効化します。
/etc/nginx/sites-enabled以下にsites-availableからのシンボリックリンクを作成します。
コマンドで提供されていないようで、手動でリンクを張る必要があります。


    $ sudo ln -s /etc/nginx/sites-available/host-b /etc/nginx/sites-enabled/host-b
  

 

4. 各サーバーを起動
設定が終わりましたのでApacheとNginxを起動します。


    $ sudo /etc/init.d/apache2 start
    $ sudo /etc/init.d/nginx start
  

ブラウザでホストA/BにアクセスしWEBサーバーがそれぞれApache/Nginxとなっていればうまく設定できています。