docker - 仅使用 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
}
解决方案
iptables 不理解 HTTP 和 HTTPS 的区别,它只理解 ip;端口和 mac 级别,如果您尝试使用 iptables 阻止端口 8081,即使您的 https 连接将被丢弃或拒绝,具体取决于您的选择。
如果您的 docker 容器可以从外部访问而无需通过反向代理,这是一个容器配置问题,或者如果您的 nginx 反向代理允许通过 http 数据包,那么这是一个 nginx 配置问题,我认为我们需要您提供更多详细信息边。
推荐阅读
- python - 根据其他列的条件创建新列
- python - 如何允许用户在 Django 中编辑他们的个人资料?
- python - Python - Apache Beam - Flink 运行器设置:ReadFromKafka 返回错误 - RuntimeError:无法编码空字节 []
- node.js - 如何解决 Node.js 的 New Relic 由于错误而停止启动:错误:无法连接到收集器?
- google-cloud-firestore - 检查多个文档是否存在 id Firestore 集合
- mongodb - Mongod服务退出代码2
- python - 如何在 matplotlib 图表的下侧显示值?
- javascript - 如何在 Jquery 中使用 math.round 追加值
- python-3.x - 通过 scapy 配置 STP 协议
- ms-access - 选定的前景色未显示在 Access 组合框中