连接被拒绝:docker容器中的Nginx HTTPS反向代理
我想在docker容器ubuntu/centos上用nginx设置连接被拒绝: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反向代理无法从浏览器连接 如果需要任何其他信息,我可以提
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工作,帮助我找到了解决方案。