反向代理配置参数

proxy_pass 指令

  1. BASH
  2. proxy_pass;
  3. #用来设置将客户端请求转发给的后端服务器的主机,可以是主机名、IP地址:端口的方式
  4. #必须要指定端口
  5. #也可以代理到预先设置的主机群组,需要模块ngx_http_upstream_module支持
  6. 示例
  7. 此代理起到了映射到作用,就是将 proxy_pass 定义的 URL 映射到 location 指定定义的目录,并不是将 location
  8. 定义的目录追加到 proxy_pass 定义的 URL 下。
  9. location /web {
  10. index index.html;
  11. proxy_pass http://10.0.0.18:8080; #无 / 符号,需要将location后面url 附加到
  12. proxy_pass 指定的是 URL 地址,类似于 root 的作用。
  13. #proxy_pass指定的URI不带斜线将访问的/web,等于访问后端服务器http://10.0.0.18:8080/web/index.html,即后端服务器配置的站点根目录要有web目录才可以被访问
  14. # http://nginx/web/index.html ==> http://10.0.0.18:8080/web/index.html
  15. proxy_pass http://10.0.0.18:8080/; #有 / 符号,相当于置换,即访问 /web 时实际返回定义的 URL,不会再追加。
  16. proxy_pass后面uri内容.类似于alias
  17. #proxy_pass指定的URI带斜线,等于访问后端服务器的http://10.0.0.18:8080/index.html 内容返回给客户端
  18. } # http://nginx/web/index.html ==> http://10.0.0.18:8080
  19. #重启Nginx测试访问效果:
  20. curl -L http://www.dingchen.local/web
  21. #如果location定义其uri时使用了正则表达式模式,则proxy_pass之后必须不能使用uri; 用户请求时传
  22. #递的uri将直接附加至后端服务器之后
  23. server {
  24. ...
  25. server_name HOSTNAME;
  26. location ~|~* /uri/ {
  27. proxy_pass http://host:port; #proxy_pass后面的url 不能加/
  28. }
  29. ...
  30. }
  31. http://HOSTNAME/uri/ --> http://host/uri/

隐藏后端服务器相应头部信息

BASH
proxy_hide_header field;
#用于nginx作为反向代理的时候,在返回给客户端http响应时,隐藏后端服务器相应头部的信息,可以设置在http,server或location块,
#示例: 隐藏后端服务器ETag首部字段
 location /web {
   index index.html;
   proxy_pass http://10.0.0.18:8080/; 
   proxy_hide_header ETag;
 }

设置选项报文中不传送给后端服务器的的参数

BASH
proxy_pass_header field;
#默认nginx在响应报文中不传递后端服务器的首部字段Date, Server, X-Pad, X-Accel等参数,如果
#要传递的话则要使用 proxy_pass_header field声明将后端服务器返回的值传递给客户端
#field 首部字段大小不敏感
#示例:透传后端服务器的Server和Date首部,同时不再显示前端服务器的Server字段
proxy_pass_header Date;

是否向后端发送实体部分

BASH
proxy_pass_request_body on | off; 
#是否向后端服务器发送HTTP实体部分,可以设置在http,server或location块,默认即为开启

是否将头部发送给后端服务器

BASH
proxy_pass_request_headers on | off; 
#是否将客户端的请求头部转发给后端服务器,可以设置在http,server或location块,默认即为开启

将客户端地址进行穿透,发送给后端的 web 服务器,在后端的 web 服务器可以查看到前端客户端请求的 IP 地址。

实现前端的头部内容直接转发给后端服务器,让后端服务器获取客户端的真实 IP 地址。

BASH
proxy_set_header; 
#可更改或添加客户端的请求头部信息内容并转发至后端服务器,比如在后端服务器想要获取客户端的真实IP的时候,就要更改每一个报文的头部
#示例: 
#proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
$proxy_add_x_forwarded_for
the “X-Forwarded-For” client request header field with the $remote_addr variable appended to it, separated by a comma. If the “X-Forwarded-For” field is not present in the client request header, the $proxy_add_x_forwarded_for variable is equal to the $remote_addr variable.proxy_set_header X-Real-IP  $remote_addr;  

#添加HOST到报文头部,如果客户端为NAT上网那么其值为客户端的共用的公网IP地址,常用于在日之中记录客户端的真实IP地址。
#在后端httpd服务器修改配置,添加日志记录X-Forwarded-For字段
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" \"%{X-Real-IP}i\"\"%{X-Forwarded-For}\"" combined  
#在后端服务器查看日志
[root@centos8 ~]#tail /var/log/httpd/access_log   -f
10.0.0.8 - - [09/Oct/2020:21:50:57 +0800] "HEAD /static/index.html HTTP/1.0" 200
- "-" "curl/7.29.0" "10.0.0.7"

时间的设置

BASH
proxy_connect_timeout time;
#配置nginx服务器与后端服务器尝试建立连接的超时时间,默认为60秒,用法如下:
proxy_connect_timeout 60s; 
#60s为自定义nginx与后端服务器建立连接的超时时间
proxy_read_timeout time;
#配置nginx服务器向后端服务器或服务器组发起read请求后,等待的超时时间,默认60s
proxy_send_timeout time; 
#配置nginx项后端服务器或服务器组发起write请求后,等待的超时 时间,默认60s

设置提供代理服务的协议版本

BASH
proxy_http_version 1.0; 
#用于设置nginx提供代理服务的HTTP协议的版本,默认http 1.0

中断请求操作

BASH
proxy_ignore_client_abort off; 
#官方解释,是否在客户端超时或者是中断请求时,中断与后端的 web 服务器连接。
#当客户端网络中断请求时,nginx服务器中断其对后端服务器的请求。即如果此项设置为on开启,则服务器
#会忽略客户端中断并一直等着代理服务执行返回,如果设置为off,则客户端中断后Nginx也会中断客户端请
#求并立即记录499日志,默认为off。

保存空间的大小值

BASH
proxy_headers_hash_bucket_size 128;
#当配置了 proxy_hide_header和proxy_set_header的时候,用于设置nginx保存HTTP报文头的hash表的上限
proxy_headers_hash_max_size 512; 
#设置proxy_headers_hash_bucket_size的最大可用空间
server_namse_hash_bucket_size 512; 
#server_name hash表申请空间大小
server_names_hash_max_szie   512; 
#设置服务器名称hash表的上限大小

反向代理单台服务器

CODE
[root@centos8 ~]# cat /apps/nginx/conf/conf.d/pc.conf
server {
 listen 80;
 server_name www.dingchen.local;
 location / {
     proxy_pass http://10.0.0.18/; # http://10.0.0.18/ 最后的 / 可加或不加
 }
}
#重启Nginx 并访问测试

502 报错

后端服务器连接错误,或者是后端服务器端口未开

504 报错

当反向代理服务器发送给后端的服务器的数据包都被丢弃时会出现 504 报错

可以通过 iptabes DROP 来实现