请协助。
我发现了一篇博客文章https://blog.ssdnodes.com/blog/host-multiple-ssl-websites-docker-nginx/),内容涉及部署多个具有相同nginx-proxy
但名称不同的VIRTUAL_HOST
的docker-compose应用程序
但是由于某些原因,两个应用程序都返回错误502错误网关
以下错误是我运行docker-compose logs nginx
2019/05/29 20:52:26 [error] 8#8: *15 connect() failed (111: Connection refused) while connecting to upstream, client: 52.209.30.187, server: gregsithole.com, request: "GET / HTTP/1.1", upstream: "http://172.20.0.5:80/", host: "gregsithole.com"
我相信upstream
使用的是内部docker网络IP,因为这不是我的服务器的IP。我的上游取决于以下文件:https://raw.githubusercontent.com/jwilder/nginx-proxy/master/nginx.tmpl
但是我对它的工作方式不太熟悉。
以下是我的docker-compose文件的示例:
nginx-proxy / docker-compose.yaml
version: "3.6"
services:
nginx:
image: nginx
container_name: nginx-proxy
ports:
- "80:80"
- "443:443"
volumes:
- conf:/etc/nginx/conf.d
- vhost:/etc/nginx/vhost.d
- html:/usr/share/nginx/html
- certs:/etc/nginx/certs
labels:
- "com.github.jrcs.letsencrypt_nginx_proxy_companion.nginx_proxy=true"
dockergen:
image: jwilder/docker-gen
container_name: nginx-proxy-gen
restart: always
depends_on:
- nginx
command: -notify-sighup nginx-proxy -watch -wait 5s:30s /etc/docker-gen/templates/nginx.tmpl /etc/nginx/conf.d/default.conf
volumes:
- conf:/etc/nginx/conf.d
- vhost:/etc/nginx/vhost.d
- html:/usr/share/nginx/html
- certs:/etc/nginx/certs
- /var/run/docker.sock:/tmp/docker.sock:ro
- ./nginx.tmpl:/etc/docker-gen/templates/nginx.tmpl:ro
letsencrypt:
image: jrcs/letsencrypt-nginx-proxy-companion
container_name: nginx-proxy-le
restart: always
depends_on:
- nginx
- dockergen
environment:
NGINX_PROXY_CONTAINER: nginx-proxy
NGINX_DOCKER_GEN_CONTAINER: nginx-proxy-gen
volumes:
- conf:/etc/nginx/conf.d
- vhost:/etc/nginx/vhost.d
- html:/usr/share/nginx/html
- certs:/etc/nginx/certs
- /var/run/docker.sock:/var/run/docker.sock:ro
volumes:
conf:
vhost:
html:
certs:
networks:
default:
external:
name: nginx-proxy
dockerized-ghost / docker-compose.yaml
version: "3.6"
services:
ghost:
image: ghost
restart: always
expose:
- 80
volumes:
- ../../ghost:/var/lib/ghost/content
environment:
NODE_ENV: production
url: https://blog.gregsithole.com
VIRTUAL_HOST: blog.gregsithole.com
LETSENCRYPT_HOST: blog.gregsithole.com
LETSENCRYPT_EMAIL: hidden-email
networks:
default:
external:
name: nginx-proxy
请协助
答案 0 :(得分:0)
您应将网络nginx-proxy分配给服务鬼:
ghost:
networks:
- nginx-proxy
...
还要将新作品分配给nginx
nginx:
networks:
- nginx-proxy
...
也将网络配置如下:
networks:
nginx-proxy:
external: true
default:
这就是您所需要的。请记住,在docker compose文件中,您必须将网络声明为外部,但这还不够。您还已将其分别分配给要成为网络一部分的每个服务。
我建议您升级到Træfik或特使。 Nginx在可伸缩性方面受到限制,除非您为此付费。
答案 1 :(得分:0)
花了数天时间在这个问题上尝试各种解决方案。多次更新我的仓库。我设法解决了。
我使用的博客文章早在2017年就已过时,在同一博客上,我找到了最新的文章(https://blog.ssdnodes.com/blog/host-multiple-websites-docker-nginx/),该文章在检查差异时发现了我的nginx-proxy
使用了nginx
,'jwilder / docker-gen'和jrcs/letsencrypt-nginx-proxy-companion
。
最新文章仅使用jwilder/nginx-proxy
,但我对其进行了修改,使其也包含jrcs/letsencrypt-nginx-proxy-companion
,请参见下面的解决方案:
version: "3.6"
services:
nginx-proxy:
image: jwilder/nginx-proxy
container_name: nginx-proxy
ports:
- "80:80"
- "443:443"
volumes:
- conf:/etc/nginx/conf.d
- vhost:/etc/nginx/vhost.d
- html:/usr/share/nginx/html
- dhparam:/etc/nginx/dhparam
- certs:/etc/nginx/certs:ro
- /var/run/docker.sock:/tmp/docker.sock:ro
letsencrypt-nginx-proxy-companion:
image: jrcs/letsencrypt-nginx-proxy-companion
environment:
NGINX_PROXY_CONTAINER: nginx-proxy
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
- vhost:/etc/nginx/vhost.d
- html:/usr/share/nginx/html
- certs:/etc/nginx/certs
volumes:
conf:
vhost:
html:
dhparam:
certs:
networks:
default:
external:
name: nginx-proxy
另外,我的另一个问题是,幽灵默认使用的端口为2368
,因此我必须将其绑定为使用端口80。因此,我的解决方案不是在幽灵上暴露端口80 ,我创建了一个nginx
服务,该服务公开了端口80。
以下是我的幽灵设置:
version: "3.6"
services:
ghost:
image: ghost
restart: always
volumes:
- ../../ghost:/var/lib/ghost/content
environment:
- VIRTUAL_HOST=blog.domain.com
- LETSENCRYPT_HOST=blog.domain.com
- LETSENCRYPT_EMAIL=name@domain.com
- NODE_ENV=production
- url=https://blog.domain.com
nginx:
image: nginx
volumes:
- ./nginx/nginx.conf:/etc/nginx/nginx.conf:ro
expose:
- 80
depends_on:
- ghost
links:
- ghost
networks:
default:
external:
name: nginx-proxy
因此,我能够使我的网站(https://gregsithole.com)和博客(https://blog.gregsithole.com)在同一个代理下工作
答案 2 :(得分:0)
我能够使用 Greg 的答案来解决这个问题,只需进行一个调整:我没有向 ghost docker-compose.yml 文件添加 nginx 服务,而是添加了 VIRTUAL_PORT=2368 并且终于开始了我的工作.