反向代理配置参数
proxy_pass 指令
BASHproxy_pass;#用来设置将客户端请求转发给的后端服务器的主机,可以是主机名、IP地址:端口的方式#必须要指定端口#也可以代理到预先设置的主机群组,需要模块ngx_http_upstream_module支持示例此代理起到了映射到作用,就是将 proxy_pass 定义的 URL 映射到 location 指定定义的目录,并不是将 location定义的目录追加到 proxy_pass 定义的 URL 下。location /web {index index.html;proxy_pass http://10.0.0.18:8080; #无 / 符号,需要将location后面url 附加到proxy_pass 指定的是 URL 地址,类似于 root 的作用。#proxy_pass指定的URI不带斜线将访问的/web,等于访问后端服务器http://10.0.0.18:8080/web/index.html,即后端服务器配置的站点根目录要有web目录才可以被访问# http://nginx/web/index.html ==> http://10.0.0.18:8080/web/index.htmlproxy_pass http://10.0.0.18:8080/; #有 / 符号,相当于置换,即访问 /web 时实际返回定义的 URL,不会再追加。proxy_pass后面uri内容.类似于alias#proxy_pass指定的URI带斜线,等于访问后端服务器的http://10.0.0.18:8080/index.html 内容返回给客户端} # http://nginx/web/index.html ==> http://10.0.0.18:8080#重启Nginx测试访问效果:curl -L http://www.dingchen.local/web#如果location定义其uri时使用了正则表达式模式,则proxy_pass之后必须不能使用uri; 用户请求时传#递的uri将直接附加至后端服务器之后server {...server_name HOSTNAME;location ~|~* /uri/ {proxy_pass http://host:port; #proxy_pass后面的url 不能加/}...}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 来实现
