Nginx 位置重定向到从不同服务器获取的目标 URL

Nginx 位置重定向到从不同服务器获取的目标 URL

在我当前的场景中,有十几个域上设置了 PHP 重定向脚本,该脚本根据用户最初请求的 URL 中传递的 $_SERVER['QUERY_STRING'] 参数从 SQL 数据库获取目标 URL。

NginX 在每台服务器上的配置如下(我们称之为域_A/B/C):

        location /r/ {
            rewrite ^/r/(.*)$ /r/index.php?$1;
        }

因此请求如下:用户 > Domains_A/B/C > 目标网址

但我希望不必重复 PHP 重定向脚本并将此脚本保留在单个域上。这可以通过执行以下操作来实现:

域_A/B/C

        location /r/ {
            rewrite ^/r/(.*)$ https://Domain_X/r/index.php?$1;
        }

Domain_X(带有 PHP 重定向脚本)

        location /r/ {
            rewrite ^/r/(.*)$ /r/index.php?$1;
        }

但是这样会将重定向次数乘以用户 > Domain_A/B/C > Domain_X(使用 PHP 重定向脚本)> 目标 URL。而且发送到目标 URL 的 Referer 也是 Domain_X,这是我试图避免的。

我不想增加重定向,并保持域_A/B/C作为 Referer。例如,当访问 Domains_A/B/C 时,让 NginX 从 Domain_X 获取目标 URL,并将重定向直接指向来自域_A/B/C

类似这样的域_A/B/C

        location /r/ {
            set Destination_URL get from https://Domain_X/r/index.php?$1;
            rewrite ^/r/(.*)$ Destination_URL;
        }

这可能吗?我还没能找到解决方案。

答案1

您可以proxy_pass向具有重定向脚本的域发出请求:

域_A/B/C

location /r/(.*)$ {
    proxy_pass https://Domain_X/r/index.php?$1;
}

或者(在我的安装中它只能像这样工作)

location ~ ^/r/(.*)$ {
    proxy_set_header Host PHP_SCRIPT_DOMAIN_NAME;
    proxy_pass https://PHP_SCRIPT_DOMAIN_IP:443/r/index.php?$1;
}

等等域_X(其中包含 PHP 脚本)。

location /r/ {
    rewrite ^/r/(.*)$ /r/index.php?$1;
}

相关内容