![代理 sub.domain.com/link1 -> 10.1.1.1:8080/someotherlink1](https://linux22.com/image/107623/%E4%BB%A3%E7%90%86%20sub.domain.com%2Flink1%20-%3E%2010.1.1.1%3A8080%2Fsomeotherlink1.png)
sub.domain.com/link1
尝试从另一台服务器执行简单代理
10.1.1.1:8080/someotherlink1
。
这就是我的服务器上下文的样子:(我修改了默认的 nginx.conf)
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name sub.domain.com;
root /;
# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;
location /link1 {
proxy_pass http://10.1.1.1:8080/link2
}
error_page 404 /404.html;
location = /40x.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}
`
但访问网页只是加载 nginx 502 bad gateway 页面。
日志中的错误是:
2017/03/15 22:04:27 [crit] 8647#0: *11 connect() to 10.1.1.1:8080 failed (13: Permission denied) while connecting to upstream, client: 112.xxx.xxx.xxx, server: sub.domain.com, request: "GET /link1/ HTTP/1.1", upstream: "http://10.1.1.1.1:8080/link2/", host: "sub.domain.com"
看起来有点奇怪的是GET /link1/
- 因为这不应该是最终上游 URL 中的链接 - 它不应该尝试获取此链接。
我究竟做错了什么?
答案1
您不需要在proxy_pass
指令上传递 URI,您需要首先重写或重定向,然后将其传递给代理,例如:
location /link1 {
return 301 $scheme://$http_host/link2$args;
}
location /link2 {
proxy_pass http://10.1.1.1:8080;
}