Docker compose&;nginx网络主机名
我有以下配置:Docker compose&;nginx网络主机名,docker,nginx,docker-compose,docker-networking,docker-network,Docker,Nginx,Docker Compose,Docker Networking,Docker Network,我有以下配置: nginx由docker compose文件作为反向代理//ssl端点启动 由不同的docker compose(出于模块化原因)文件启动的应用程序服务,该文件服务于应用程序 reverse\u proxy和app\u service通过app\u网络连接 由于它们是通过app\u网络连接的,因此我能够在nginx配置中处理app\u服务,如http://app_service:8080,这很好,因为我不需要公开应用程序服务本身的端口 不幸的是,nginx在我打开app服务容
- nginx由docker compose文件作为反向代理//ssl端点启动
- 由不同的docker compose(出于模块化原因)文件启动的应用程序服务,该文件服务于应用程序
和reverse\u proxy
通过app\u service
app\u网络连接
app\u网络连接的
,因此我能够在nginx配置中处理app\u服务
,如http://app_service:8080
,这很好,因为我不需要公开应用程序服务本身的端口
不幸的是,nginx在我打开app服务容器之前不会启动,因为它会在启动时检查主机名app\u服务的存在
如何防止nginx在启动时检查主机名,在app\u服务
尚未运行的情况下尝试连接时可能导致网关错误
供参考的配置文件:
# reverse proxy docker-compose.yml
version: '3'
services:
reverse_proxy:
restart: always
container_name: reverse_proxy
image: nginx
ports:
- 80:80
- 443:443
volumes:
- /srv/docker/nginx/config:/etc/nginx
- /srv/ssl:/srv/ssl
networks:
default:
external:
name: app_network
#应用程序服务docker-compose.yml
版本:“3”
服务:
app_服务:
重新启动:始终
容器名称:应用程序服务
图片:
网络:
违约:
外部:
名称:app_network
#nginx配置
服务器{
监听443sslhttp2;
听[:]:443sslhttp2;
服务器名称app.example.com;
地点/{
代理通行证http://app_service:8080;
包括proxy.conf;
}
ssl_证书/srv/ssl/.crt;
ssl\u证书\u密钥/srv/ssl/.key;
}
以下是一种适合我的方法:
# nginx config
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name app.example.com;
location / {
set $upstream app_service:8080;
proxy_pass $upstream;
include proxy.conf;
}
ssl_certificate /srv/ssl/.crt;
ssl_certificate_key /srv/ssl/.key;
}
如果主机不可用并且在启动时未检查可用性,则会导致出现502坏网关
消息
# nginx config
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name app.example.com;
location / {
proxy_pass http://app_service:8080;
include proxy.conf;
}
ssl_certificate /srv/ssl/<mycert>.crt;
ssl_certificate_key /srv/ssl/<mykey>.key;
}
# nginx config
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name app.example.com;
location / {
set $upstream app_service:8080;
proxy_pass $upstream;
include proxy.conf;
}
ssl_certificate /srv/ssl/.crt;
ssl_certificate_key /srv/ssl/.key;
}