我是 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 映射到变量中。(如果这不起作用,请告诉我,我会尝试映射配置)。