nginxをキャッシュサーバとして設定してみます。静的なファイルはnginxが担当、動的なものはApacheが担当というイメージです。
■インストール
rpm -ivh http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpm
登録が完了すると、/etc/yum.repos.d/nginx.repo が作成されているはずです。
# yum install nginx
外部からはlampvhost1へのリクエストで受け付け、静的なファイルはnginxが直接処理。その他のファイルはapache側へスルーさせるようにします。
apache側はVirtualHostの設定で8080ポートを待ち受けポートにするように変更。
■リバースプロキシの基本設定
「/etc/nginx/conf.d/」の下に適当なファイル名で「proxy.conf」を作成します。「default.conf」は「default.conf.org」にりネームしておきます。
# vi proxy.conf server { listen 80; server_name lampvhost1; access_log /var/log/httpd/lampvhost1_nginx_access.log; error_log /var/log/httpd/lampvhost1_nginx_error.log info; 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/lampvhost1/; index index.html; break; } location / { proxy_pass http://lampvhost1:8080; break; } }
設定した項目の内容
[ server_name ]
:HTTP リクエストのHostと比較してリクエストをどのサーバに振り向けるかを決定
[ proxy_set_header ]
:プロクシーサーバに送られるリクエストヘッダのフィールドを再定義
[ proxy_redirect ]
:レスポンスヘッダのうちLocation、Refreshのの書き換え
[ location ]
判定の優先順位は下記
1.= : 完全一致
2.^~ : 前方検索(正規表現より優先度が上)
3.~ : 正規表現(大文字小文字区別あり)
4.~* : 正規表現(大文字小文字区別なし)
5.なし : 前方検索(正規表現より優先度が下)
上記の例だと「location /」が/ で始まる全てのURIに一致しますが、正規表現のlocation判定「~」があるのでこちらが優先される模様。
サービスの起動
# service nginx start
ブラウザでアクセスしてApache側のアクセスログを見てみる。Apache側にはnginxのIPからのアクセスが記録される。画像ファイルへのアクセスは記録されていません。
[root@lamptest httpd]# less lampvhost1_access.log 10.0.0.33 - - [17/Dec/2014:04:43:02 +0000] "GET / HTTP/1.0" 200 43 "-" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/7. 0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E)"
nginx側のアクセスログをみると、/へのアクセスと画像ファイルへのアクセスが記録されます。
[root@lamptest httpd]# less lampvhost1_nginx_access.log 11.11.11.11 - - [17/Dec/2014:04:43:02 +0000] "GET / HTTP/1.1" 200 43 "-" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Triden t/7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E)" 11.11.11.11 - - [17/Dec/2014:04:43:03 +0000] "GET /apache-logo.png HTTP/1.1" 200 8587 "http://lampvhost1/" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; . NET4.0E)"
最初画像ファイルが表示されなかった。「/var/www/lampvhost1/」の所有グループがapacheになっており権限が「770」だったためのようでnginxユーザをapacheグループに追加したところうまく見えるようになりました。
なお、後でわかったが「/etc/nginx/nginx.conf」にもデフォルトでログの設定があり2重で記録されていた模様。。