我有 2 个运行 nginx 的 docker 容器。第一个容器充当反向代理,将流量引导到第二个容器。第二个容器是网站文件所在的位置。代理容器的端口 80 和 443 向公众公开。
对于 HTTPS,我的目的是让代理容器将流量引导到实际网站容器上的 nginx 来处理 SSL。
通过这种方式,我希望可以使代理容器上的 nginx 配置文件更简单、更容易维护,因为 SSL 配置都是由各自网站容器中的 nginx 设置和处理的。
这是代理容器的 nginx 配置文件:
upstream mywebsite {
server website-container;
}
server {
listen 80 default deferred;
listen 443 deferred;
server_name mywebsite.com www.mywebsite.com;
location / {
proxy_pass $scheme://mywebsite;
}
}
... other server blocks for other domains ...
website-container
以下是代理容器将“代理传递”到的容器的 nginx 配置文件:
server
{
listen 80;
server_name mywebsite.com;
return 301 https://www.mywebsite.com$request_uri;
}
server
{
listen 443;
listen [::]:443 ssl http2;
server_name mywebsite.com;
ssl_certificate /var/www/html/cert.pem;
ssl_certificate_key /var/www/html/key.pem;
root /var/www/html;
}
但是,当我通过 HTTPS 访问该网站时,总是收到连接被拒绝错误。
我尝试删除重定向到 HTTPS,HTTP 站点似乎可以正常工作。因此,错误一定与 HTTPS 或端口 443 有关。
我的配置文件有什么问题吗?我怎样才能让代理容器将 HTTPS 流量交给网站容器中的 nginx website-container
?