NGINX 反向代理和代理缓存


反向代理

正向代理

是指客户端与目标服务器之间增加一个代理服务器,客户端直接访问代理服务器,在由代理服务器访问目标服务器并返回客户端并返回 。这个过程当中客户端需要知道代理服务器地址,并配置连接。

# 正向代理
location = /baidu.html {
    proxy_pass http://www.baidu.com;
}

反向代理

是指客户端访问目标服务器,在目标服务内部有一个统一接入网关将请求转发至后端真正处理的服务器并返回结果。这个过程当中客户端不需要知道代理服务器地址,代理对客户端而言是透明的。

location = /fox {
    proxy_pass http://127.0.0.1:8080/;
}

代理相关参数

proxy_pass           # 代理服务
proxy_redirect off;   # 是否允许重定向
proxy_set_header Host $host; #  header 参数至后端服务
proxy_set_header X-Forwarded-For $remote_addr; # 设置request header 即客户端IP地址
proxy_connect_timeout 90; # 连接代理服务超时时间
proxy_send_timeout 90; # 请求发送最大时间
proxy_read_timeout 90;  # 读取最大时间
proxy_buffer_size 4k; 
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k; 
proxy_temp_file_write_size 64k;

代理缓存

代理缓存,获取服务器端内容进行缓存

#proxy_cache_path 缓存路径
#levels 缓存层级及目录位数
#keys_zone 缓存区内存大小
#inactive 有效期
proxy_cache_path /tmp/nginx/cache levels=1:2 keys_zone=my_cache:10m max_size=10g inactive=60m use_temp_path=off;

server {
        listen 80;
        server_name  localhost *.yuanma.com;

        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_pass http://backend/;
            proxy_cache my_cache;

            #以全路径md5值做做为Key
            proxy_cache_key $host$uri$is_args$args;
            proxy_cache_valid 200 304 302 1d;
            }
}
父元素 名称 描述
http proxy_cache_path 指定缓存区的根路径
levels 缓存目录层级最高三层,每层1~2个字符表示。如1 : 1 : 2 表示 三层。
keys_zone 缓存块名称 及内存块大小。如 cache_item: 500m 。表示声 明一个名为cache_item 大小为500m。超出大小后最早的数 据将会被清除。
inactive 最长闲置时间 如:10d 如果一个数据被闲置10天将会被清除
max_size 缓存区硬盘最大值。超出闲置数据将会被清除
location proxy_cache 指定缓存区,对应keys_zone 中设置的值
proxy_cache_key 通过参数拼装缓存key 如:$host$uri$is_args$args 则会以全路径md5值做做为Key
proxy_cache_valid 为不同的状态码设置缓存有效期

缓存清除 ,添加ngx_cache_purge模块

#下载ngx_cache_purge 模块包
wget http://labs.frickle.com/files/ngx_cache_purge-2.3.tar.gz
#查看已安装模块
./sbin/nginx -V
#进入nginx安装包目录 重新构建 --add-module为模块解压的全路径
./configure --prefix=/usr/local/nginx --with-http_stub_status_module --withhttp_ssl_module --with-debug --add-module=/root/ngx_cache_purge-2.3
make && make install
make upgrade

清除缓存

location ~ /clear(/.*) {
    #允许访问的IP
    allow 192.168.3.1;
    #禁止访问的IP
    deny all;
    #配置清除指定缓存区和路径(与proxy_cache_key一致)
    proxy_cache_purge my_cache $host$1$is_args$args;
}