Nginxリバースプロキシの基本設定

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重で記録されていた模様。。

スポンサーリンク






シェアする

  • このエントリーをはてなブックマークに追加

フォローする