24時間365日フルマネージドホスティングサービスのデイーネット

NginxのReverse proxyを設定してみた

自宅にプライベート用のストリーミングサーバを設置してるなんて言えない・・・。
こんにちは、インテグの馬場です。
今回ご紹介するのは、タイトルの通りNginxのReverse proxy設定についてです。

PDF.PNG
今回のポイントは以下の点です。
・NginxのReverse proxyを用いて、デフォルトの状態では8080番からのアクセスが必要な、
 Tomcat(Knowledge)を80番でアクセスしているという点。

・NginxのReverse proxyを用いて、画像系の処理(静的処理)はNginx、
 画像系以外(PHP等)の処理(動的処理)はApacheへ流すように設定するという点。

今回はKnowledgeとWordPressを用いて設定を書いてみました。
knowledgeについての詳しい内容はこちらをご覧ください。

Nginxの設定

設定は以下の通り行います。

vim /etc/nginx/conf.d/reverse_proxy.conf
server {
     listen       80;
     server_name  example.co.jp;

     location ^~ /knowledge/ {
        proxy_pass http://localhost:8080/knowledge/;
        break;
        }

        proxy_set_header    X-Real-IP       $remote_addr;
        proxy_set_header    X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header    Host            $http_host;
        proxy_redirect      off;
        proxy_max_temp_file_size    0;

     location ~* \.(jpg|JPG|gif|GIF|png|PNG|swf|SWF|css|CSS|js|JS|inc|INC|ico|ICO)$ {
         root   /var/www/vhost/example.co.jp/html;
         index   index.html;
         access_log /var/www/vhost/example.co.jp/logs/nginx_log  main;
         ssi     on;
         break;
     }
     location / {
        proxy_pass  http://localhost:8081;
        break;
     }
}

ポイントとしては、location ^~ /knowledge/
この正規表現はURIが条件に一致したら、以降いかなるチェックも行わないというもので、
こちらの記述が最優先されます。

もし、location /knowledge/
などとした場合は、画像ファイルの正規表現が優先されますので、knowledgeの画像ファイルが全て表示されなくなります。

Apacheの設定

次にApacheの設定を行います。

vim /etc/httpd/conf.d/virtual.conf
Listen 8081
<VirtualHost *:8081>
        DocumentRoot    /var/www/vhost/example.co.jp/html
        ServerName      example.co.jp
        Serveradmin     root@localhost
        LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined_denet
        ErrorLog        /var/www/vhost/example.co.jp/logs/error_log
        CustomLog      "|/usr/sbin/rotatelogs /var/www/vhost/example.co.jp/logs/access_log_%Y%m%d 86400 540" combined_denet
</VirtualHost>

Apacheの設定では、8081番でListenし、Nginxからのリクエストを返します。
その際に、LogFormatは上記の様に設定しておきます。
この設定が無い場合、NginxからのリクエストとApacheが受け取り、
localhostのIPを返してしまいます。

これで、設定完了したので後はApacheとNginxの再起動を実施します。
想定どおりの挙動であるかlogと見合わせて確認します。

うまくwordpressが表示され、wordpressの画像がNginxのログに流れ、 wordpressのphp系がapacheのログに流れているか確認します。

tailf accesslog20180417

172.16.0.10 - - [17/Apr/2018:18:00:00 +0900] "GET / HTTP/1.0" 200 53170 "http://172.16.0.10/index.php/2018/04/17/hello-world/" "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36"

tailf nginx_log

172.16.0.10 - - [17/Apr/2018:18:00:00 +0900] "GET /wp-content/themes/twentyseventeen/assets/images/header.jpg HTTP/1.1" 200 114854 "http://172.16.0.10/" "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36" "-"
・・・・・以下複数・・・・・

※こちらはローカル環境で実施しています。

こんな感じで問題なく分散されていれば、想定どおりです。
おまけで追加したストリーミングサーバの話は次回のネタにでも・・・。
それでは、また次回でお会いしましょう!

  • このページの先頭へ

  • 東京本社
    〒105-0001東京都港区虎ノ門2-3-22 第一秋山ビル5F
    TEL:03-3591-8887 FAX:03-3591-8886
  • 大阪本社
    〒541-0041 大阪市中央区北浜2-6-11北浜エクセルビル5F
    TEL:06-6231-8887 FAX:06-6231-8897

  • 認証範囲はこちらをご覧ください。

Denet logo

クラウドサービス・データセンタ・高機能専有サーバ・共有サーバホスティングサービス 株式会社ディーネット
dot_bar