Nginx 代理请求到 GET 变量中指定的 url

Nginx 代理请求到 GET 变量中指定的 url

我需要 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

有没有办法通过重写或其他规则来实现这一点?如能得到任何帮助,我将不胜感激。提前谢谢您。

答案1

欢迎来到 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;
}

相关内容