代理 (nginx) 显示错误网关错误

代理 (nginx) 显示错误网关错误

我有一个在 上运行的服务(docker 注册表)port 5000,我已经安装了 nginx 将 http 请求从 重定向80805000。如果我卷曲localhost:5000它可以工作,但是当我卷曲时localhost:8080我会得到一个错误的网关错误。

nginx 配置文件:

upstream docker-registry {
 server localhost:5000;
}

server {
 listen 8080;
 server_name registry.mydomain.com;

 proxy_set_header Host       $http_host; 
 proxy_set_header X-Real-IP  $remote_addr; 
 client_max_body_size 0; 
 chunked_transfer_encoding on;

 location / {

     proxy_pass http://docker-registry;
 }
 location /_ping {
     auth_basic off;
     proxy_pass http://docker-registry;
 }
 location /v1/_ping {
     auth_basic off;
     proxy_pass http://docker-registry;
 }

}

/var/log/nginx/error.log我有:

[crit] 15595#0: *1 connect() to [::1]:5000 failed (13: Permission denied) while connecting to upstream, client: 127.0.0.1, server: registry.mydomain.com, request: "GET / HTTP/1.1", upstream: "http://[::1]:5000/", host: "localhost:8080"

任何想法?

答案1

我假设它是一个 Linux 机器,所以很可能 SELinux 正在阻止连接,因为没有允许连接的策略。

你应该能够运行

# setsebool -P httpd_can_network_connect true

然后重启nginx。

答案2

根据错误消息,我想知道 localhost:5000 是否被解析为 ipv6 地址,而您可能不希望这样做。您可以尝试将其更改为 127.0.0.1:5000

编辑:在您的 proxy_pass 行中,您可能缺少部分 URL?尝试添加 $request_uri ,这样它可能是:

proxy_pass http://docker-registry/$request_uri;

或者可能:

proxy_pass http://docker-registry$request_uri;

不确定哪一个是最正确的。

另一件需要考虑的事情。您的配置表明:

server_name registry.mydomain.com;

因此,localhost:8080 可能不匹配。为了进行测试,您可以将其更改为:

server_name registry.mydomain.com localhost;

然后 localhost:8080 以及您的域将被匹配。我假设registry.mydomain.com只是一个示例,您可以将真实服务器的FQDN放在那里。

相关内容