You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

UFW+Docker环境下关闭主机80/443端口后,如何让Tinyproxy容器访问Nginx后端服务器

UFW+Docker环境下关闭主机80/443端口后,如何让Tinyproxy容器访问Nginx后端服务器

我太懂你现在的困扰了——想把主机的80、443端口对外彻底封死,只让Tinyproxy容器的流量能进到Nginx后端,但之前配的UFW规则完全没起作用。这其实是Docker和UFW的默认交互逻辑在搞鬼,咱们一步步拆解解决:

第一步:先把流量路径掰正

你之前大概率是让Tinyproxy转发请求到主机的80/443端口,但现在主机端口关了,自然连不上。正确的姿势是让Tinyproxy直接访问Nginx容器的IP或者服务名,绕开主机端口:

  • 如果不想修改原有网络架构,可以把Tinyproxy临时接入Nginx的网络(不影响它原有的网络配置):
    docker network connect <你的Nginx容器所在网络名> <你的Tinyproxy容器名>
    
    之后Tinyproxy就能直接用Nginx的容器名(比如nginx-service)访问,不用再走主机IP了。
  • 要是不想跨网络连接,也可以用docker inspect <nginx容器名> | grep "IPAddress"拿到Nginx的容器IP,直接让Tinyproxy转发到这个IP的80/443端口。

第二步:让Docker尊重UFW规则(关键!)

默认情况下,Docker会直接修改系统的iptables规则,完全绕过UFW的配置,这就是你之前加了UFW规则但没用的核心原因。咱们改一下Docker的配置:

  1. 编辑(没有就新建)Docker的配置文件:
    sudo nano /etc/docker/daemon.json
    
  2. 加入以下内容,禁用Docker自动修改iptables的功能:
    {
      "iptables": false
    }
    
  3. 重启Docker服务让配置生效:
    sudo systemctl restart docker
    

第三步:配置正确的UFW规则

现在Docker不会乱改iptables了,咱们来加精准的允许规则:
假设Tinyproxy所在的Docker子网是192.168.20.0/24,Nginx所在的子网是192.168.10.0/24,执行以下命令:

# 允许Tinyproxy子网访问Nginx子网的80、443端口
sudo ufw allow from 192.168.20.0/24 to 192.168.10.0/24 port 80/tcp
sudo ufw allow from 192.168.20.0/24 to 192.168.10.0/24 port 443/tcp

# 彻底关闭主机对外的80、443端口
sudo ufw deny 80/tcp
sudo ufw deny 443/tcp

# 重新加载UFW规则
sudo ufw reload

第四步:更新Nginx的访问限制

之前你只允许了Nginx网关IP192.168.10.1,现在Tinyproxy的流量会来自它自己的子网192.168.20.0/24,所以要把这个网段加到Nginx的允许列表里:
在Nginx的server块里修改规则:

allow 192.168.10.1;
allow 192.168.20.0/24;
deny all;

修改完后重启Nginx容器:

docker restart <你的Nginx容器名>

最后验证一下

  • 用外部机器测试主机的80/443端口:比如nc -zv <你的主机公网IP> 80,应该显示连接失败,说明对外端口确实关了。
  • 测试Tinyproxy的转发功能:通过Tinyproxy访问后端服务,看是否能正常响应,同时检查Nginx的日志,确认流量来自Tinyproxy的子网IP。

备注:内容来源于stack exchange,提问作者Vinicius Gonçalves Melo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.23 11:19:51