nigix proxy_set_header Host $host:$server_port 与 $host:proxy_port 区别

本文介绍Nginx作为反向代理服务器的配置方法,重点对比了$proxy_port与$server_port的区别,并通过实例展示了如何设置不同路径的代理转发。
部署运行你感兴趣的模型镜像

nigix做反向代理  

注意  :$proxy_port  与 :$server_port 区别

$server_port :nigix监听的端口

$proxy_port : 服务器真正访问的端口

server {

        listen       8888;
        server_name  192.168.1.114;        
        #charset koi8-r;

        #access_log  logs/host.access.log  main;
        location  /a {
            proxy_pass http://127.0.0.1:8080;
            proxy_set_header Host $host:$proxy_port;
        }
        location  /b {
            proxy_pass http://192.168.1.102:8080/b;
            proxy_cookie_path /a /b;
        }

        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;

        }

-----------------------------------------------------------------------------------------------------------------

server {
        listen       8888;
        server_name  192.168.1.114;        
        #charset koi8-r;

        #access_log  logs/host.access.log  main;
        location  /a {
            proxy_pass http://127.0.0.1:8080;
            proxy_set_header Host $host:$server_port;
        }
        location  /b {
            proxy_pass http://192.168.1.102:8080/b;
            proxy_cookie_path /a /b;
        }

        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

您可能感兴趣的与本文相关的镜像

EmotiVoice

EmotiVoice

AI应用

EmotiVoice是由网易有道AI算法团队开源的一块国产TTS语音合成引擎,支持中英文双语,包含2000多种不同的音色,以及特色的情感合成功能,支持合成包含快乐、兴奋、悲伤、愤怒等广泛情感的语音。

在使用 Nginx 作为反向代理时,如果配置了 `proxy_set_header Host $host`,可能导致后端应用在执行重定向(如 HTTP 302)时丢失原始请求的端口号。这是因为 `$host` 变量仅包含域名或 IP 地址,而不包括端口信息。当后端服务依赖于完整的主机头(包括端口)来生成重定向 URL 时,缺少端口会导致客户端被重定向到错误的地址[^1]。 ### 解决方案 #### 1. 使用 `$http_host` 而不是 `$host` Nginx 提供了 `$http_host` 变量,它包含了客户端请求中的完整 Host 头(包括端口号)。可以通过如下方式设置: ```nginx proxy_set_header Host $http_host; ``` 这样可以确保后端服务接收到的 Host 头中包含端口号,从而在重定向时能够正确构造 URL。 #### 2. 显式指定端口号 如果前端访问的端口是固定的,可以在 `Host` 头中显式添加端口号。例如,假设前端访问端口为 `8080`,可以这样配置: ```nginx proxy_set_header Host $host:8080; ``` 这种方式适用于反向代理的端口固定不变的情况,确保后端服务生成的重定向 URL 包含正确的端口。 #### 3. 修改后端应用逻辑 另一种方法是修改后端应用的逻辑,使其在生成重定向 URL 时不仅依赖于 `Host` 请求头,还可以从其他来源获取端口号(如配置文件、X-Forwarded-Port 头等)。为此,可以在 Nginx 中传递额外的头信息: ```nginx proxy_set_header X-Forwarded-Port $server_port; ``` 然后在后端代码中读取该头信息,并结合 `Host` 头构造完整的 URL。 --- ### 示例配置 以下是一个完整的 Nginx 配置示例,展示了如何保留 Host 头中的端口号以避免重定向问题: ```nginx location / { proxy_pass http://backend_server; proxy_set_header Host $http_host; proxy_set_header X-Forwarded-Port $server_port; } ``` 此配置将确保后端服务接收到的 `Host` 头包含端口,并可通过 `X-Forwarded-Port` 获取原始请求端口。 --- ### 总结 通过使用 `$http_host` 或显式添加端口号,可以有效解决 `proxy_set_header Host $host` 导致的端口丢失问题。此外,调整后端应用处理 Host 头的方式也是一种可行的补充手段。 ---
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值