我有一个在docker中运行的nginx,它充当https代理。我有很多其他服务在其他docker容器中运行,比如gitlab和nginx似乎可以作为Web代理工作。
今天我设置了一个wordpress docker并在nginx中使用了以下配置:
#
# A virtual host using mix of IP-, name-, and port-based configuration
#
server {
listen 80;
listen 443 ssl;
server_name x.example.com;
ssl on;
ssl_certificate /etc/nginx/ssl/fullchain.pem;
ssl_certificate_key /etc/nginx/ssl/privkey.pem;
if ($scheme = http) {
return 301 https://$server_name$request_uri;
}
location / {
proxy_pass http://172.19.0.3;
proxy_set_header Accept-Encoding "";
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-Proto $scheme;
# these two lines here
proxy_http_version 1.1;
proxy_set_header Connection "";
}
}
wordpress正在主机端口8080和访客端口80上运行。即,我可以使用网址http://x.example.com:8080完美访问该网站。但是当我尝试使用https进行访问时,即https://x.example.com,nginx为我提供了 504网关超时。
docker logs -f nginx-proxy
显示以下日志行。
2018/04/23 21:52:21 [error] 28#28: *3202 upstream timed out (110: Connection timed out) while connecting to upstream, client:
37.20.24.26, server: x.example.com, request: "GET / HTTP/1.1", u 0/", host: "x.example.com"
37.201.224.236 - - [23/Apr/2018:21:52:21 +0000] "GET / HTTP/1.1" 504 585 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36" "-"
有人可以帮我解决这个问题吗? Wordpress在不同的docker网络下运行,因为容器是使用docker-compose.xml创建的。这是nginx无法代理的原因吗?
答案 0 :(得分:1)
我在本地上游也有类似的问题。它指向的是localhost,它已解析为ipv4和ipv6,而docker仅在ipv4上进行了绑定。当来自nginx代理的请求使用ipv6时,它超时(根据连接超时,默认为60s),但是重试成功(因为它使用了ipv4)。
答案 1 :(得分:0)
我的nginx容器无法与为wordpress创建的docker网络进行通信。使用
解决了该问题docker network connect
命令。