我有一个具有以下架构的网站:
- 许多服务作为 docker stack 的一部分运行
- 以单个 nginx 作为反向代理
- nginx 使用 certbot 终止 HTTPS
- 本地开发
docker-compose up
- 部署到生产环境
docker stack deploy
(在 somedomain.com 指向的公共服务器上)
nginx 配置的重要部分如下所示:
server {
server_name somedomain.com;
listen 0.0.0.0:443 ssl http2 reuseport;
# Route service A to path /service-a
location /a-service {
# Trick to avoid nginx aborting at startup (set server in variable)
set $upstream_server http://service-a;
proxy_pass $upstream_server;
}
# Route service B to path /service-b
location /b-service {
# Trick to avoid nginx aborting at startup (set server in variable)
set $upstream_server http://service-b;
proxy_pass $upstream_server;
}
}
问题出现在我开发网站时。当时它在本地运行,somedomain.com 无法解析,因为我们只是在本地主机 / 127.0.0.1。也会certbot
导致问题,因为我们对本地不感兴趣HTTPS
,而且我们无法从somedomain.com。
我已经非常粗略地解决了这个问题,在本地运行时根本不将 nginx 作为堆栈的一部分,但是随着服务的复杂性和数量的增加,这变得越来越不可行。我需要能够在部署之前测试包括 nginx 在内的整个解决方案。
所以我的问题是,有什么实际的方法可以只维护一个 nginx 配置同时允许在本地启动站点以使用 HTTP 进行开发本地主机/127.0.0.1HTTPS
并且在具有域并同时在两个地方工作的生产环境中?