nginx -t 检测报错 怎么处理?
美国、香港服务器
nginx -t 检测报错 怎么处理?
10-08 来源:
## 一、第一步:读取报错信息(最重要)
示例报错:
nginx: [emerg] unknown directive "set" in /www/server/panel/vhost/nginx/xxx.conf:22
nginx: configuration file /www/server/nginx/conf/nginx.conf test failed
含义:在 `xxx.conf` **第 22 行**存在错误。
提示:很多时候报错行是**下一行**,需要向上看 1 行找缺失符号。
## 二、高频错误(你配置高防回源白名单最容易踩坑)
### 1. 缺少分号 `;`(最高发)
❌错误
set $real_ip $remote_addr
✅正确,每行结尾必须加分号
set $real_ip $remote_addr;
### 2. 大括号 {} 不匹配(多一个或少一个})
server {
listen 80;
#少了末尾的},直接报 unexpected "}"
技巧:宝塔编辑器看缩进,成对检查 `{` 和 `}`
### 3. allow/deny IP 白名单语法错误(高防配置常见)
❌错误:网段后面多余空格、缺少 CIDR
allow 1.1.1.0/24 #少分号
deny all
✅正确
allow 1.1.1.0/24;
deny all;
`deny all;` 写在 location {} 内部,**不要写在 server {} 外层**,放外层会直接拦截面板、所有站点。
### 4. unknown directive 未知指令
两种原因:
1. 单词拼写错误(比如把 `proxy_set_header` 写错)
2. 用了模块指令,但 Nginx 没有安装对应模块(如 geoip、headers-more)
宝塔:软件商店→Nginx→设置,安装对应模块。
### 5. SSL 证书文件不存在 / 路径错误
ssl_certificate /xxx/xxx.crt;
证书文件丢失、路径写错、权限不足。
宝塔 SSL 界面重新保存证书,自动修复路径。
### 6. duplicate default server(重复 default_server)
多个站点同时写 `listen 80 default_server;`
只保留 1 个站点带 default_server,其余删掉。
### 7. 正则表达式错误(rewrite 伪静态)
`*` 不能单独写,要写 `.*`
错误写法:`^*test` →正确:`^.*test`宝塔面板
## 三、宝塔快速应急修复方法
方案 A:直接在面板修复(推荐)
1. 网站 → 站点【设置】→【配置文件】
2. 跳转到报错提示的行号,修改语法
3. 保存,在宝塔终端执行:`nginx -t`
4. 返回 `test is successful` 再重载 `nginx -s reload`
方案 B:临时恢复(改错后网站打不开,应急回滚)
1. 打开站点配置,**把你新增的自定义代码(X-Forwarded-For、allow 白名单)全部注释**,行前面加`#`
2. 保存,执行`nginx -t`测试,成功就重载,业务先恢复,再逐段加配置排查。
分段排查技巧:**一段一段粘贴配置**,不要一次性把一大段代码全部贴进去。贴一段就`nginx -t`测一次,快速定位出错代码。
## 四、查看 Nginx 错误日志辅助排查
tail -n 100 /www/server/nginx/logs/nginx.error.log
三二互联专业提供香港VPS,美国VPS主机,香港云服务器租用等业务香港美国到大陆CN2 GIA速度最快