前回「Nginx + php-fpm をさくらのVPSで使ってみた」では、
nginxをウェブサーバーとして使ってみました。実際にさくらのVPSでの設定を行って、動作させてみました。
nginxのウェブサーバーとしてのパフォーマンスは、十分に感じられたと思います。
今回は、nginxの真骨頂であるリバースプロキシを使ってみます。
よくあるパターンは、nginx (リバースプロキシ) + apache (ウェブサーバー本体) の組み合わせです。
ここでは、nginx (リバースプロキシ) + nginx (ウェブサーバー本体) の1サービスで実施することで、リソースの消費を最小限におさえてみました。
リバースプロキシ(Reverse Proxy) または逆プロキシ とは、
特定のサーバへの要求を必ず経由するように設置されたプロキシサーバのことで、一般的なプロキシとは、文字通り逆の意味あいを持ち、不特定多数のサーバを対象としません。
リバースプロキシは、不特定多数のクライアントから寄せられる要求に対して、応答を肩代わりすることにより特定のサーバの負担を軽減したり、 アクセスを制限することにより特定のサーバのセキュリティを高めたりする目的に用いられます。
上の図は、リバースプロキシサーバーと一般的なプロキシサーバーの違いです。
いずれのプロキシサーバーもインターネットに接続されています。
違いは、インターネットと逆向きの接続先が
リバースプロキシサーバーをおくこともメリットは、もちろんキャッシュサーバーとしてのメリットもありますが、 ロードバランサーの機能を使っての以下の図のような負荷分散のイントラネットを構築できることです。
特定のサーバへの要求を必ず経由するように設置されたプロキシサーバのことで、一般的なプロキシとは、文字通り逆の意味あいを持ち、不特定多数のサーバを対象としません。
リバースプロキシは、不特定多数のクライアントから寄せられる要求に対して、応答を肩代わりすることにより特定のサーバの負担を軽減したり、 アクセスを制限することにより特定のサーバのセキュリティを高めたりする目的に用いられます。
リバースプロキシサーバーの例
プロキシサーバーの例
上の図は、リバースプロキシサーバーと一般的なプロキシサーバーの違いです。
いずれのプロキシサーバーもインターネットに接続されています。
違いは、インターネットと逆向きの接続先が
- リバースプロキシサーバー :
ウェブサーバーなどのサーバー(インターネットサーバー) - プロキシサーバー :
個人のパソコン(インターネットユーザ)
リバースプロキシサーバーをおくこともメリットは、もちろんキャッシュサーバーとしてのメリットもありますが、 ロードバランサーの機能を使っての以下の図のような負荷分散のイントラネットを構築できることです。
リバースプロキシー(reverse proxy server)としてnginxを利用する場合のキャッシュ削除モジュール nginx cache purge を組み込みたい場合は、
また、以下の記事も参考になるかと思います。
nginx でリバースプロキシ、FastCGIキャッシュのキャッシュを削除する方法をまとめて解説してみた
- Nginx にリバースプロキシのキャッシュ削除モジュール nginx cache purge を組み込んで使ってみる(CentOS/ScientificLinux編)
- Nginxのproxyでキャッシュを削除する方法
また、以下の記事も参考になるかと思います。
nginx でリバースプロキシ、FastCGIキャッシュのキャッシュを削除する方法をまとめて解説してみた
Nginxのキャッシュ機能だけを利用したい方は、さらに効率的、高速化が図れる Nginx のFastCGIキャッシュ(fastcgi cache )を使ってみた が参考になるかと思います。
- 目次
- 履歴
2011年6月29日 初版
2013年5月16日 見やすく変更した
さくらのVPSでのnginx の設定例
以下は、Nginx + php-fpm をさくらのVPSで使ってみた で使用した さくらのVPS での nginx の設定例を リバースプロキシ用に編集したものです。
今回のリバースプロキシに関する編集箇所は、
赤:追加、青:Wordpress関連事項の追加、灰:変更箇所で
それぞれ表しています。
/etc/nginx/nginx.confの設定例
|
|
/etc/nginx/php_execの設定例
|
|
nginx http部
proxy_buffering on;
プロキシサーバの応答のバッファリングを有効(on)、無効(off)にします。デフォルトは、有効(on)です。
バッファリングを有効(on)にした場合、高速な応答を実現するために、プロキシサーバの応答を読み込み、proxy_buffer_size、proxy_buffersによって決まったバッファエリアに格納します。
ここでは、バッファリングを有効(on)にしています。
バッファリングを有効(on)にした場合、高速な応答を実現するために、プロキシサーバの応答を読み込み、proxy_buffer_size、proxy_buffersによって決まったバッファエリアに格納します。
ここでは、バッファリングを有効(on)にしています。
proxy_buffer_size 8k;
プロキシサーバのレスポンス用バッファサイズ(4k or 8k)を設定します。デフォルトは、proxy_buffersの1つのバッファサイズと同じです。
ここでは、バッファサイズを8kにしています。
ここでは、バッファサイズを8kにしています。
proxy_buffers 100 8k;
プロキシサーバの応答のバッファサイズ(4k or 8k)とその個数を設定します。デフォルトは、個数は 8 個で、バッファサイズはシステムに依存します。
ここでは、バッファサイズを8kにし、個数を100個まで持つように設定しています。
ここでは、バッファサイズを8kにし、個数を100個まで持つように設定しています。
proxy_cache_path /var/cache/nginx/domain1.com levels=1:2 keys_zone=cache_domain1.com:15m inactive=7d max_size=1000m;
キャッシュのパス、キャッシュパラメータを設定します。
キャッシュされたデータはファイルに格納されています。 プロキシされたURLのMD5ハッシュは、キャッシュエントリのキーとして使用され、応答の内容とメタデータのキャッシュのパスにファイル名としても使用されます。
レベルのパラメータは、キャッシュ内のサブディレクトリレベル数を設定します。
キャッシュされたデータはファイルに格納されています。 プロキシされたURLのMD5ハッシュは、キャッシュエントリのキーとして使用され、応答の内容とメタデータのキャッシュのパスにファイル名としても使用されます。
レベルのパラメータは、キャッシュ内のサブディレクトリレベル数を設定します。
levels=1:2
levelは、キャッシュパスの配下のサブディレクトリの文字数を設定するものです。最大で3階層( ex. 1:2:3 )まで指定できます。
ここでは、levels=1:2と指定しています。つまり、1階層目は1文字、2階層目は2文字でサブディレクトリが作成されることを意味します。
ここでは、levels=1:2と指定しています。つまり、1階層目は1文字、2階層目は2文字でサブディレクトリが作成されることを意味します。
keys_zone=cache_domain1.com:15m
keys_zoneは、キャッシュパスのゾーン名、ゾーンサイズを設定するものです。最大で3階層( ex. 1:2:3 )まで指定できます。
ここでは、ゾーン名をcache_domain1.comとし、ゾーンサイズを15MBで指定しています。ここで、メモリが15MB消費されることに注意してください。
ここでは、ゾーン名をcache_domain1.comとし、ゾーンサイズを15MBで指定しています。ここで、メモリが15MB消費されることに注意してください。
inactive=7d
inactiveは、非アクセス時間を設定します。ここで設定した日時を越えたキャッシュ情報は、自動的に削除されます。
ここでは、7日間( 7d )を指定しています。つまり、特別に何もなければキャッシュは、一週間保存されることになります。
ここでは、7日間( 7d )を指定しています。つまり、特別に何もなければキャッシュは、一週間保存されることになります。
max_size=1000m;
max_sizeは、キャッシュのファイルサイズ(ゾーン内の全てのキャッシュファイルサイズ)の最大値を設定します。
ここでは、1000MBつまり1GBと指定しています。ここでは、zone_size と max_sizeのいずれかががサイズオーバーになった時点でキャッシュが停止します。
ここでは、1000MBつまり1GBと指定しています。ここでは、zone_size と max_sizeのいずれかががサイズオーバーになった時点でキャッシュが停止します。
proxy_temp_path /var/cache/nginx/temp;
キャッシュのテンポラリパスを設定します。
ここでもproxy_cache_pathと同じようにlevelを追加で指定することができます。しかし、一般的には使わないことが多いようです。
ここでもproxy_cache_pathと同じようにlevelを追加で指定することができます。しかし、一般的には使わないことが多いようです。
proxy_connect_timeout 60;
上位サーバ(upstream server)への接続のタイムアウト(秒)を設定します。60(秒)がデフォルト値で、75(秒)以上は設定できません。
ここでは、60(秒)を設定しています。
ここでは、60(秒)を設定しています。
proxy_read_timeout 90;
プロキシサーバの応答の読み取りタイムアウトを設定します。
それは、nginxへの要求に対して応答を取得するためにどれくらい待つかを決定します。 60(秒)がデフォルト値です。
ここでは、90(秒)と若干長めに設定しています。
phpの処理などで応答までの最大となる時間を設定するのが良いとされています。
ここでは、90(秒)と若干長めに設定しています。
phpの処理などで応答までの最大となる時間を設定するのが良いとされています。
proxy_send_timeout 60;
上位サーバ(upstream server)へのリクエストの転送タイムアウト(秒)を設定します。 60(秒)がデフォルト値です。
ここでは、60(秒)を設定しています。
ここでは、60(秒)を設定しています。
proxy_cache_valid 200 2h; proxy_cache_valid 302 2h; proxy_cache_valid 301 4h; proxy_cache_valid any 1m;
HTTPステータスコード毎にキャッシュ時間を設定します。
ここでは、以下のように設定しています。
この設定では、正常なページ応答は、2時間の間キャッシュされ、同じものが返信されることになります。
ここでは、以下のように設定しています。
HTTPステータスコード | キャッシュ時間 |
---|---|
200 (OK:OK) | 2時間 (2h) |
302 (Moved Temporarily:一時的に移動) | 2時間 (2h) |
301 (Moved Permanently:恒久的に移動) | 4時間 (4h) |
上記以外 | 1分 (1m) |
proxy_set_header Host $http_host; proxy_set_header X-Remote-Addr $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
ヘッダ情報を再設定 あるいは、追加設定します。
ここでは、以下のように設定しています。
ここでは、Wordpressや他のPHPスクリプトの中で、以下の情報を使っている場合は、対応が必要な場合があります。
ここでは、以下のように設定しています。
ヘッダキー | PHPでの取得キー | 概要 |
---|---|---|
Host | $_SERVER[‘HTTP_HOST’] | HTTPホスト名 |
X-Remote-Addr | $_SERVER[‘HTTP_X_REMOTE_ADDR’] | リモートホストIPアドレス |
X-Forwarded-For | $_SERVER[‘HTTP_X_FORWARDED_FOR’] | 転送元のホスト名(or IPアドレス) |
- $_SERVER[‘HTTP_HOST’]
この情報は、proxy_set_headerで要求されたhttp_host名に上書きされます。 - $_SERVER[‘REMOTE_ADDR’]
この情報は、上書きされません。そのため、上位サーバ(upstream server)では、呼びだれた元のIPアドレス(ここでは、127.0.0.1 )となります。
もし、あなたが、本来の意味であるアクセス要求してきたクライアントのIPアドレスを知りたいのなら、$_SERVER[‘HTTP_X_REMOTE_ADDR’]を使うべき、あるいは、$_SERVER[‘REMOTE_ADDR’]に$_SERVER[‘HTTP_X_REMOTE_ADDR’]を上書きするべきです。
upstream www.domain1.com.backend { ip_hash; server 127.0.0.1:8080; }
上位サーバ(upstream server)を定義します。
ここでは、
ここでは、
ip_hash;
上位サーバ(upstream server)のIPアドレスによるハッシュテーブルを作成します。
上位サーバ(upstream server)を複数設定して接続先がたくさんある場合は、IPアドレスのCクラスをキーとしてホスト名-IPアドレスのハッシュテーブルを作成します。
上位サーバ(upstream server)が1つの場合、ほとんど意味がありません。
ここでは、今後、分散化を図る可能性があるので、ip_hash;を設定しています。
上位サーバ(upstream server)を複数設定して接続先がたくさんある場合は、IPアドレスのCクラスをキーとしてホスト名-IPアドレスのハッシュテーブルを作成します。
上位サーバ(upstream server)が1つの場合、ほとんど意味がありません。
ここでは、今後、分散化を図る可能性があるので、ip_hash;を設定しています。
server 127.0.0.1:8080;
上位サーバ(upstream server)を設定します。
ここでは、ipアドレス:ポート番号を指定していますが、サーバー名でも可。
また、以降にweightパラメータを設定することもできます。
weightパラメータで複数のサーバーを定義し、分散するための重み付け(振り分け確率)を行うことができます。
weightパラメータ以外にも、エラーの回数を判断するためのmax_failsパラメータ、fail_timeoutパラメータなどがあります。
ここでは、現在1つのサーバーのみの設定なので、パラメータなしとなっています。
ここでは、ipアドレス:ポート番号を指定していますが、サーバー名でも可。
また、以降にweightパラメータを設定することもできます。
weightパラメータで複数のサーバーを定義し、分散するための重み付け(振り分け確率)を行うことができます。
weightパラメータ以外にも、エラーの回数を判断するためのmax_failsパラメータ、fail_timeoutパラメータなどがあります。
ここでは、現在1つのサーバーのみの設定なので、パラメータなしとなっています。
nginx server部
serverの設定では、以前の設定内容は、バックエンドである上位サーバー(upstream server)として設定しなおし (listen 80 → 8080 )、
前面のプロキシサーバーの追加設定を行っています。
proxy server部
listen 80;
TCPポート番号を設定します。デフォルトでは、80番になります。
一般的に公開するウェブサーバーなら80番を使います。
SSLの場合は、443番を使います。
一般的に公開するウェブサーバーなら80番を使います。
SSLの場合は、443番を使います。
server_name domain1.com www.domain1.com;
サーバー名を設定します。
ここでは、domain1.com と www.domain1.com の2つを同時に定義しています。
ここでは、domain1.com と www.domain1.com の2つを同時に定義しています。
access_log /var/log/httpd/domain1.com.access.log main;
アクセスログの保存形式、保存先を設定します。
ここでは、アクセスログをログフォーマットmain の形式で、/var/log/httpd/domain1.com.access.log へ保存します。
ここでは、アクセスログをログフォーマットmain の形式で、/var/log/httpd/domain1.com.access.log へ保存します。
ここでは、論理パスを使用しても良いです。その場合、論理パスのルートディレクトリは、linuxでは、/usr/share/nginx/ となります。
error_log /var/log/httpd/domain1.com.error.log;
エラーログの保存先を設定します。
ここでは、/var/log/httpd/domain1.com.error.log へ保存します。
ここでは、/var/log/httpd/domain1.com.error.log へ保存します。
ここでは、論理パスを使用しても良いです。その場合、論理パスのルートディレクトリは、linuxでは、/usr/share/nginx/ となります。
if ($http_host = domain1.com) { rewrite (.*) http://www.domain1.com$1; }
ここでは、$http_host(ホスト名)が、domain1.com(ドメイン名)のみの場合、www.domain1.com へリダイレクトします。
先のserver_nameの設定で、
domain1.com、www.domain1.comいずれも使えるように設定されています。
上記の2つのホスト名でアクセスされて違うコンテンツが表示されるのであれば良いですが、同じものが表示されるのであればSEO的に良くないので、ここでは、www.domain1.comに統一しています。
domain1.com、www.domain1.comいずれも使えるように設定されています。
上記の2つのホスト名でアクセスされて違うコンテンツが表示されるのであれば良いですが、同じものが表示されるのであればSEO的に良くないので、ここでは、www.domain1.comに統一しています。
### wordpress cache common settings. # check to do not cache # -- POST ? if ($request_method = "POST") { set $do_not_cache 1; } # -- Login or Comment or Post Editting ? if ($http_cookie ~ ^.*(comment_author_|wordpress_logged_in|wp-postpass_).*$) { set $do_not_cache 1; } # -- mobile ? if ($http_x_wap_profile ~ ^[a-z0-9\"]+) { set $do_not_cache 1; } # -- Mobile ? if ($http_profile ~ ^[a-z0-9\"]+) { set $do_not_cache 1; } # -- Kei-tai ? if ($http_user_agent ~ ^.*(2.0\ MMP|240x320|400X240|AvantGo|BlackBerry|Blazer|Cellphone|Danger|DoCoMo|Elaine/3.0|EudoraWeb|Googlebot-Mobile|hiptop|IEMobile|KYOCERA/WX310K|LG/U990|MIDP-2.|MMEF20|MOT-V|NetFront|Newt|Nintendo\ Wii|Nitro|Nokia|Opera\ Mini|Palm|PlayStation\ Portable|portalmmm|Proxinet|ProxiNet|SHARP-TQ-GX10|SHG-i900|Small|SonyEricsson|Symbian\ OS|SymbianOS|TS21i-10|UP.Browser|UP.Link|webOS|Windows\ CE|WinWAP|YahooSeeker/M1A1-R2D2|iPhone|iPod|Android|BlackBerry9530|LG-TU915\ Obigo|LGE\ VX|webOS|Nokia5800).*) { set $do_not_cache 1; } # -- Mobile ? if ($http_user_agent ~ ^(w3c\ |w3c-|acs-|alav|alca|amoi|audi|avan|benq|bird|blac|blaz|brew|cell|cldc|cmd-|dang|doco|eric|hipt|htc_|inno|ipaq|ipod|jigs|kddi|keji|leno|lg-c|lg-d|lg-g|lge-|lg/u|maui|maxo|midp|mits|mmef|mobi|mot-|moto|mwbp|nec-|newt|noki|palm|pana|pant|phil|play|port|prox|qwap|sage|sams|sany|sch-|sec-|send|seri|sgh-|shar|sie-|siem|smal|smar|sony|sph-|symb|t-mo|teli|tim-|tosh|tsm-|upg1|upsi|vk-v|voda|wap-|wapa|wapi|wapp|wapr|webc|winw|winw|xda\ |xda-).*) { set $do_not_cache 1; } # -- Kei-tai ? if ($http_user_agent ~ ^(DoCoMo/|J-PHONE/|J-EMULATOR/|Vodafone/|MOT(EMULATOR)?-|SoftBank/|[VS]emulator/|KDDI-|UP\.Browser/|emobile/|Huawei/|IAC/|Nokia|mixi-mobile-converter/)) { set $do_not_cache 1; } # -- Kei-tai ? if ($http_user_agent ~ (DDIPOCKET\;|WILLCOM\;|Opera\ Mini|Opera\ Mobi|PalmOS|Windows\ CE\;|PDA\;\ SL-|PlayStation\ Portable\;|SONY/COM|Nitro|Nintendo)) { set $do_not_cache 1; } ### wordpress cache common settings.
WordPressへの対応を設定しています。
ここでは、以下の場合にキャッシュしないように
ここでは、以下の場合にキャッシュしないように
$do_not_cache
を設定しています。- post処理中の場合
- WordPressにログイン中、コメント中、記事作成中の場合
- 携帯およびモバイル機器からのアクセスの場合
proxy_no_cache $do_not_cache; proxy_cache_bypass $do_not_cache; proxy_pass http://$host.backend; proxy_cache_key $scheme://$host$request_uri proxy_cache cache_domain1.com;
proxy_no_cache $do_not_cache;
どのような場合に応答情報をキャッシュしないかを設定します。
ブランク以降に指定するパラメータの少なくとも1つ以上の値が0でない場合は、応答情報をキャッシュしません。
ブランク以降に指定するパラメータの少なくとも1つ以上の値が0でない場合は、応答情報をキャッシュしません。
proxy_cache_bypass $do_not_cache;
どのような場合に応答情報をキャッシュ情報から返信しないかを設定します。
ブランク以降に指定するパラメータの少なくとも1つ以上の値が0でない場合は、キャッシュされた情報から応答を返信しません。
ブランク以降に指定するパラメータの少なくとも1つ以上の値が0でない場合は、キャッシュされた情報から応答を返信しません。
proxy_cache_key $scheme://$host$request_uri
キャッシュするときのキー情報を設定します。
ここで設定する情報が、キャッシュ情報を読み込むときのキー情報になります。そのため、正しく設定しないと思わぬキャッシュ情報が表示されてしまうことがあります。
ここでは、$scheme://$host$request_uriと指定しています。
ここで設定する情報が、キャッシュ情報を読み込むときのキー情報になります。そのため、正しく設定しないと思わぬキャッシュ情報が表示されてしまうことがあります。
ここでは、$scheme://$host$request_uriと指定しています。
proxy_cache cache_domain1.com;
キャッシュ用にゾーンの名前を設定します。
http部で設定したproxy_cache_pathのキャッシュゾーン名を指定します。
ゾーン名自体は、複数のlocationで使用することができます。
http部で設定したproxy_cache_pathのキャッシュゾーン名を指定します。
ゾーン名自体は、複数のlocationで使用することができます。
今回設定で、ほとんどの場合、この設定でもOKだと思います。
しかし、まだまだ設定できる情報も多いので、詳しい(設定できる)ディレクティブ情報は、nginxのホームページ( http://wiki.nginx.org/HttpProxyModule )を参照してください。
このリバースプロキシを導入すると(設定にもよりますが)かなり高速化が望めます。
もし、速度に不満のある方は、一度、試すのもありだと思います。その場合、WordpressのWP Super Cacheプラグインは、外してもOKだと思います。
(Nginxのキャッシュ機能だけを利用したい方は、さらに効率的、高速化が図れる Nginx のFastCGIキャッシュ(fastcgi cache )を使ってみた が参考になるかと思います。)
ここでは、さくらのVPS の最もリソースの少ない512プラン → 1Gプラン (無償機能UPされました) を使用しています。
さくらのVPSのお申し込みは、http://vps.sakura.ad.jp/ からどうぞ。
しかし、まだまだ設定できる情報も多いので、詳しい(設定できる)ディレクティブ情報は、nginxのホームページ( http://wiki.nginx.org/HttpProxyModule )を参照してください。
このリバースプロキシを導入すると(設定にもよりますが)かなり高速化が望めます。
もし、速度に不満のある方は、一度、試すのもありだと思います。その場合、WordpressのWP Super Cacheプラグインは、外してもOKだと思います。
(Nginxのキャッシュ機能だけを利用したい方は、さらに効率的、高速化が図れる Nginx のFastCGIキャッシュ(fastcgi cache )を使ってみた が参考になるかと思います。)
ここでは、さくらのVPS の最もリソースの少ない512プラン → 1Gプラン (無償機能UPされました) を使用しています。
さくらのVPSのお申し込みは、http://vps.sakura.ad.jp/ からどうぞ。
ご利用のブラウザは、広告ブロック(AdBlockなど) が適用となっていませんか?
このサイトでは、コンテンツの一部が非表示、あるいは、コメント、お問い合わせの投稿ができない、検索ができないことがあります。
このサイトでは、コンテンツの一部が非表示、あるいは、コメント、お問い合わせの投稿ができない、検索ができないことがあります。
関連記事 :
2012年2月4日, 4:31 PM
[…] […]
2012年5月1日, 3:00 AM
[…] […]
2012年5月22日, 4:07 PM
[…] […]
2012年7月9日, 11:11 AM
[…] […]
2014年2月27日, 2:01 PM
管理人様
こんにちは
HPを拝見させて頂きまして、勉強をさせて頂いています
私は今回、
Nginx→apache(wordpress)をそれぞれ、別サーバーで構築をしています
Nginx,apahce(wordpress)は同一セグメントで通信が出来る状態です
通信の流れとしては
Internet→(80)Nginx→(80)apahce(wordpress)
という、流れでNginxがreverse proxy且つcache サーバーとして動作させapache(wordoress)の負荷をさげてアクセスの高速化をしたいと考えています
色々と識者の皆様が公開されている情報を参考にしながら、Nginxがreverse proxyとして動作する事は確認できたのですが、Nginxのcacheのデレクトリィーには何も情報が保存されていませんでした
これは、Nginxがcahceサーバーとしては動作していなからだと思うのですが、認識に間違いなどがありましたらご指導をいただけませんでしょうか
また、Nginxをcacheサーバーとして動作させるには、どの様に設定をすればよろしいでしょうか
不躾な質問ですが、ご教授いただけますと幸いです
よろしくお願い申し上げます。
【/etc/nginx/nginx.conf】
【/etc/nginx/conf.d/proxy.conf】
2014年2月28日, 4:03 AM
tetuya0703 さん
管理人です。コメントありがとうございます。
細かく見てませんが、もっと簡単なテストから始められてはいかがでしょうか。
せっかく2台のサーバーで分散させたいのですから、単純にキャッシュサーバーとしてnginxを使えば良いはず?なのではないかと思います。
$do_not_cache などでキャッシュの有無など後で良いものは、全部とっぱらって、キャッシュの有無だけを確認されてはいかがでしょうか。
で、ログにキャッシュの有無を出力させるようにしたら良いか・・・と、それである程度デバックできるんじゃないかと・・・思います。
ログフォーマットは、こんな感じ。
$upstream_cache_status : HITが出ればキャッシュから読み込んだ証拠・・・だったと思います。
詳しくは、マニュアル読むと良いでしょう。
こんな感じでしょうでしょう。答えになっていなかったらごめんなさい。
2014年3月1日, 12:07 AM
管理人様
こんばんは
tetuya0703です
ご指導、ありがとうございました
いただいたアドバイスを元に切りわけを行いました
最初は単純なcacheサーバーとしての動作をさせる為の設定の設定のみにして
動作させた所、cacheのデレクトリィーにはcache情報が保存されました
その後、順番に設定を追加していてわかったのですが、管理人様のサイトで
wordpress用の設定で
という記載があるのですが
良く、サイト情報を確認すると、説明の部分では上記の部分が
となっていました
両方ともGET以外の指定だとは思うのですが、!=GETでは
に設定されてしまい
X-Cacheがbypassされてしまうようです
時間があればご確認頂ければと思います
ご教授ありがとうございました
2014年3月1日, 4:00 AM
tetuya0703 さん
管理人です。コメントありがとうございます。
も
も基本的に同じです。上の判定の違いについて動作確認しましたけど、いずれも 通常のファイル参照であれば、$do_not_cache に 1 がセットされることはありませんでした。
これが違う結果が出る?ということなんですよね?
んーーーーっ、詳しく設定を確認しないとわかりませんが、
$request_method , $do_not_cache をログに出力してみられたらどうでしょう。
2014年3月1日, 8:46 PM
管理人様
アドバイスありがとうございます
logに$request_method , $do_not_cacheを出力して確認したのですが
私の勘違いで、被疑箇所は
で$do_not_cacheに1が設定されるようです
$http_cookieをlogに出力したところ、wp01.domain.comのwordpressをreloadするとlogには
となります。
条件式としてcomment_author_から始まる場合は、cacheをbypassするようにしていますが、ホーム画面でreloadするとcomment_author_がcookieに記載されるようですが、これはwordpressのバージョンの問題なのでしょうか
条件式からcomment_author_を外すと、$do_not_cacheは1に競ってされず、条件はスルーされます
これはどの様に考えればよろしいでしょうか
ご教授頂けますと助かります
よろしくお願い申し上げます。
2014年3月1日, 8:58 PM
管理人様
追加で確認してみました
現状はworddpressの条件のなかで、comment_author_を削除しています
それで、logの中では$do_not_cacheは0と記録されているのですが
私のローカル環境から
curl http://wp01.domain.com –head
を実行すると
となり、”X-Cache: BYPASS”されてしまいます
# — POST or HEAD ?
の条件式を
$request_method != “GET”
から
$request_method = “POST”
に変更すると
X-Cache: HIT
になります
$do_not_cacheは1以外であれば
X-Cache: BYPASSされず、HITになるとおもうのですが
これは、何か他の問題が内在しているのでしょうか
それとも私のlogの見方が間違っているのでしょうか
ご教授頂けますと幸いです
2014年3月1日, 10:32 PM
tetuya0703 さん
管理人です。コメントありがとうございます。
ちょっと、厳しいですね。
WordPressの問題は、ちょっとバージョンから何からいろんな問題がありますから、まずは、最新バージョンでログインせずに、キャッシュを削除、クッキーを削除して確認されてはいかがでしょうか。
テストをする環境がきれいにできていないと、何が問題か整理できなくなりますから、まずは、そのあたりから、一つ一つされてはいかがでしょうか。
もう少し、ご自身で問題点を整理されてから、質問されるといろんなサイトでも皆さん回答しやすいかもです。
2014年3月2日, 5:30 PM
管理人様
こんにちは
ご指導ありがとうございます
現状の自身の環境を整理してみます
また、不明点が出たときはご指導をお願い申し上げます
2014年3月4日, 1:49 PM
tetuya0703 さん
管理人です。
コメントありがとうございます。
またコメントください。
お仕事なら、いつでもお引き受けしますよ。
2014年3月6日, 8:14 PM
管理人様
こんにちは
tetuya0703です
お仕事としての依頼では無くて恐縮です
あれから、私なりに色々と環境 お調査を進めました
まず、cookieのdo_not_cacheの件なのですがブラウザにより振る舞いが異なる事がわかりました
firefoxのばあいはhttp request headerにcookieの情報が内包されていました
具体的にはcomment_authoer等です
手元にある他のブラウザー(Safari.ie)でhttp request headerを確認した所、firefoxのようなcookieのrequestは内包されていませんでした
これは、どのブラウザーの振る舞いが正しいのでしょうか
こじんてきにはSafari、IEの振舞いの方が正しいとおもうのですが…
それと、nginxのcacheの有効期限なのですが、proxy_cache_valid 200 2hを1mに変更しても1mでcacheが削除されず古い情報がブラウザーに帰ってしまいます
これは設定の問題なのでしょうか
それともこの振る舞いがせいじょうなのでしょうか
ご教授よろしくお願いします。
2014年3月7日, 12:18 AM
tetuya0703 さん
管理人です。
コメントありがとうございます。
ブラウザの動作が正しいか?ですか?
それは、ここじゃなくってブラウザのところで確認された方が間違いないと思いますよ。
削除されずに古い情報がブラウザーに帰ってくる?ですか?
本当にそうなら、設定でしょうね。
ごめんなさい、質問の意図?が・・・・わかっていないようです。
思ったとおりにキャッシュが削除されないんですよね、それは、設定が間違っているようにおもいますけど・・・。
すみません、そのまんまのような気がして・・。