Nginx容器502错误网关

时间:2020-06-26 11:36:13

标签: docker ssl nginx nexus

我知道之前已经有人问过这个问题,并且我可能已经阅读了大多数此类文章,但是我无法使组合工作。

我正在尝试使用Nginx作为前端Sonatype Nexus 3的HTTPS反向代理。Nexus和Nginx都是在Linux(Fedora Server)Docker主机(192.168.60.204 / svr1.domain.com)上运行的容器。

但是,当我启用proxy_pass时,我会得到502 Bad Gateway 从docker主机运行docker logs --tail 50 --follow --timestamps nginx-nexus,我得到:

[error] 6#6: *1 connect() failed (113: Host is unreachable) while connecting to upstream, client: 192.168.60.1, server: nexus.domain.com, request: "GET / HTTP/1.1", upstream: "http://192.168.60.204:8081/", host: "nexus.domain.com"

192.168.60.1是Docker主机所在网络的默认网关,所以我不知道为什么它似乎试图连接到此。

nexus.domain.com是指向Docker主机的CNAME。

我可以使用docker exec -it nginx-nexus sh(感谢@arik)连接到Nginx容器并成功ping nexus.domain.com

我已经尝试过nginx.conf的许多排列,您可以从注释掉的代码中看到:

client_max_body_size      4G;

server {
  listen *:80;
  location /  {
    return 301 https://$host$request_uri;
  }
}

upstream foo{
  #insert your hosts ip here
  server nexus.domain.com:8081;
}

server {
  listen                  443 ssl;
  server_name             nexus.domain.com;

  ssl_certificate         /etc/nginx/certs/nexus.crt.pem;
  ssl_certificate_key     /etc/nginx/certs/nexus.key.pem;
  ssl_protocols           TLSv1.2;
  ssl_ciphers             HIGH:!aNULL:!MD5;

  location / {
    #resolver              127.0.0.11 valid=5s;
    proxy_pass            http://nexus.domain.com:8081/;
    #proxy_redirect        off;
    #proxy_set_header      Host $http_host;
    #proxy_set_header      Host $host;
    #proxy_set_header      X-Real-IP $remote_addr;
    proxy_set_header      X-Forwarded-For $proxy_add_x_forwarded_for;
    #proxy_set_header      X-Forwarded-Host $server_name;
    proxy_set_header      X-Forwarded-Proto $scheme;
  }
}

我想认为Docker联网是正确的,因为我有另一个使用nginx的工作容器也是类似的方式。

如果有人可以阐明我的错,我将不胜感激。 T.I.A

更新1

根据@Arix的意见,我在location / { 下添加了:

resolver 1.1.1.1 1.0.0.1 8.8.8.8 8.8.4.4 208.67.222.222 208.67.220.220 valid=60s;

出现以下错误:

$ docker logs --tail 50 --follow --timestamps nginx-nexus
2020-06-26T13:14:52.105017039Z 2020/06/26 13:14:52 [error] 6#6: *1 connect() failed (113: Host is unreachable) while connecting to upstream, client: 192.168.60.1, server: nexus.domain.com, request: "GET / HTTP/1.1", upstream: "http://192.168.60.204:8081/", host: "nexus.domain.com"
2020-06-26T13:14:52.105371984Z 192.168.60.1 - - [26/Jun/2020:13:14:52 +0000] "GET / HTTP/1.1" 502 560 "-" "Mozilla/5.0 (X11; Fedora; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36" "-"

1 个答案:

答案 0 :(得分:0)

看来这是一个DNS问题,我不完全了解,但希望了解原因。

此外,我在刷新按钮上也太快了。我的设置大约需要15-30秒,Nginx和Nexus才能完全启动并运行。

TL; DR:

删除域,将proxy_pass http://nexus.domain.com:8081更改为proxy_pass http://nexus:8081

全文:

在Nginx容器中放置一个外壳并ping nexus.domain.com可以解析Docker主机的IP,这就是我想要的。

Ping nexus解析为该容器的Docker内部IP地址。

似乎没有resolver部分就可以了。为了完整起见,这是我的nginx.conf:

client_max_body_size      4G;

server {
  listen                  80;
  server_name             nexus.domain.com;
  location /  {
    return 301 https://$host$request_uri;
  }
}

#resolver              1.1.1.1 1.0.0.1 8.8.8.8 8.8.4.4 208.67.222.222 208.67.220.220 valid=60s;

server {
  listen                  443 ssl;
  server_name             nexus.domain.com;

  ssl_certificate         /etc/nginx/certs/nexus.crt.pem;
  ssl_certificate_key     /etc/nginx/certs/nexus.key.pem;
  ssl_protocols           TLSv1.2;
  ssl_ciphers             HIGH:!aNULL:!MD5;

  location / {
    proxy_pass            http://nexus:8081/;
    proxy_redirect        off;
    proxy_set_header      Host $http_host;
    #proxy_set_header      X-Real-IP $remote_addr;
    proxy_set_header      X-Forwarded-For $proxy_add_x_forwarded_for; #Gets CSS working
    #proxy_set_header      X-Forwarded-Host $server_name;
    proxy_set_header      X-Forwarded-Proto $scheme;
  }
}

如果有人有时间解释...,我很想知道DNS的工作情况。

HTH