仅使用 Nginx 反向代理启用 Docker 端口访问
Posted
技术标签:
【中文标题】仅使用 Nginx 反向代理启用 Docker 端口访问【英文标题】:Enable Docker port access only with Nginx reverse proxy 【发布时间】:2021-05-13 04:52:08 【问题描述】:我在 Centos7 上运行的 8081 端口上有一个 Docker 容器,还有一个带有 nginx 的反向代理。 我的域安装了 LetsEncrypt SSl,当我访问“https://my.example.com”时它运行良好,它会将我重定向到我的 8081 Docker。
但是当我访问“http://my.example.com:8081”时,我仍然可以访问我的 Docker 应用程序...我不想启用它...不想启用任何http 访问。
我只想通过 Nginx 反向代理访问 8081(这迫使我使用 https)...我认为这可能是我的 iptables 上的一些配置,但我没有这方面的经验。 有人可以帮我吗?
谢谢!
这是我在 Nginx 中的 conf.d 文件
server
server_name my.example.com;
location /
proxy_pass http://localhost:8081;
listen 443 ssl; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/my.example.com/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/my.example.com/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
server
if ($host = my.example.com)
return 301 https://$host$request_uri;
# managed by Certbot
listen 80;
server_name my.example.com;
return 404; # managed by Certbot
【问题讨论】:
【参考方案1】:iptables 不理解 HTTP 和 HTTPS 的区别,它只理解 ip;端口和 mac 级别,如果您尝试使用 iptables 阻止端口 8081,即使您的 https 连接将被丢弃或拒绝,具体取决于您的选择。
如果你的docker容器可以从外部访问而不通过反向代理,这是一个容器配置问题,或者如果你的nginx反向代理允许通过http数据包,那么这是一个nginx配置问题,我认为我们需要更多您身边的详细信息。
【讨论】:
我明白了!您认为我应该在此处发布哪些信息以提供帮助?我刚刚在我的 Nginx conf.d 文件上方添加了【参考方案2】:我已使用托管服务提供商 (Vultr) 的防火墙应用程序解决了此问题。 在那里,我只留下了 8081 用于本地访问,所以现在不通过 Nginx 反向代理就无法访问它!
【讨论】:
以上是关于仅使用 Nginx 反向代理启用 Docker 端口访问的主要内容,如果未能解决你的问题,请参考以下文章
如何在 docker env 中使用 nginx 反向代理通信 UI 和后端应用程序