Nginx 重定向带有动态参数的 URL

Nginx 重定向带有动态参数的 URL

来自互联网的客户需要访问只能通过 VPN 访问的 Web 服务器,该域是 internal.domain,我无法控制它。在内部,登录的主页是 caas.internal.domain:6643。要从互联网连接,用户登录到 URL login.external.domain:9943,该 URL 指向通过 VPN 将流量路由到 caas.internal.domain:6643 的 nginx。来自 caas.internal.domain 的响应流量被重定向到 login.external.domain,没有问题。html、json、js 中的所有 internal.domain URL 都替换为 external.domain。唯一的问题是来自下面的内部 URL,其查询字符串参数未翻译。

https://caas.internal.domain:6643/caas/propConfig/myApp.json?callback=jQuery1234&excludeApp=Network+Center&_=5678

应替换为

https://login.external.domain:9943/caas/propConfig/myApp.json?callback=jQuery1234&excludeApp=Network+Center&_=5678

具有 1234 和 5678 动态。

这是我的配置:

    server {
      listen          9943 ssl;
      listen          443 ssl;
      server_name     external.domain;

      ssl_certificate      /etc/nginx/ssl/mytest-web.crt;
      ssl_certificate_key /etc/nginx/ssl/mytest-web.key;

      location / {
         resolver 8.8.8.8;
         proxy_set_header Accept-Encoding "";
         proxy_set_header Host $host;
         proxy_set_header X-Forwarded-Host $host;
         proxy_set_header X-Forwarded-Server $host;
         proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
         proxy_set_header X-Forwarded-Proto $scheme;
         client_max_body_size 1g;
         proxy_pass       https://caas.internal.domain:6643$request_uri;

         proxy_redirect   https://caas.internal.domain:6643 https://login.external.domain:9943;
 
         #sub_filter_types text/css text/xml text/javascript application/json;
         sub_filter_types *;
         sub_filter_once off;

         sub_filter "caas.internal.domain:6643" "login.external.domain:9943";

      }
    } 

我怎样才能将内部 URL 变量替换为具有相同变量的外部 URL?

希望这是有意义的

非常感谢

答案1

您需要将以下内容添加到您的internal.domain server块中:

location /caas/propConfig/myApp.json {
    return 301 https://external.domain:9943$request_uri;
}

这会将所有包含前缀的 URL 重定向到其他域中的相应 URL。

相关内容