代理 sub.domain.com/link1 -> 10.1.1.1:8080/someotherlink1

代理 sub.domain.com/link1 -> 10.1.1.1:8080/someotherlink1

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;
}

相关内容