1.Nginx安装与ufw防火墙实操完整总结(含命令+全部踩坑)

2026年5月5日 Nginx 10 分钟阅读 3 次阅读
📖 文章摘要

本文详解 Ubuntu 安装 Nginx 与 ufw 防火墙全套命令,汇总实操踩坑,附带 Nginx 日志查看、统计与故障排查方法。

Nginx安装与ufw防火墙实操完整总结(含命令+全部踩坑)

一、Nginx安装相关操作

更新软件源索引:

sudo apt update

一键安装Nginx(自动确认安装):

sudo apt install nginx -y

二、Nginx服务管理全套命令

错误写法(无 sudo,会触发权限验证弹窗):

systemctl start nginx

标准正确操作:

# 启动Nginx服务
sudo systemctl start nginx
# 设置开机自启
sudo systemctl enable nginx
# 查看运行状态,确认active(running)
sudo systemctl status nginx
# 修改配置后完整重启服务
sudo systemctl restart nginx
# 重载配置,不中断在线访问
sudo systemctl reload nginx
# 校验配置文件语法错误
sudo nginx -t
# 本地测试网页是否正常输出
curl localhost

三、ufw防火墙完整操作命令

# 查看系统内置防火墙应用模板
sudo ufw app list
# 基础查看防火墙状态
sudo ufw status
# 详细模式查看防火墙状态
sudo ufw status verbose
# 放行SSH远程登录端口(必须优先执行)
sudo ufw allow ssh
# 标准放行80/443,严格匹配大写名称
sudo ufw allow 'Nginx Full'
# 错误放行写法:小写名称,仅生成自定义标签,不会自动开放网页端口
sudo ufw allow 'nginx full'
# 删除错误小写规则
sudo ufw delete allow 'nginx full'
# 启用防火墙,弹窗输入y确认开启
sudo ufw enable

四、本次实操全部踩坑记录

踩坑1:systemctl操作不加sudo

现象:终端弹出身份验证,要求输入服务器登录密码

原理:系统服务属于root权限操作,普通用户无操作权限

解决:所有systemctl命令前追加sudo

踩坑2:ufw未激活(inactive)时看不到放行规则

现象:sudo ufw status仅输出Status: inactive,无端口列表

原理:防火墙关闭时规则仅保存配置,不会加载运行

解决:执行sudo ufw enable激活防火墙后才能查看完整规则

踩坑3:使用小写'nginx full'放行端口

现象:提示规则更新成功,但不会自动开放80、443;删除该规则时会模糊匹配,连带删掉大写'Nginx Full',网站端口被拦截

两种规避方案:

方案1:严格使用大写模板名称

sudo ufw allow 'Nginx Full'

方案2:直接放行数字端口,无大小写匹配bug(推荐)

sudo ufw allow 80/tcp
sudo ufw allow 443/tcp

踩坑4:混用防火墙命令firewall-cmd

现象:Ubuntu执行firewall-cmd --list-all提示命令不存在

原理:firewall-cmd是CentOS、红帽系专用;Ubuntu默认防火墙工具为ufw,两套工具不互通

解决:全程仅使用ufw系列命令

踩坑5:只配置本机ufw,忽略腾讯云安全组

现象:服务器内部curl localhost正常,外网浏览器无法访问网站

原理:腾讯云存在双层防护,系统ufw + 云端安全组,安全组未开放80/443外网直接拦截

解决:登录腾讯云控制台,实例安全组添加入站规则放行80、443端口

踩坑6:开启防火墙前未放行ssh端口

风险:开启ufw后22端口阻断,直接断开远程连接,无法再次登录服务器

解决:启用防火墙前先执行sudo ufw allow ssh

五、无坑推荐防火墙完整配置(直接放行端口)

# 放行远程登录
sudo ufw allow 22/tcp
# 放行网页http、https
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
# 开启防火墙
sudo ufw enable
# 核对放行规则
sudo ufw status

六、Nginx 日志查看(运维日常核心操作)

日志文件位置

默认路径:

/var/log/nginx/access.log    # 访问日志,记录每一次请求
/var/log/nginx/error.log     # 错误日志,记录配置错误、后端异常等

如果你的 server 块里单独配了 access_log,日志会写到你指定的路径。

access.log 日志格式

shturl.cc/OFB6 - - [01/Jul/2026:10:23:45 +0000] "GET /api/articles HTTP/1.1" 200 12345 "https://demo.test.com/" "Mozilla/5.0..."

每列含义:

含义
shturl.cc/OFB6 请求来源 IP
[01/Jul/2026:10:23:45 +0000] 请求时间(UTC)
GET /api/articles HTTP/1.1 请求方法 + URL路径 + 协议版本
200 HTTP 状态码
12345 响应体大小(字节)
"https://demo.test.com/" Referer(从哪个页面跳过来的)
"Mozilla/5.0..." User-Agent(浏览器/设备信息)

tail -f 实时查看日志

# 实时跟踪访问日志(新请求会自动刷出来)
sudo tail -f /var/log/nginx/access.log

# 实时跟踪错误日志
sudo tail -f /var/log/nginx/error.log

# 同时看两个日志(开两个终端窗口)
sudo tail -f /var/log/nginx/access.log
sudo tail -f /var/log/nginx/error.log

操作流程:

  1. 先执行 tail -f 看日志(终端会卡住等待)
  2. 浏览器访问你的网站
  3. 终端实时刷出访问记录
  4. Ctrl + C 退出

只看最后 N 行

tail -50 access.log    # 看最后 50 条
tail -100 error.log    # 看最后 100 条错误

grep 过滤日志

# 只看状态码 502 的请求(后端挂了)
grep " 502 " /var/log/nginx/access.log

# 只看状态码 404 的请求(路径不存在)
grep " 404 " /var/log/nginx/access.log

# 只看某个 IP 的访问
grep "shturl.cc/kvuLa" /var/log/nginx/access.log

# 只看 /api/ 路径的请求
grep "/api/" /var/log/nginx/access.log

# 组合:看 502 错误的最后 20 条
grep " 502 " /var/log/nginx/access.log | tail -20

日志分析命令(面试能讲)

# 访问量最大的前 10 个 IP
awk '{print $1}' access.log | sort | uniq -c | sort -rn | head -10

# 每个 URL 路径的访问次数
awk '{print $7}' access.log | sort | uniq -c | sort -rn | head -20

# 状态码分布统计
awk '{print $9}' access.log | sort | uniq -c | sort -rn

逐段解释:

  • awk '{print $1}' — 提取每行第1列(IP)
  • sort — 排序(相同 IP 相邻)
  • uniq -c — 去重并计数
  • sort -rn — 按数字倒序(最多在前)
  • head -10 — 只取前 10 条

实战排障流程

网站打不开时的标准排查:

# 1. 先看错误日志有没有线索
sudo tail -50 /var/log/nginx/error.log

# 2. 看访问日志,确认请求有没有到达 Nginx
sudo tail -50 /var/log/nginx/access.log

# 3. 如果 access.log 没有该请求记录 → 请求没到 Nginx(网络/防火墙问题)
# 4. 如果 access.log 有记录但状态码是 502 → 后端挂了
# 5. 如果 access.log 有记录但状态码是 403 → 权限问题
# 6. 如果 access.log 有记录但状态码是 404 → 路径配错

补充概念说明

  1. apt:Ubuntu/Debian软件包管理工具,用于更新、安装程序

  2. systemctl:系统服务管理器,管控Nginx启停、自启

  3. ufw:Ubuntu简易防火墙;(v6)代表IPv6网络规则,系统自动生成无需手动修改

  4. 识别腾讯云服务器依据:主机名VM-xxx-xx-ubuntu、软件源mirrors.cloud.example.com

说明:文中域名、IP均为教学演示虚拟地址,无真实线上服务

最后更新:2026年7月10日CC BY-NC-SA 4.0

评论

暂无评论,来写第一条吧

© 2026 My Blog. Built with Nuxt.js + FastAPI.