【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 {
  listen 80;
  listen [::]:80;
  server_name mqtt.keeshow.cn;
  client_max_body_size 1024m;

  location / {
      proxy_pass http://127.0.0.1:8888;
      proxy_set_header HOST $host;
      proxy_set_header X-Forwarded-Proto $scheme;
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  }
}

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

posted @ 2024-08-02 18:05  iSunXiaoXiao  阅读(428)  评论(1编辑  收藏  举报