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

Nginx别名域反向代理配置:如何让用户停留在别名域

解决方案

核心问题分析

当前配置里proxy_set_header Host mainURL会让后端服务判定请求来自主站example.com,所以生成的内部链接全指向主站域名。要实现部分链接留在别名域、部分跳主站,得从后端请求标识和响应内容替换两个维度调整Nginx配置。

配置调整方案

1. 基础配置:让大部分链接留在别名域

修改配置,让后端感知当前访问的别名域,同时替换响应里的主站域名:

server {
    listen       443 ssl;
    server_name abc.example.com;

    # 替换响应中硬编码的主站域名
    sub_filter 'example.com' '$host';
    sub_filter_once off; # 替换所有匹配项,而非仅第一个
    sub_filter_types text/html text/css text/javascript application/json; # 指定需处理的MIME类型

    location /example {
        proxy_pass https://127.0.0.1/example/;
        # 传递当前别名域作为Host,让后端生成对应域名的链接
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

关键说明:

  • proxy_set_header Host $host:让后端获取用户实际访问的别名域,若后端程序支持根据请求Host动态生成链接,这一步就能直接解决大部分链接跳转问题。
  • sub_filter:针对后端硬编码主站域名的场景,自动把响应内容里的example.com替换为当前访问的别名域($host),确保页面内链接指向别名域。

2. 特殊路径:保留跳转主站的特性

对需要跳回主站的特定路径,单独配置location块,强制使用主站Host并关闭域名替换:

# 优先级高于通用location的特殊路径配置
location /example/special-section {
    proxy_pass https://127.0.0.1/example/special-section/;
    # 传递主站Host,让后端生成主站链接
    proxy_set_header Host example.com;
    # 关闭当前路径的域名替换
    sub_filter off;
}

备选方案:第三方模块实现复杂替换

如果需要更灵活的正则替换规则(比如仅替换特定前缀的链接),可以用第三方模块ngx_http_substitutions_filter_module,支持多规则正则替换。注意该模块需要编译进Nginx,示例配置:

subs_filter 'https?://example.com(/example/.*)' '$scheme://$host$1' ir;

关于Cookie方案的说明

Cookie绑定域的方案更适合用户身份关联域名的场景(比如用户下次访问自动跳转至别名域),但无法直接解决页面内链接跳转的问题,因此不推荐作为当前问题的核心解决方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 15:02:42