我知道之前已经有人问过这个问题,并且我可能已经阅读了大多数此类文章,但是我无法使组合工作。
我正在尝试使用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
根据@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" "-"
答案 0 :(得分:0)
看来这是一个DNS问题,我不完全了解,但希望了解原因。
此外,我在刷新按钮上也太快了。我的设置大约需要15-30秒,Nginx和Nexus才能完全启动并运行。
删除域,将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