nginx 反向代理和修改 url 参数

nginx 反向代理和修改 url 参数

我是 nginx 新手,需要设置反向代理。除了几张图片外,大多数内容都可以加载。

我的服务器是“bar:7081”

我无法控制 foo:8088 的网页

以下是我所拥有的:

location / {
    proxy_set_header Host $host;
    proxy_set_header Referer $http_referer;
    proxy_set_header X-Forwarded-For $remote_addr;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_pass http://foo:8088/;
}

由于缺乏更好的工具,我正在使用 chrome 和 firefox 的 f12 调试器...

当页面加载时,我意识到它正在请求此资源: http://bar:7081/api/proxy/get?url=http://foo:8088/images/image123.jpg

当然,客户端无法访问 foo:8088,因此我看到以下 502 错误网关: http://foo:8088/images/image123.jpg

有没有办法可以重定向请求?谢谢!

答案1

location / {
    if ($arg_url) {
        proxy_pass $arg_url;
        proxy_set_header Host $host;
        proxy_set_header Referer $http_referer;
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

你可以试试这个吗?你检查查询字符串 (?url=http://foo:8088/images/image123.jpg) 存在,则代理传递给 url 的该参数。

https://nginx.org/en/docs/http/ngx_http_core_module.html#var_arg_

$arg_name 读取 url 的 name= 参数

我知道这在 nginx 中是邪恶的,但另一种方法是将查询字符串映射到变量中,并将 proxy_pass 映射到变量中。(如果这不起作用,请告诉我,我会尝试映射配置)。

相关内容