Nginx Purge清除(proxy_cache)缓存配置

2019年6月28日

Nginx 清除proxy_cache 缓存 之 ngx_cache_purge模块 ngx_cache_purge 此模块不包含在 Nginx 的源码发布版中 属于第三方提供 使用此功能必须在编译时将 ngx_cache_purge 编译进入Nginx 的源码中 具体方法参见 编译安装Nginx

配置如下: (红色部分)

cat /usr/local/nginx/nginx.conf
#user www www;
worker_processes  4;

events {
        use epoll;
        worker_connections  4096;
}

http {
        include mime.types;
        include proxy.conf;
        default_type application/octet-stream;
        #charset utf-8;
        server_names_hash_bucket_size 128;
        client_header_buffer_size 32k;
        large_client_header_buffers 4 32k;
        client_max_body_size 32m;
        log_format main '$host $remote_addr - $remote_user [$time_local] "$request" '
                        '$status $body_bytes_sent "$http_referer" '
                        '"$http_user_agent" "$http_x_forwarded_for" '
                        '"$upstream_addr" "$upstream_http_host"';

        sendfile on;
        tcp_nopush on;
        keepalive_timeout 30;
        gzip on;
        gzip_min_length  1k;
        #gzip_buffers     4 1
        gzip_http_version 1.0;
        gzip_comp_level 5;
        gzip_types text/plain application/x-javascript text/css application/xml;
        gzip_vary on;
        #proxy_temp_file_write_size 128k;
        proxy_temp_path /var/log/nginx/proxy_temp/proxy_temp_dir;
        proxy_cache_path /var/log/nginx/proxy_temp/cache levels=1:2 keys_zone=cache:10m max_size=100m;
        #proxy_cache_key "$scheme://$host$uri";
        limit_req_zone $binary_remote_addr zone=allips:10m rate=15r/s;
        limit_conn_zone $binary_remote_addr zone=one:10m;
        error_log /usr/local/nginx/logs/error.log crit;
        access_log  /usr/local/nginx/logs/access.log;
        

        upstream backend {
                server 127.0.0.1:8000;
        }

        include sites/*.conf;
}

sites/default.conf

server {
        listen 80;
        server_name www.world-alive.xyz;
        access_log /usr/local/nginx/logs/www.world-alive.xyz-access.log main;
        error_log /usr/local/nginx/logs/www.world-alive.xyz-error.log crit;
        
        #清除缓存区域(purge区域一定要在静态缓存区域的上面,否则会报错404错误)
        location ~ /purge(/.*) {
                #allow Public IP;
                #deny  all;
                allow all;
                proxy_cache_purge cache $host$1$is_args$args;
                #$host$1$is_args$args 这个参数不要去更改他,否则会报错,相对应的在 静态缓存区域必须有对应的可以参数 proxy_cache_key    $host$uri$is_args$args;
        }

        location ~* .(jpg|jpeg|gif|png|js|css|ico)$ {
                        proxy_set_header Host $host;
                        proxy_set_header X-Real-IP $remote_addr;
                        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                        expires 86400;
                        proxy_cache cache;
                        proxy_cache_valid 200 302 10m;
                        proxy_cache_valid 404 1m;
                        proxy_cache_use_stale error timeout invalid_header updating http_500 http_502 http_503 http_504;
                        proxy_cache_key $host$uri$is_args$args; #这个参数必须有,否则在清除缓存的时候会报错
                        add_header Nginx-Cache "$upstream_cache_status"; #添加响应头“$upstream_cache_status命中缓存信息, nginx-cache(可以缓存其他名字)
                        proxy_pass http://backend;
         }

        location / {
                proxy_set_header Host $host;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header X-Proxy-Protocol $scheme;
                client_max_body_size 64m;
                client_body_buffer_size 256k;
                proxy_connect_timeout 120;
                proxy_send_timeout 120;
                proxy_read_timeout 120;
                proxy_buffer_size 8k;
                proxy_buffers 4 32k;
                proxy_busy_buffers_size 64k;
                proxy_temp_file_write_size 64k;
                proxy_pass http://backend;

        }

}

注意:

       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

没有评论

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注