连接被拒绝:docker容器中的Nginx HTTPS反向代理

连接被拒绝:docker容器中的Nginx HTTPS反向代理,nginx,https,docker,proxy,reverse-proxy,Nginx,Https,Docker,Proxy,Reverse Proxy,我想在docker容器ubuntu/centos上用nginx设置https反向代理。在浏览器端,我收到连接被拒绝错误。而且,我在/var/log/nginx/access.log或/var/log/nginx/error.log下看不到任何内容 我可以在docker容器上再次使用nginx设置http反向代理。另外,在普通的ubuntu和centos虚拟机上使用nginx反向代理 可以理解为什么docker容器上带有nginx的https反向代理无法从浏览器连接 如果需要任何其他信息,我可以提

我想在docker容器ubuntu/centos上用nginx设置
https
反向代理。在浏览器端,我收到
连接被拒绝
错误。而且,我在
/var/log/nginx/access.log
/var/log/nginx/error.log
下看不到任何内容

我可以在docker容器上再次使用nginx设置
http
反向代理。另外,在普通的ubuntu和centos虚拟机上使用nginx反向代理

可以理解为什么docker容器上带有nginx的
https
反向代理无法从浏览器连接

如果需要任何其他信息,我可以提供给你。提前谢谢

如需参考,请检查此
站点可用/默认
文件

    server {
      listen 80;
      server_name localhost;
      return 301 https://$host$request_uri;
    }

    server {
      listen 443 ssl;
      server_name localhost;

      ssl_certificate /etc/nginx/ssl/cert.pem;
      ssl_certificate_key /etc/nginx/ssl/cert.key;

      ssl on;
      ssl_session_cache  builtin:1000  shared:SSL:10m;
      ssl_protocols  TLSv1 TLSv1.1 TLSv1.2;
      ssl_ciphers HIGH:!aNULL:!eNULL:!EXPORT:!CAMELLIA:!DES:!MD5:!PSK:!RC4;
      ssl_prefer_server_ciphers on;

      location ~* /rabbitmq/(.*) {
        rewrite ^\/rabbitmq\/(.*)$ /$1 break;
        proxy_pass http://127.0.0.1:15672;
        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-NginX-Proxy true;
        proxy_redirect http:// https://;
      }

      location ~* /api/(.*) {
        rewrite ^/api/(.*)$ /$1 break;
        proxy_pass http://127.0.0.1:3000;
        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-NginX-Proxy true;
        proxy_redirect http:// https://;
      }
    }
谢谢,
Ganesh

您可能在“网桥”网络模式下运行您的容器(这是默认模式),这意味着您的127.0.0.1不是您所认为的。它将为运行nginx的容器使用虚拟化网络适配器。要快速修复它,您可以添加

--net=host

docker run命令的参数。还有其他选项,但我需要了解更多有关您的设置和要求的信息,才能提出建议。

看来,我需要同时公开HTTP和HTTPS端口,因为nginx反向代理配置为仅服务HTTPS流量

docker run -d -p 80:80 -p 443:443 nginx-container

当我开始公开HTTPS端口时,它就工作了。

如果您提供用于启动的命令,这将非常有用it@manojprashantk
#docker run-d-p 80:80 nginx container
您尝试过建议的答案吗?作者:安德烈·乔森科。我认为港口有问题。在您的nginx容器中,3000端口是否打开?就像我们在创建docker映像时给EXPOSE 3000一样。您给出了吗?在我的例子中,运行在端口80、443和以上配置上的nginx服务器意味着将请求传递到端口3000和15672上的代理服务器。所以,我在Dockerfile中暴露了80个。看,我还必须公开443才能允许https。这在我的
docker run
命令中缺失。现在,命令应该是
#docker run-d-p80:80-p443:443 nginx container
。谢谢@manojprashantk的帮助。哎呀,我没有注意到端口443。是的,这应该可以解决您的问题。我错了,似乎在执行https反向代理时需要公开https端口443和http端口80,如上所述的配置。现在,它适用于命令
#docker run-d-p80:80-p443:443 nginx container
。感谢您的输入。情况并非完全相同,但了解certbot通信通过HTTP而不是HTTPS工作,帮助我找到了解决方案。