首页 > 解决方案 > 仅使用 Nginx 反向代理启用 Docker 端口访问

问题描述

我在 Centos7 上运行的端口 8081 上有一个 Docker 容器,还有一个带有 Nginx 的反向代理。我的域安装了 LetsEncrypt SSl,当我访问“https://my.example.com”时它运行良好,它将我重定向到我的 8081 Docker。

但是当我访问“http://my.example.com:8081”时,我仍然可以访问我的 Docker 应用程序……我不想启用它……不想启用任何 http 访问。

我只想通过 Nginx 反向代理(这迫使我使用 https)到达 8081 ...我认为这可能是我的 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
 
 
}

标签: dockernginxreverse-proxycentos7iptables

解决方案


iptables 不理解 HTTP 和 HTTPS 的区别,它只理解 ip;端口和 mac 级别,如果您尝试使用 iptables 阻止端口 8081,即使您的 https 连接将被丢弃或拒绝,具体取决于您的选择。

如果您的 docker 容器可以从外部访问而无需通过反向代理,这是一个容器配置问题,或者如果您的 nginx 反向代理允许通过 http 数据包,那么这是一个 nginx 配置问题,我认为我们需要您提供更多详细信息边。


推荐阅读