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

如何在Nginx中重写Location头实现子域名到子目录映射

解决方案

1. 重写重定向的Location头

Nginx的proxy_redirect指令专门用于修改后端返回的重定向Location头,完全适配你的场景。你需要在对应的location块中添加该指令,将内部地址替换为匹配的公网地址:

location ~ ^/private/auth(/?.*)$ {
    proxy_pass https://auth.private/$1;
    # 替换Keycloak返回的内部重定向地址
    proxy_redirect https://auth.private/ https://my.organisation/private/auth/;
    proxy_redirect https://auth.tkeir/ https://my.organisation/private/auth/;
}

说明:

  • 第一条proxy_redirect会把后端返回的https://auth.private/xxx格式重定向地址,替换为https://my.organisation/private/auth/xxx
  • 第二条针对你curl发现的auth.tkeir地址做同样替换(这大概率是Keycloak自身配置的前端URL有误导致,建议后续调整Keycloak的frontendUrl参数为https://my.organisation/private/auth,可减少Nginx的配置工作量)

如果要简化多内部域名的规则,也可以用正则通配符:

proxy_redirect ~^https?://auth\.(private|tkeir)/ https://my.organisation/private/auth/;

2. 便捷管理所有重定向

方法1:拆分配置片段单独管理

把所有重定向规则放到独立的配置文件中(比如/etc/nginx/conf.d/keycloak-redirects.conf),再在主server块中引入,便于集中维护:

keycloak-redirects.conf:

# Keycloak重定向规则集合
proxy_redirect https://auth.private/ https://my.organisation/private/auth/;
proxy_redirect https://auth.tkeir/ https://my.organisation/private/auth/;

主配置的server块:

server {
    listen 443 ssl;
    server_name my.organisation;

    # 其他SSL相关配置...

    location ~ ^/private/auth(/?.*)$ {
        proxy_pass https://auth.private/$1;
        include conf.d/keycloak-redirects.conf;
        # 其他proxy必要配置(如请求头)...
    }
}

方法2:用变量统一管理地址

如果后续可能修改域名,通过变量把公网、内部地址统一管理,修改时只需调整变量值即可:

server {
    listen 443 ssl;
    server_name my.organisation;

    # 定义统一变量,集中管理地址
    set $internal_auth_root https://auth.private/;
    set $public_auth_root https://my.organisation/private/auth/;
    set $legacy_internal_root https://auth.tkeir/;

    location ~ ^/private/auth(/?.*)$ {
        proxy_pass $internal_auth_root$1;
        proxy_redirect $internal_auth_root $public_auth_root;
        proxy_redirect $legacy_internal_root $public_auth_root;
    }
}

额外建议:补充Proxy请求头

为了让Keycloak正确识别客户端的真实请求信息,建议在location块中添加以下头信息:

proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;

内容的提问来源于stack exchange,提问作者Nelson G.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 08:06:24