![Nginx 位置重定向到从不同服务器获取的目标 URL](https://linux22.com/image/762954/Nginx%20%E4%BD%8D%E7%BD%AE%E9%87%8D%E5%AE%9A%E5%90%91%E5%88%B0%E4%BB%8E%E4%B8%8D%E5%90%8C%E6%9C%8D%E5%8A%A1%E5%99%A8%E8%8E%B7%E5%8F%96%E7%9A%84%E7%9B%AE%E6%A0%87%20URL.png)
在我当前的场景中,有十几个域上设置了 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;
}