在 Ubuntu 等 Debian 系统中,若启用 firewalld(非默认),需手动添加富规则放行 HTTP/HTTPS:先确认 firewalld 运行且为默认后端,再用 --add-service 或 --add-rich-rule 添加规则,最后执行 --reload 生效。

在 Ubuntu 或其他基于 Debian 的系统中,Nginx 通常通过 apt 安装,但默认不自动配置防火墙。若系统启用了 firewalld(注意:Ubuntu 默认用 ufw,firewalld 需手动安装并启用),需手动添加富规则放行 HTTP/HTTPS 流量。
确认 firewalld 是否运行且为默认防火墙
Ubuntu 默认不启用 firewalld,若你已切换使用它,请先验证状态:
- 运行
sudo systemctl status firewalld,确保显示 active (running) - 检查是否为默认后端:
sudo firewall-cmd --state应返回 running - 若提示
Command 'firewall-cmd' not found,说明未安装:sudo apt install firewalld,再启用:sudo systemctl enable --now firewalld
添加 Nginx 对应的富规则(HTTP/HTTPS)
富规则(rich rules)支持更精细的控制,例如按服务、端口、源 IP 或目标地址限制。对 Nginx,常用两种写法:
-
按服务名放行(推荐):
sudo firewall-cmd --permanent --add-service=httpsudo firewall-cmd --permanent --add-service=https -
按端口+协议写富规则(显式控制):
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="0.0.0.0/0" port port="80" protocol="tcp" accept'sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="0.0.0.0/0" port port="443" protocol="tcp" accept'
⚠️ 注意:--permanent 表示持久化生效,执行后必须运行 sudo firewall-cmd --reload 才真正生效。
验证规则是否生效并测试访问
配置完成后,快速检查:
- 列出当前所有富规则:
sudo firewall-cmd --list-rich-rules - 查看开放的服务:
sudo firewall-cmd --list-services,应含 http https - 确认 Nginx 正在监听:
sudo ss -tlnp | grep ':80\|:443' - 从另一台机器用
curl -I http://your-server-ip测试响应,状态码应为 200 或 301
可选:限制访问来源或禁用默认 HTTP(仅 HTTPS)
如需增强安全,可用富规则进一步约束:
- 只允许特定子网访问 HTTP:
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" port port="80" protocol="tcp" accept' - 拒绝所有 HTTP 访问,仅保留 HTTPS:
sudo firewall-cmd --permanent --remove-service=httpsudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" port port="443" protocol="tcp" accept' - 每次修改后别忘:
sudo firewall-cmd --reload

















