使用 nginx 作为所有 Docker 容器的反向代理

使用 nginx 作为所有 Docker 容器的反向代理

我在 Raspberry Pi 4 上运行 Docker 和一些容器化 Web 应用程序,我希望所有流量都通过 nginx 作为反向代理。

我的问题是我可以从网络中的任何设备访问 Docker 容器端口,即我绕过 nginx。

这是我的 nginx 配置:

server {
    listen 80;
    server_name myRaspi;

    location /cool {
        proxy_pass         http://127.0.0.1:5000/cool;
        proxy_http_version 1.1;
        proxy_set_header   Upgrade $http_upgrade;
        proxy_set_header   Connection keep-alive;
        proxy_set_header   Connection "Upgrade";
        proxy_set_header   Host $host;
        proxy_cache_bypass $http_upgrade;
        proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header   X-Forwarded-Proto $scheme;
    }
}

如您所见,我将 http://myRaspi/cool 的流量转发到 http://localhost:5000/cool (在 Docker 容器内运行的 Web 应用程序)。目前,我可以从网络中的任何设备访问 http://myRaspi/cool 和 http://myRaspi:5000/cool。

我跟着Docker 官方文档并配置以下内容:

iptables -I DOCKER-USER -i ext_if ! -s 192.168.174.0/24 -j DROP

执行sudo iptables --list显示新规则。
由于我的所有网络设备都在 subnet 中192.168.175,所以我希望现在所有到 http://myRaspi/cool 和 http://myRaspi:5000/cool 的流量都不应该工作(因为我阻止了除192.168.174,但我在192.168.175)。
不幸的是,这不起作用:我仍然可以访问 http://myRaspi/cool 和 http://myRaspi:5000/cool。

之后sudo reboot,以前创建的规则就消失了并且sudo iptables --list不再包含它。

由于我仍然是 Docker/Linux/nginx 网络世界的新手,因此非常感谢您帮助我配置 Docker/nginx,以便所有流量都通过 nginx 作为反向代理,并从 Raspi 外部访问容器端口不可能。

答案1

我的错误在于启动容器时暴露 Docker 端口的方式。

在我运行像这样的容器之前-p 5000:5000,现在我正在使用-p 127.0.0.1:5000:5000.这样,端口仅在本地公开,因此无法通过 http://myRaspi:5000/cool 访问。无需手动摆弄iptables

相关内容