我正在尝试使用 nginx 作为反向代理,但使用动态目标 IP/端口,我无法使其正常工作。在这个阶段,我想知道我试图实现的目标是否真的可行。
我想在原始请求中添加远程 IP 地址/主机名和 IP 地址,然后将其用作 proxy_pass,以便 nginx 相应地转发该请求。
如果我将其用作reverse_proxy.conf
:
server {
listen 443 ssl;
server_name server.com;
location / {
proxy_pass http://server2.com:8080;
}
}
它工作正常并且请求https://server.com
来自http://server2.com:8080
我想要实现的是动态地执行此操作,以便如果我使用转到此 URL:
https://server.com/?uri=http://server2.com:8080
它将把输入的 URL 作为变量“uri”并执行与上述相同的任务。
这是我尝试过的:
server {
listen 443 ssl;
server_name server.com;
location / {
proxy_pass $arg_uri;
}
}
但如果我这样做,我会收到此错误:
2020/05/05 04:12:31 [error] 36608#36608: *2 invalid URL prefix in ""
所以我尝试更改proxy_pass $arg_uri;
为proxy_pass http://$arg_uri;
但只是进入invalid URL prefix in "http://"
错误日志
我想要做的事情能完成吗?如果可以,我遗漏了什么?
更新:这是 access.log 中显示的内容
xxx.156.127.xxx - - [07/May/2020:21:28:15 +0100] "GET /?uri=http://server2.com:8080 HTTP/1.1" 500 595 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.129 Safari/537.36"
xxx.156.127.xxx - - [07/May/2020:21:28:15 +0100] "GET /favicon.ico HTTP/1.1" 500 595 "https://server.com/?uri=http://server2.com:8080" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.129 Safari/537.36"
错误日志中
2020/05/07 21:29:52 [error] 38723#38723: *5 invalid port in upstream "http://server2.com:8080", client: xxx.156.127.xxx, server: server.com, request: "GET /?uri=http://server2.com:8080 HTTP/1.1", host: "server.com"
2020/05/07 21:29:52 [error] 38723#38723: *6 invalid URL prefix in "http://", client: xxx.156.127.xxx, server: server.com, request: "GET /favicon.ico HTTP/1.1", host: "server.com", referrer: "https://server.com/?uri=http://server2.com:8080"