Centos 6 で、ポート 8080 に Apache、ポート 80 に Nginx を Apache のリバース プロキシとして使用しているときに、memcached に問題があります。すべての静的ファイルをキャッシュするために Memcached をインストールします。以下は、nginx 用の memcached 構成です。
server {
access_log off;
error_log logs/vhost-error_log warn;
listen 80;
server_name xxx.com www.xxx.com;
location ~* ^.+. (js|css|jpg|jpeg|png|gif|gz|tgz|bz2|tbz|mp3|ogg|swf|pdf|ico|zip|rar|iso|doc|xls|exe|ppt|txt|tar|mid|midi|wav|bmp|rtf|ogv|flv|mpeg|mpg|mpeg4|mp4|avi|wmv|docx|xlsx|pptx|3gp|7z|acc|gzip|img|m4a|m4v|mkv|mov|msi|chm|rm|w3g|w3x|log|dll)$ {
root /home/xxx/domains/xxx.com/public_html;
expires max;
set $memcached_key $uri;
memcached_pass 127.0.0.1:11211;
error_page 404 = @apache;
access_log /var/log/httpd/domains/xxx.com.log;
log_not_found off;
}
Memcached はリッスンしていますが、サイトを何度も閲覧したにもかかわらず、確立されたセッションがありません。
Every 2.0s: netstat -natp |grep :11211 Mon Mar 2 13:50:47 2015
tcp 0 0 127.0.0.1:11211 0.0.0.0:* LISTEN 10504/memcached
tcp 0 0 127.0.0.1:38126 127.0.0.1:11211 TIME_WAIT -
tcp 0 0 127.0.0.1:38124 127.0.0.1:11211 TIME_WAIT -
tcp 0 0 127.0.0.1:38144 127.0.0.1:11211 TIME_WAIT -
tcp 0 0 127.0.0.1:38127 127.0.0.1:11211 TIME_WAIT -
.....
memcached の統計は次のとおりです。
STAT pid 10504
STAT uptime 469
STAT time 1425279094
STAT version 1.4.4
STAT pointer_size 64
STAT rusage_user 0.023996
STAT rusage_system 0.067989
STAT curr_connections 5
STAT total_connections 383
STAT connection_structures 6
STAT cmd_get 145
STAT cmd_set 0
STAT cmd_flush 0
STAT get_hits 0
STAT get_misses 145
STAT delete_misses 0
STAT delete_hits 0
STAT incr_misses 0
STAT incr_hits 0
STAT decr_misses 0
STAT decr_hits 0
STAT cas_misses 0
STAT cas_hits 0
STAT cas_badval 0
STAT auth_cmds 0
STAT auth_errors 0
STAT bytes_read 10726
STAT bytes_written 181940
STAT limit_maxbytes 1073741824
STAT accepting_conns 1
STAT listen_disabled_num 0
STAT threads 4
STAT conn_yields 0
STAT bytes 0
STAT curr_items 0
STAT total_items 0
STAT evictions 0
get_miss は増えているのに、get_hit の数は増えません。何が起こっているのか理解するのを手伝ってください。よろしくお願いします。
答え1
そうですか、memcached サーバーにはデータがありません ( STAT total_items 0
)。
そのため、nginx は 145 個の項目を検索しようとしましたが、いずれも取得できませんでした。
それはまったく正しいです。Nginx
は、その設定では memcached に何も保存しません (実際には、非標準モジュールでのみそれができると思います:https://github.com/bpaquet/ngx_http_enhanced_memcached_module)。
したがって、memcached にデータを保存するプロセスを理解する必要があります。