ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、视频、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
[TOC] # 介绍 proxy_set_header用来实现反向代理的需求,设定被代理服务器接收到的header信息。 ~~~ 语法:proxy_set_header field value; field :为要更改的项目,也可以理解为变量的名字,比如host value :为变量的值 ~~~ 在这里,所有设置的值的含义和http请求同中的含义完全相同,除了Host外还有X-Forward-For。 Host的含义是表明请求的主机名,因为nginx作为反向代理使用,如果反向代理层的nginx不重写请求头中的host字段,默认反向代理服务器会向后端真实服务器发送请求,并且请求头中的host字段应为proxy_pass指令设置的服务器。 X_Forward_For字段表示该条http请求是有谁发起的?如果反向代理服务器不重写该请求头的话,那么后端真实服务器在处理时会认为所有的请求都来在反向代理服务器,如果后端有防攻击策略的话,那么无法生效。 因此,在配置用作反向代理的nginx中一般会增加两条配置,修改http的请求头: ``` proxy_set_header Host $http_host; proxy_set_header X-Forward-For $remote_addr; ``` 这里的$http_host和$remote_addr都是nginx的导出变量,可以再配置文件中直接使用。如果Host请求头部没有出现在请求头中,则$http_host值为空,但是$host值为主域名。因此,一般而言,会用$host代替$http_host变量,从而避免http请求中丢失Host头部的情况下Host不被重写的失误。 # 报错 ## 1.nginx返回状态码:400 nginx 400 Bad request是request header过大所引起,request过大,通常是由于cookie中写入了较大的值所引起,那么可能是proxy_set_header设置错误,比如,$http_host配置了url。如下所示 `proxy_set_header Host $http_host/mxapproval;`