正向代理
  1. 正向代理类似一个跳板机,代理访问外部资源
  2. 比如我们国内访问谷歌,直接访问访问不到,我们可以通过一个正向代理服务器,请求发到代理服,代理服务器能够访问谷歌,这样由代理去谷歌取到返回数据,再返回给我们,这样我们就能访问谷歌了
  3. 正向代理的用途:
  4. 1)访问原来无法访问的资源,如google
  5. 2 可以做缓存,加速访问资源
  6. 3)对客户端访问授权,上网进行认证
  7. 4)代理可以记录用户访问记录(上网行为管理),对外隐藏用户信息

反向代理
  1. 反向代理(Reverse Proxy)实际运行方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个服务器
  2. 反向代理的作用:
  3. 1)保证内网的安全,阻止web攻击,大型网站,通常将反向代理作为公网访问地址,Web服务器是内网
  4. 2)负载均衡,通过反向代理服务器来优化网站的负载

对比
  1. 正向代理即是客户端代理, 代理客户端, 服务端不知道实际发起请求的客户端.
  2. 反向代理即是服务端代理, 代理服务端, 客户端不知道实际提供服务的服务端

模块
  1. ngx_http_proxy_module
  2. 代理
  3. syntax proxy_pass URL; #代理的后端服务器URL
  4. Default:
  5. Conetxt: location,if in location,limit_cxcpt
  6. 缓冲区
  7. Syntax: proxy_buffering on | off;
  8. Default: proxy_buffering on; #缓冲开关
  9. Context: http, server, location
  10. proxy_buffering开启情况下,nginx会把后端返回的内容先放到缓冲区当中,然后再返回给客户端(边收边传,不是全部接收再传给客户端)
  11. Syntax: proxy_buffer_size size;
  12. Default: proxy_buffer_size 4k|8k; #缓冲区大小
  13. Context: http, server, location
  14. Syntax: proxy_buffers number size;
  15. Default: proxy_buffers 8 4k|8k; #缓冲区数量
  16. Context: http, server, location
  17. Syntax: proxy_busy_buffers_size size;
  18. Default: proxy_busy_buffers_size 8k|16k; #忙碌的缓冲区大小,控制同时传递给客户端的buffer数量
  19. Context: http, server, location
  20. Syntax: proxy_set_header field value;
  21. Default: proxy_set_header Host $proxy_host; #设置真实客户端地址
  22. proxy_set_header Connection close;
  23. Context: http, server, location
  24. 超时
  25. Syntax: proxy_connect_timeout time;
  26. Default: proxy_connect_timeout 60s; #链接超时
  27. Context: http, server, location
  28. Syntax: proxy_read_timeout time;
  29. Default: proxy_read_timeout 60s;
  30. Context: http, server, location
  31. Syntax: proxy_send_timeout time; #进程向fastcgi进程发送requset的整个过程
  32. Default: proxy_send_timeout 60s;
  33. Context: http, server, location

案例:
  1. location / {
  2. proxy_pass http://192.168.8.11:80; #转发到业务服务器
  3. proxy_redirect default; #转发时使用默认端口
  4. proxy_set_header Host $http_host;
  5. #转发时是不是要设置http头部
  6. proxy_set_header X-Real-IP $remote_addr;
  7. #转发时设计http头部,添加真实主机ip
  8. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  9. #转发时也把转发服务器的ip告诉服务器
  10. proxy_connect_timeout 60s;
  11. proxy_read_timeout 60s;
  12. proxy_send_timeout 60;
  13. #三个代理器面对的客户是否断开
  14. #三个代理器面对的服务器是否断开
  15. proxy_buffering on;
  16. proxy_buffer_size 32k;
  17. proxy_buffers 4 128k;
  18. proxy_busy_buffers_size 256k;
  19. #代理器开启缓冲区的数量与大小,用于存储http头部信息
  20. }

日志:
  1. 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"
  2. 192.168.8.12 #转发者ip
  3. 192.168.8.1 #真实访问者ip

proxy缓存
  1. 缓存开关
  2. Syntax: proxy_cache zone | off;
  3. Default: proxy_cache off;
  4. Context: http, server, location
  5. 代理缓存
  6. 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];
  7. Default:
  8. Context: http
  9. exampleproxy_cache_path /data/nginx/cache levels=1:2 keys_zone=noe:10m;
  10. #proxy_cache_path /data/nginx/cache 代理器缓存路径
  11. #levels=1:2 #在他下面分两级目录,每一次缓存是一个主目录,下面有两级目录
  12. #keys_zone=one:10m; #这个one名字自己是缓存开关定义,10M大小
  13. 缓存维度
  14. Syntax: proxy_cache_key string;
  15. #定义缓存唯一key,通过唯一key来进行hash存取,缓存文件名
  16. Default: proxy_cache_key $scheme$proxy_host$request_uri;
  17. Context: http, server, location
  18. 缓存过期
  19. Syntax: proxy_cache_valid [code ...] time;
  20. Default:
  21. Context: http, server, location
  22. proxy_cache_valid 200 302 10m;
  23. proxy_cache_valid 404 1m;

案例
  1. http {
  2. proxy_cache_path /app/jiangzilong/cache levels=1:2 keys_zone=proxy_cache:10m max_size=10g inactive=60m use_temp_path=off;
  3. #必须填写到http层
  4. #存储路径proxy_cache_path /app/jiangzilong/cache
  5. #缓存格式,创建子目录,并在目录下存放,类似创建小组,小组里面再放东西 levels=1:2
  6. #key名字与大小 keys_zone=proxy_cache:10m
  7. #总大小 max_size=10g
  8. #不活跃的60分钟清除 inactive=60m
  9. #使用临时文件关闭 use_temp_path=off
  10. ...
  11. location / {
  12. proxy_cache proxy_cache; #与上面keys_zone=proxy_cache名字对应
  13. proxy_cache_valid 200 304 12h; #对200 204 缓存12小时
  14. proxy_cache_valid any 10m; #其他缓存10分钟
  15. proxy_cache_key $host$url$is_args$args;
  16. add_header Nginx-Cache "$upstream_cache_status"; #缓存状态回复
  17. proxy_next_upstream error timeout invalid_header http_500 http_501 http_502 http_503 http_504;
  18. }
  19. }