【Nginx】 proxy_set_header参数设置
Nginx proxy_set_header等参数设置
一、不设置 proxy_set_header Host
不设置 proxy_set_header Host 时,浏览器直接访问 nginx,获取到的 Host 是 proxy_pass 后面的值,即 $proxy_host 的值,参考http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_set_header
# cat ngx_header.conf
server {
listen 8090;
server_name _;
location / {
proxy_pass http://172.31.5.0:5000;
}
}
结果如下: 返回proxy_pass 后面的值
二、设置proxy_set_header Host $host
server {
listen 8090;
server_name _;
location / {
proxy_set_header Host $host;
proxy_pass http://172.31.5.0:5000;
}
}
结果如下: 不再是 proxy_pass代理的ip地址了, 不包含端口
三、设置proxy_set_header Host $http_host
server {
listen 8090;
server_name _;
location / {
proxy_set_header Host $http_host;
proxy_pass http://172.31.5.0:5000;
}
}
结果如下: 不再是 proxy_pass代理的ip地址了, 包含端口
提示: 设置 proxy_set_header Host $host 时,浏览器直接访问 nginx,获取到的 Host 是 $host 的值,没有端口信息。此时代码中如果有重定向路由,那么重定向时就会丢失端口信息,导致 404
附录一、
server { |
server块:定义了一个虚拟主机,用于处理特定的域名和端口的请求。 listen:80:监听 IPv4 地址上的端口 80(HTTP 默认端口),[::]:80:监听 IPv6 地址上的端口 80。这样可以同时处理 IPv4 和 IPv6 的 HTTP 请求。 server_name:指定该虚拟主机响应的域名。只有请求的 Host 头匹配 mqtt.keeshow.cn 时,才会使用这个 server 块。 client_max_body_size:设置客户端请求体的最大允许大小为 1024MB。这在需要上传大文件时有用,防止请求因为过大被拒绝。
location 块:( )定义了对根路径(/)的请求的处理方式。 proxy_pass:将所有到达 mqtt.keeshow.cn 的请求代理到本地的 127.0.0.1:18083。代表 nginx接收到请求后,将它转发给运行在本地端口 18083 的 EMQX Dashboard。 proxy_set_header:请求头设置相关。 HOST $host:将客户端请求的 Host 头传递给后端服务器。$host 变量代表客户端请求的主机名。 X-Forwarded-Proto $scheme:将客户端使用的协议(HTTP或 HTTPS)传递给后端服务器。$scheme 变量表示请求的协议。 X-Real-IP $remote_addr:将客户端的真实IP 地址传递给后端服务器。$remote_addr 变量表示客户端的 IP 地址。 X-Forwarded-For $proxy_add_x_forwarded_for:将客户端的原始 IP 地址和所有代理的 IP 地址传递给后端服务器。$proxy_add_x_forwarded_for 变量包含客户端的 IP 地址以及所有代理服务器的 IP 地址。 |
原文:https://www.jb51.net/server/297732rym.htm