新手刚用 Nginx 搭好网站,访客却说打不开,自己一看页面显示 “500 Internal Server Error”—— 刷新好几次都这样,急得不知道该点哪里。其实 Nginx 的 500 错误并不可怕,它会把错误原因记在日志里,只要找到日志、看懂日志,大部分问题都能解决。今天小编就把日志查看方法和常见错误的解决办法讲清楚,就算你刚接触 Nginx 也能跟着做。
一、为啥要看日志?日志就是 “故障说明书”
可能有人会问:“直接试各种办法不行吗,非要找日志?” 当然不行。Nginx 的 500 错误可能是配置错了,也可能是 PHP 代码有问题,还可能是权限不够 —— 瞎试的话,运气好能解决,运气不好可能越弄越糟。而日志会明明白白告诉你 “哪个文件错了”“错在哪里”,就像修电器时师傅先看故障代码,效率高多了。
小编之前帮朋友修 Nginx 服务器,没看日志前试了半小时没好,看了日志发现就是一个配置文件多了个空格,删掉就好了。
二、Nginx 日志在哪?怎么看?分步骤教你
不同服务器的日志位置可能不一样,但大多逃不出这几个地方,按顺序找:
- 先确定日志存放路径
默认情况下,Nginx 的错误日志在这两个位置:
- Linux 系统:一般在
/var/log/nginx/error.log
- 自己指定过路径:打开 Nginx 配置文件(通常是
/etc/nginx/nginx.conf
或站点配置文件),找 “error_log” 这一行,后面的路径就是日志位置(比如error_log /www/logs/nginx_error.log;
)
- 查看日志内容
找到路径后,用这两个命令查看:
- 想直接看最新日志:
cat /var/log/nginx/error.log
(把路径换成你的实际路径) - 想实时看日志(适合测试时用):
tail -f /var/log/nginx/error.log
(打开后,操作网站触发错误,日志会实时显示)
如果日志内容太多,可以用 “grep” 筛选 500 错误相关的内容:grep "500" /var/log/nginx/error.log
网友 “运维小李” 说:“我一般用 tail -f 实时看,改配置的时候一边改一边看日志,错了马上就知道,特别方便。”
三、常见日志错误及解决办法:附表格对照
把日志里常出现的错误和解决办法整理成表格,遇到时直接查:
日志里的错误提示 | 意思是什么 | 解决办法 |
---|---|---|
“Permission denied” | 没有文件访问权限 | 用chmod 755 文件名 改权限;确保 Nginx 运行用户(通常是 www)有访问权 |
“No such file or directory” | 找不到文件或文件夹 | 检查路径是否正确;确认文件是否存在;路径别用中文或特殊符号 |
“FastCGI sent in stderr: Primary script unknown” | PHP 文件找不到或路径错 | 检查 Nginx 配置里的 “root” 路径是否正确;PHP 文件是否在指定目录 |
“worker_connections are not enough” | 连接数不够 | 打开 nginx.conf,把 “worker_connections” 从 1024 改成 2048 或更高,重启 Nginx |
“invalid number of arguments in “xxx” directive” | 配置指令参数错 | 找到对应配置行,检查语法(比如少了分号、括号不匹配) |
- 权限问题最常见(Permission denied)
比如日志里显示 “open () “/www/html/index.php” failed (13: Permission denied)”,就是 Nginx 没权限访问 index.php。
解决步骤:
- 用
ls -l /www/html/index.php
查看文件权限,看是否有 “r”(读)权限。 - 用
chown -R www:www /www/html
把文件夹所有者改成 Nginx 运行用户(www 是常见用户,具体看你服务器的设置)。
- 配置文件语法错误(invalid directive)
比如日志里说 “invalid directive in /etc/nginx/conf.d/default.conf:10”,就是 10 行有语法错。
解决步骤:
- 打开该配置文件,找到第 10 行,检查是否少了分号、括号是否成对。
- 改完后用
nginx -t
检查配置是否正确,显示 “ok” 再重启 Nginx(systemctl restart nginx
)。
四、如果还解决不了:试试这 2 个通用办法
- 重启 Nginx 和 PHP
有时候是进程卡住了,重启服务能解决:
- 重启 Nginx:
systemctl restart nginx
(CentOS 系统)或service nginx restart
(Ubuntu 系统) - 重启 PHP(如果用 PHP 的话):
systemctl restart php-fpm
- 恢复默认配置
如果是改了配置后出现的错误,恢复到之前的默认配置:
- 找到配置文件的备份(如果没备份,就重新下载 Nginx 默认配置)
- 用默认配置覆盖当前配置,再一步步添加自己的设置,添加一项就用
nginx -t
检查一次。
五、自问自答:这些疑问你可能也有
问:“日志里没找到 500 相关的错误,怎么办?”
答:可能是错误没被记录,检查 nginx.conf 里的 error_log 是否开启(有没有注释掉);也可能是错误出在 PHP,这时候要去看 PHP 的日志(一般在/var/log/php-fpm/error.log
)。
问:“改了权限还是提示 Permission denied,怎么回事?”
答:可能是 SELinux 或防火墙限制了,新手可以暂时关闭 SELinux(setenforce 0
)试试,能解决的话再去配置 SELinux 规则(别一直关着,不安全)。
问:“一定要用命令行吗?有没有图形化工具?”
答:有!如果用宝塔面板之类的可视化面板,可以直接在面板里找到 “Nginx 日志” 和 “文件管理”,不用输命令,新手可以试试这种方式。
六、小编建议
看日志解决 Nginx 500 错误,核心就是 “找到日志→看懂提示→对应解决”。新手别怕命令行,常用的就 cat、tail、grep 这几个,输几次就记住了。另外,改配置文件前一定要备份,比如cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bak
,万一改错了,复制回去就行。
小编觉得最重要的是耐心,日志里的英文提示别怕,用翻译软件翻一下大概意思,再对照教程找解决办法。其实 Nginx 比想象中友好,错误提示都很明确,只要肯花时间看,大部分问题自己都能解决。
希望这些方法能帮到你,以后遇到 Nginx 500 错误,再也不用手足无措了。