You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Nginx如何在URI中保留主机名并执行Rewrite,动态传递请求主机名

Nginx配置:动态传递请求主机名并保留URI重写

要实现无需硬编码主机名、原样传递请求主机名,同时完成指定的URI重写,你可以利用Nginx内置变量动态拼接代理地址,以下是完整的配置方案:

location /app1/ {
    proxy_set_header X-Forwarded-Server $host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    # 传递原始Host头给后端服务
    proxy_set_header Host $http_host;
    # 重写URI,移除/app1前缀
    rewrite ^/app1/(.*)$ /$1 break;
    # 动态生成代理地址,自动匹配请求的协议和主机名
    proxy_pass $scheme://$http_host;
}

关键细节说明:

  • $scheme:自动获取当前请求的协议(http/https),避免硬编码协议类型
  • $http_host:直接读取请求头中的Host值,包含原始主机名和端口(如果请求带了非标准端口),完全实现“原样传递”的需求
  • proxy_set_header Host $http_host:确保后端服务收到的Host头与原始请求一致,避免后端依赖Host头的功能(比如多站点区分)出现异常
  • rewrite规则:用^锚定路径开头,精准匹配/app1/前缀的请求,重写后移除该前缀,break标记让Nginx停止后续重写处理,直接使用重写后的URI发起代理请求

额外注意:

  • 若你不需要保留端口,或希望使用Nginx服务器配置的主机名,可将$http_host替换为$host,但$http_host更贴合“原样传递请求主机名”的需求
  • 确保Nginx已启用ngx_http_proxy_module模块(默认安装一般已包含)
  • 若处理HTTPS请求,需提前配置好SSL证书及相关SSL参数,否则$scheme会识别为http,导致代理错误

内容的提问来源于stack exchange,提问作者Sairam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 07:35:20