研究了2天的nginx缓存 出现各种报错

我把配置文件修改过后还是报错

location ~ /purge(/.*)                {                allow           127.0.0.1;                allow           192.168.0.0/24;                deny            all;                proxy_cache_purge      cache_one  $host$1$is_args$args;                }
nginx: [emerg] unknown directive "proxy_cache_purge" in /home/data/websrv/nginx/conf/nginx.conf:75
nginx: [emerg] unknown directive "proxy_cache_purge

报错提示

发现模块没有安装,有的重新安装模块

安装 ngx_cache_purge-1.3.tarwget http://labs.frickle.com/files/ngx_cache_purge-2.0.tar.gztar -zxvf ngx_cache_purge-2.0.tar.gzcd /home/data/install/lnmp/nginx-1.0.15/查看版本nginx -V
[root@ceshi nginx-1.0.15]# /home/data/websrv/nginx/sbin/nginx -Vnginx version: nginx/1.0.15configure arguments: --prefix=/home/data/websrv/nginx --with-http_stub_status_module

啥配置都没 所以只能重新编译

./configure --user=nginx --group=nginx --add-module=/home/data/install/ngx_cache_purge-2.0 \ --prefix=/home/data/websrv/nginx --with-http_stub_status_module --with-http_ssl_module加模块onfiguration summary  + using system PCRE library  + using system OpenSSL library  + md5: using OpenSSL library  + sha1: using OpenSSL library  + using system zlib library  nginx path prefix: "/home/data/websrv/nginx"  nginx binary file: "/home/data/websrv/nginx/sbin/nginx"  nginx configuration prefix: "/home/data/websrv/nginx/conf"  nginx configuration file: "/home/data/websrv/nginx/conf/nginx.conf"  nginx pid file: "/home/data/websrv/nginx/logs/nginx.pid"  nginx error log file: "/home/data/websrv/nginx/logs/error.log"  nginx http access log file: "/home/data/websrv/nginx/logs/access.log"  nginx http client request body temporary files: "client_body_temp"  nginx http proxy temporary files: "proxy_temp"  nginx http fastcgi temporary files: "fastcgi_temp"  nginx http uwsgi temporary files: "uwsgi_temp"  nginx http scgi temporary files: "scgi_temp"

注意这里只要make 而不要make install

make,不要make install会覆盖                                                                                                                                                                                                 -o objs/src/http/ngx_http_postpone_filter_module.o \                src/http/ngx_http_postpone_filter_module.cgcc -c  -I src/core -I src/event -I src/event/modules -I src/os/unix -I objs -I src/http -I src/http/modules \                -o objs/src/http/modules/ngx_http_ssi_filter_module.o \                src/http/modules/ngx_http_ssi_filter_module.cgcc -c  -I src/core -I src/event -I src/event/modules -I src/os/unix -I objs -I src/http -I src/http/modules \                -o objs/src/http/modules/ngx_http_charset_filter_module.o \                src/http/modules/ngx_http_charset_filter_module.cgcc -c  -I src/core -I src/event -I src/event/modules -I src/os/unix -I objs -I src/http -I src/http/modules \                -o objs/src/http/modules/ngx_http_userid_filter_module.o \                src/http/modules/ngx_http_userid_filter_module.cgcc -c  -I src/core -I src/event -I src/event/modules -I src/os/unix -I objs -I src/http -I src/http/modules \                -o objs/src/http/modules/ngx_http_autoindex_module.o \                src/http/modules/ngx_http_autoindex_module.cgcc -c  -I src/core -I src/event -I src/event/modules -I src/os/unix -I objs -I src/http -I src/http/modules \                -o objs/src/http/modules/ngx_http_auth_basic_module.o \                src/http/modules/ngx_http_auth_basic_module.cmake[1]: Leaving directory `/home/data/install/lnmp/nginx-1.0.15'make -f objs/Makefile manpagemake[1]: Entering directory `/home/data/install/lnmp/nginx-1.0.15'sed -e "s|%%PREFIX%%|/home/data/websrv/nginx|" \                -e "s|%%PID_PATH%%|/home/data/websrv/nginx/logs/nginx.pid|" \                -e "s|%%CONF_PATH%%|/home/data/websrv/nginx/conf/nginx.conf|" \                -e "s|%%ERROR_LOG_PATH%%|/home/data/websrv/nginx/logs/error.log|" \                < man/nginx.8 > objs/nginx.8make[1]: Leaving directory `/home/data/install/lnmp/nginx-1.0.15'

替换nginx二进制文件

[root@ceshi nginx-1.0.15]# killall nginx[root@ceshi nginx-1.0.15]# cp ./objs/nginx /home/data/websrv/nginx/sbin/cp:是否覆盖"/home/data/websrv/nginx/sbin/nginx"? yservice nginx start这次就没报错了    location ~ /purge(/.*)                {                allow           127.0.0.1;                allow           192.168.0.0/24;                deny            all;                proxy_cache_purge   cache_one   $host$1$is_args$args;                }                access_log      off;        }Starting nginx daemon: nginxstarted.

正常启动nginx了

当是发现 nginx 页面是500

500 Internal Server Error
[root@ceshi nginx-1.0.15]#  ulimit -n655360[root@ceshi nginx-1.0.15]#  ulimit -n 65535[root@ceshi nginx-1.0.15]# cat /proc/sys/fs/file-max65535

解决,也可以直接改配置文件

vi /etc/security/limits.conf在文件末加上: *                soft  nofile         65535 *                hard  nofile         65535

127.0.0.1 - - [06/Nov/2013:01:52:05 +0800] "GET /static_gmd/p_w_picpaths/shadow_bg.jpg HTTP/1.0" 500 0 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.66 Safari/537.36"

服务器端会判断上次的 config 时间是否比 If-Modified-Since 晚。如果自上次 request 之后又更新了 config,那么服务器就会返回完整的内容;如果期间没有更新 config,那么服务器就没必要返回完整的内容,只需要向客户端发送一个 304 Not Modified 状态码就可以了。

这样就可以了

[root@ceshi websrv]# cd cache/[root@ceshi cache]# ll总用量 4drwx------. 3 coovanftp coovanftp 4096 11月  20 01:17 b[root@ceshi cache]# cd b/[root@ceshi b]# ll总用量 4drwx------. 2 coovanftp coovanftp 4096 11月  20 01:18 9b[root@ceshi b]# cd 9b/[root@ceshi 9b]# ll总用量 4-rw-------. 1 coovanftp coovanftp 800 11月  20 01:18 beffd3cafb1fbf7c3b53aa486005b9bb

但是又发现一个问题

[root@ceshi nginx]# netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'TIME_WAIT 2735ESTABLISHED 6cp        0      0 192.168.0.21:80             192.168.0.21:27544          TIMEtcp        0      0 192.168.0.21:80             192.168.0.21:26458          TIMEtcp        0      0 192.168.0.21:80             192.168.0.21:27665          TIMEtcp        0      0 192.168.0.21:80             192.168.0.21:26601          TIMEtcp        0      0 192.168.0.21:80             192.168.0.21:27333          TIMEtcp        0      0 192.168.0.21:80             192.168.0.21:26498          TIMEtcp        0      0 192.168.0.21:80             192.168.0.21:25969          TIMEtcp        0      0 192.168.0.21:80             192.168.0.21:26061          TIMEtcp        0      0 192.168.0.21:80             192.168.0.21:26777          TIMEtcp        0      0 192.168.0.21:80             192.168.0.21:26960          TIMEtcp        0      0 192.168.0.21:80             192.168.0.21:27391          TIMEtcp        0      0 192.168.0.21:80             192.168.0.21:26568          TIMEtcp        0      0 192.168.0.21:80             192.168.0.21:26525发现系统存在大量TIME_WAIT状态的连接,通过调整内核参数解决,vi /etc/sysctl.conf编辑文件,加入以下内容:net.ipv4.tcp_syncookies = 1net.ipv4.tcp_tw_reuse = 1net.ipv4.tcp_tw_recycle = 1net.ipv4.tcp_fin_timeout = 30                                           然后执行 /sbin/sysctl -p 让参数生效。[root@ceshi nginx]# netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'TIME_WAIT 1ESTABLISHED 4[root@ceshi nginx-1.0.15]# netstat -anpltActive Internet connections (servers and established)Proto Recv-Q Send-Q Local Address               Foreign Address             Stat                                                                                                                                                             e       PID/Program nametcp        0      0 127.0.0.1:9000              0.0.0.0:*                   LIST                                                                                                                                                             EN      20565/php-fpm.conf)tcp        0      0 0.0.0.0:3306                0.0.0.0:*                   LIST                                                                                                                                                             EN      16446/mysqldtcp        0      0 0.0.0.0:80                  0.0.0.0:*                   LIST                                                                                                                                                             EN      25492/nginx.conftcp        0      0 0.0.0.0:22                  0.0.0.0:*                   LIST                                                                                                                                                             EN      1768/sshdtcp        0      0 127.0.0.1:25                0.0.0.0:*                   LIST                                                                                                                                                             EN      1150/mastertcp        0     52 192.168.0.21:22             192.168.0.224:51384         ESTA                                                                                                                                                             BLISHED 22344/1tcp        0      0 192.168.0.21:22             192.168.0.224:52369         ESTA                                                                                                                                                             BLISHED 22398/sshd: root@notcp        0      0 192.168.0.21:22             192.168.0.224:61398         ESTA                                                                                                                                                             BLISHED 20420/0tcp        0      0 192.168.0.21:22             192.168.0.224:62132         ESTA                                                                                                                                                             BLISHED 20773/sshd: root@notcp        0      0 192.168.0.21:80             192.168.0.224:53048         TIME                                                                                                                                                             _WAIT   -tcp        0      0 :::22                       :::*                        LIST                                                                                                                                                             EN      1768/sshdtcp        0      0 ::1:25                      :::*                        LIST                                                                                                                                                             EN      1150/masterdrwx------. 2 coovanftp root 4096 11月 20 09:56 proxy_cache_pathdrwx------. 2 coovanftp root 4096 11月 20 09:56 proxy_temp[root@ceshi nginx]# netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'TIME_WAIT 1ESTABLISHED 4[root@ceshi cache]# ll总用量 8drwx------. 3 coovanftp coovanftp 4096 11月 20 11:55 adrwx------. 3 coovanftp coovanftp 4096 11月 20 11:54 b

最后附上配置

user coovanftp coovanftp;worker_processes 8;error_log  logs/error.log  crit;worker_rlimit_nofile 65535;events{  use epoll;  worker_connections 65535;}http {    include       mime.types;    default_type  application/octet-stream;    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '                      '$status $body_bytes_sent "$http_referer" '                      '"$http_user_agent" "$http_x_forwarded_for"';    server_tokens off;    access_log  logs/access.log  main;    sendfile        on;    tcp_nopush  on;    tcp_nodelay on;    keepalive_timeout  60;    gzip  on;    gzip_types       text/plain application/x-javascript text/css application/xml;    server_names_hash_bucket_size 2048;    client_header_buffer_size 2048k;    large_client_header_buffers 4 2048k;    client_max_body_size 500m;    client_body_buffer_size 4048k;    fastcgi_buffer_size         2048k;    fastcgi_buffers             6 2048k;    fastcgi_busy_buffers_size   2048k;    fastcgi_temp_file_write_size        2048k;    fastcgi_intercept_errors    on;    proxy_connect_timeout 60;    proxy_read_timeout 60;    proxy_send_timeout 60;    proxy_buffer_size 2048k;    proxy_buffers 4 2048k;    proxy_busy_buffers_size 2048k;    #proxy_cache_valid 200 304 302 3s;    proxy_temp_file_write_size 4096k;    proxy_temp_path /home/data/websrv/nginx/temp_dir;    proxy_cache_path /home/data/websrv/nginx/cache levels=1:2 keys_zone=cache_one:200m inactive=1d max_size=10g;#  upstream指令用于设置一组可以在proxy_pass和fastcgi_pass指令中使用的代理服务器,默认的负载均衡方式为轮询.upstream模块中的server指令用于指定后端服务器的名称和参数,服务器的名称可以是一个域名,一个ip地址,端口号或者UNIX Socket.       #而在server{..}虚拟主机内,可以通过proxy_pass和fastcgi_pass指令设置进行反向代理的upstream服务器集群      # proxy_set_header指令用于在向反向代理的后端WEB服务器发起请求时添加指定的header头信息       #当后端WEB服务器上有多个基于域名的虚拟主机时,要通过添加header头信息Host,用于指定请求的域名,这样后端服务器才能识别该反向代理访问请求是由那一个虚拟主机来处理       #使用反向代理之后,后端web服务器就不能直接$_SERVER['REMOTE_ADDR']变量来获取用户的真实ip了,通过$_SERVER['REMOTE_ADDR']获得的将是负载均衡器的ip.这时,就要通过Nginx反向代理时添加Header头信息X-Forwarded-For,让后端web服务器能够通过$_SERVER['HTTP_X_FORWARDED_FOR']获取到用户的真实ip                                   #nginx的proxy_cache相关指令集    # 1.proxy_cache:该指令用于设置那个缓存区将被使用    # 2.proxy_cache_path:该指令用于设置缓存文件的存放路径   #示例:proxy_cache_path /web/server1 levels=1:2 keys_zone=cache_one:500m inactive=1d max_size=30g  # 该指令只能在http标签内配置,levels指定该缓存空间有两层hash目录,第一层为1个字母,第二层为2个字母;  # keys_zone参数用来为这个缓存区起名,500m指内存缓存空间大小为500MB;inactive的1d指如果缓存数据在1天内没有被访问,将被删除;max_size的30g是指硬盘缓存空间为30GB     #3.proxy_cache_methods:该指令用于设置缓存那些http方法,默认缓存get和head,不缓存post     #4.proxy_cache_min_uses:该指令用于设置缓存的最小使用次数,默认为1     #5.proxy_cache_valid:该指令用于对不同返回状态码的url设置不同的缓存时间    upstream iis{      server  192.168.0.21;      }server {    listen       80;    server_name  192.168.0.21;    location / {        index  index.php index.html;        proxy_pass http://iis;        proxy_set_header Host  $host;        proxy_set_header X-Forwarded-For  $remote_addr;        proxy_next_upstream http_502 http_504 error timeout invalid_header;        proxy_cache cache_one;        proxy_cache_valid 200 5m;        proxy_cache_valid 304 5m;        proxy_cache_valid 301 302 1h;        proxy_cache_valid any 5m;        proxy_cache_key http://$host$uri$is_args$args;    }    error_page   500 502 503 504  /50x.html;    location = /50x.html {        root   /usr/share/nginx/html;    }}}