Nginx

Nginx 位置重定向到從不同伺服器獲取的目標 URL

  • February 2, 2021

在我目前的場景中,有十幾個域上設置了 PHP 重定向腳本,該腳本從基於 $_SERVER 的 SQL 數據庫中獲取目標 URL

$$ ‘QUERY_STRING’ $$在使用者最初請求的 URL 中傳遞的參數。 NginX在這些伺服器中的每一個上都是這樣配置的(我們稱之為Domains_A/B/C):

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

所以請求就像使用者 > Domains_A/B/C > 目標 URL

但我想要的是不必複製 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 的引用者是 Domain_X,這是我試圖避免的。

我不想增加重定向並將Domains_A/B/C也保留為引用者。就像 NginX 在訪問 Domains_A/B/C 時從 Domain_X 獲取目標 URL 一樣,並將重定向直接指向來自Domains_A/B/C的目標 URL 。

Domains_A/B/C上的這些內容:

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

這可能嗎?我還沒有找到解決方案。

您可以proxy_pass向具有重定向腳本的域發出請求:

Domains_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;
}

Domain_X(有 PHP 腳本)上。

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

引用自:https://serverfault.com/questions/1052090