文章目录
-
- 一、proxy_set_header
-
- 1.1、<span class="katex--inline">http\_host与</span>host区别
-
- 1、在使用Nginx做反向代理的时候,proxy_set_header功能可以设置反向代理后的http header中的host,
-
- 1.1.1、 不设置 proxy_set_header Host 时,浏览器直接访问 nginx,获取到的 Host 是 proxy_pass 后面的值,即 $proxy_host 的值,
- 1.1.2、 设置 proxy_set_header Host $host 时,浏览器直接访问 nginx,获取到的 Host 是 $host 的值,没有端口信息
- 1.1.3、2.3 设置 proxy_set_header Host <span class="katex--inline">host:</span>proxy_port 时,浏览器直接访问 nginx,获取到的 Host 是 <span class="katex--inline">host:</span>proxy_port 的值
- 1.1.4、2.4 设置 proxy_set_header Host $http_host 时,浏览器直接访问 nginx,获取到的 Host 包含浏览器请求的 IP 和端口
- 1.1.5、2.5 设置 proxy_set_header Host $host 时
- 1.1.6、X-Real-IP
- 二 、服务器使用nginx反向代理后,后端服务器获取访客的真实ip的失败
- 三、获取多有请求头
- 四、nginx.conf配置
一、proxy_set_header
1.1、 h t t p _ h o s t 与 http\_host与 http_host与host区别
1、在使用Nginx做反向代理的时候,proxy_set_header功能可以设置反向代理后的http header中的host,
那么常用的几个设置中$proxy_host, h o s t , host, host,http_host又都表示什么意思呢?
Nginx的官网文档中说下面这两条是做反代时默认的,所以$proxy_host 自然是 proxy_pass后面跟着的host了
proxy_set_header Host $proxy_host;
proxy_set_header Connection close;
如果客户端发过来的请求的header中有’HOST’这个字段时,$http_host和$host都是原始的’HOST’字段比如请求的时候HOST的值是www.csdn.net 那么反代后还是www.csdn.ne
1.1.1、 不设置 proxy_set_header Host 时,浏览器直接访问 nginx,获取到的 Host 是 proxy_pass 后面的值,即 $proxy_host 的值,
参考http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_set_header
server {
listen 8090;
server_name _;
location / {
proxy_pass http://172.31.5.0:5000;
}
}
1.1.2、 设置 proxy_set_header Host $host 时,浏览器直接访问 nginx,获取到的 Host 是 $host 的值,没有端口信息
server {
listen 8090;
server_name _;
location / {
proxy_set_header Host $host;
proxy_pass http://172.31.5.0:5000;
}
}