仅使用 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 和后端应用程序

Docker-compose + Nginx SSL反向代理

nginx串联(一台反向代理,一台分发)引起问题

docker 安装 nginx 并配置反向代理

对 docker 容器使用 nginx 反向代理

为Docker创建自动化nginx反向代理