正向代理
正向代理类似一个跳板机,代理访问外部资源
比如我们国内访问谷歌,直接访问访问不到,我们可以通过一个正向代理服务器,请求发到代理服,代理服务器能够访问谷歌,这样由代理去谷歌取到返回数据,再返回给我们,这样我们就能访问谷歌了
正向代理的用途:
(1)访问原来无法访问的资源,如google
(2) 可以做缓存,加速访问资源
(3)对客户端访问授权,上网进行认证
(4)代理可以记录用户访问记录(上网行为管理),对外隐藏用户信息
反向代理
反向代理(Reverse Proxy)实际运行方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个服务器
反向代理的作用:
(1)保证内网的安全,阻止web攻击,大型网站,通常将反向代理作为公网访问地址,Web服务器是内网
(2)负载均衡,通过反向代理服务器来优化网站的负载
对比
正向代理即是客户端代理, 代理客户端, 服务端不知道实际发起请求的客户端.
反向代理即是服务端代理, 代理服务端, 客户端不知道实际提供服务的服务端
模块
ngx_http_proxy_module
代理
syntax: proxy_pass URL; #代理的后端服务器URL
Default:
Conetxt: location,if in location,limit_cxcpt
缓冲区
Syntax: proxy_buffering on | off;
Default: proxy_buffering on; #缓冲开关
Context: http, server, location
proxy_buffering开启情况下,nginx会把后端返回的内容先放到缓冲区当中,然后再返回给客户端(边收边传,不是全部接收再传给客户端)
Syntax: proxy_buffer_size size;
Default: proxy_buffer_size 4k|8k; #缓冲区大小
Context: http, server, location
Syntax: proxy_buffers number size;
Default: proxy_buffers 8 4k|8k; #缓冲区数量
Context: http, server, location
Syntax: proxy_busy_buffers_size size;
Default: proxy_busy_buffers_size 8k|16k; #忙碌的缓冲区大小,控制同时传递给客户端的buffer数量
Context: http, server, location
Syntax: proxy_set_header field value;
Default: proxy_set_header Host $proxy_host; #设置真实客户端地址
proxy_set_header Connection close;
Context: http, server, location
超时
Syntax: proxy_connect_timeout time;
Default: proxy_connect_timeout 60s; #链接超时
Context: http, server, location
Syntax: proxy_read_timeout time;
Default: proxy_read_timeout 60s;
Context: http, server, location
Syntax: proxy_send_timeout time; #进程向fastcgi进程发送requset的整个过程
Default: proxy_send_timeout 60s;
Context: http, server, location
案例:
location / {
proxy_pass http://192.168.8.11:80; #转发到业务服务器
proxy_redirect default; #转发时使用默认端口
proxy_set_header Host $http_host;
#转发时是不是要设置http头部
proxy_set_header X-Real-IP $remote_addr;
#转发时设计http头部,添加真实主机ip
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
#转发时也把转发服务器的ip告诉服务器
proxy_connect_timeout 60s;
proxy_read_timeout 60s;
proxy_send_timeout 60;
#三个代理器面对的客户是否断开
#三个代理器面对的服务器是否断开
proxy_buffering on;
proxy_buffer_size 32k;
proxy_buffers 4 128k;
proxy_busy_buffers_size 256k;
#代理器开启缓冲区的数量与大小,用于存储http头部信息
}
日志:
192.168.8.12 - - [16/Dec/2021:17:40:25 +0800] "GET / HTTP/1.0" 304 0 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.93 Safari/537.36" "192.168.8.1"
192.168.8.12 #转发者ip
192.168.8.1 #真实访问者ip
proxy缓存
缓存开关
Syntax: proxy_cache zone | off;
Default: proxy_cache off;
Context: http, server, location
代理缓存
Syntax: proxy_cache_path path [levels=levels] [use_temp_path=on|off] keys_zone=name:size [inactive=time] [max_size=size] [min_free=size] [manager_files=number] [manager_sleep=time] [manager_threshold=time] [loader_files=number] [loader_sleep=time] [loader_threshold=time] [purger=on|off] [purger_files=number] [purger_sleep=time] [purger_threshold=time];
Default: —
Context: http
example:proxy_cache_path /data/nginx/cache levels=1:2 keys_zone=noe:10m;
#proxy_cache_path /data/nginx/cache 代理器缓存路径
#levels=1:2 #在他下面分两级目录,每一次缓存是一个主目录,下面有两级目录
#keys_zone=one:10m; #这个one名字自己是缓存开关定义,10M大小
缓存维度
Syntax: proxy_cache_key string;
#定义缓存唯一key,通过唯一key来进行hash存取,缓存文件名
Default: proxy_cache_key $scheme$proxy_host$request_uri;
Context: http, server, location
缓存过期
Syntax: proxy_cache_valid [code ...] time;
Default: —
Context: http, server, location
proxy_cache_valid 200 302 10m;
proxy_cache_valid 404 1m;
案例
http {
proxy_cache_path /app/jiangzilong/cache levels=1:2 keys_zone=proxy_cache:10m max_size=10g inactive=60m use_temp_path=off;
#必须填写到http层
#存储路径proxy_cache_path /app/jiangzilong/cache
#缓存格式,创建子目录,并在目录下存放,类似创建小组,小组里面再放东西 levels=1:2
#key名字与大小 keys_zone=proxy_cache:10m
#总大小 max_size=10g
#不活跃的60分钟清除 inactive=60m
#使用临时文件关闭 use_temp_path=off
...
location / {
proxy_cache proxy_cache; #与上面keys_zone=proxy_cache名字对应
proxy_cache_valid 200 304 12h; #对200 204 缓存12小时
proxy_cache_valid any 10m; #其他缓存10分钟
proxy_cache_key $host$url$is_args$args;
add_header Nginx-Cache "$upstream_cache_status"; #缓存状态回复
proxy_next_upstream error timeout invalid_header http_500 http_501 http_502 http_503 http_504;
}
}