Nginx

對 GET 變數中指定的 url 的 Nginx 代理請求

  • May 20, 2020

我需要 Nginx 來響應類似的請求

https://example.org/proxy/?url=https://othersite.com/path/file.php%%a=test123%%b=321tset

或類似的方法,例如

https://example.org/proxy/https://othersite.com/path/file.php?a=test123&b=321tset

通過將請求代理到

https://othersite.com/path/file.php?a=test123&b=321tset

有沒有辦法通過重寫或不同的規則來做到這一點?任何幫助,將不勝感激。先感謝您。

歡迎來到 SE。這些重定向可以使用if語句來完成,我沒有使用 nginx 代理嘗試過。

將以下if塊添加到您的 Nginxserver塊中以根據需要重定向它們

server {
   ...
   ...

   #For https://example.org/proxy/?url=https://othersite.com/path/file.php%%a=test123%%b=321tset

   if ($request_uri ~ ^/proxy/\?url=(.*)$) {
       return 301 $1;
   }

   #For https://example.org/proxy/https://othersite.com/path/file.php?a=test123&b=321tset

   if ($request_uri ~ ^/proxy/(https\:\/\/(.*))$) {
       return 301 $1;
   }
}

更新:

您可以使用location塊而不是使用代理來使用代理if

location ~ /proxy/\?url=(.*)$ {
   proxy_pass $1;
   proxy_set_header Host $host;
}

location ~ /proxy/https\:\/\/(.*)$ {
   proxy_pass $1;
   proxy_set_header Host $host;
}

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