正向代理
正向代理类似一个跳板机,代理访问外部资源比如我们国内访问谷歌,直接访问访问不到,我们可以通过一个正向代理服务器,请求发到代理服,代理服务器能够访问谷歌,这样由代理去谷歌取到返回数据,再返回给我们,这样我们就能访问谷歌了正向代理的用途:(1)访问原来无法访问的资源,如google(2) 可以做缓存,加速访问资源(3)对客户端访问授权,上网进行认证(4)代理可以记录用户访问记录(上网行为管理),对外隐藏用户信息
反向代理
反向代理(Reverse Proxy)实际运行方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个服务器反向代理的作用:(1)保证内网的安全,阻止web攻击,大型网站,通常将反向代理作为公网访问地址,Web服务器是内网(2)负载均衡,通过反向代理服务器来优化网站的负载
对比
正向代理即是客户端代理, 代理客户端, 服务端不知道实际发起请求的客户端.反向代理即是服务端代理, 代理服务端, 客户端不知道实际提供服务的服务端
模块
ngx_http_proxy_module代理syntax: proxy_pass URL; #代理的后端服务器URLDefault:Conetxt: location,if in location,limit_cxcpt缓冲区Syntax: proxy_buffering on | off;Default: proxy_buffering on; #缓冲开关Context: http, server, locationproxy_buffering开启情况下,nginx会把后端返回的内容先放到缓冲区当中,然后再返回给客户端(边收边传,不是全部接收再传给客户端)Syntax: proxy_buffer_size size;Default: proxy_buffer_size 4k|8k; #缓冲区大小Context: http, server, locationSyntax: proxy_buffers number size;Default: proxy_buffers 8 4k|8k; #缓冲区数量Context: http, server, locationSyntax: proxy_busy_buffers_size size;Default: proxy_busy_buffers_size 8k|16k; #忙碌的缓冲区大小,控制同时传递给客户端的buffer数量Context: http, server, locationSyntax: 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, locationSyntax: proxy_read_timeout time;Default: proxy_read_timeout 60s;Context: http, server, locationSyntax: 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 #转发者ip192.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: httpexample: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, locationproxy_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;}}