Nginx的错误日志是排查启动失败的核心工具,通常位于/var/log/nginx/error.log。使用以下命令查看最新错误信息(最后50行):
sudo tail -n 50 /var/log/nginx/error.log
根据日志中的具体错误(如端口冲突、配置语法错误、权限问题等)针对性解决。
配置文件语法错误是启动失败的常见原因。使用以下命令测试配置文件(包括主配置文件/etc/nginx/nginx.conf及包含的子配置文件):
sudo nginx -t
若输出提示“syntax is ok”且“test is successful”,则配置文件无语法问题;若提示错误(如“unknown directive”),需根据提示定位错误行并修复(如修改错误的指令、补全缺失的参数)。
Nginx默认监听80(HTTP)和443(HTTPS)端口,若这些端口被其他进程占用,会导致启动失败。
sudo netstat -tulnp | grep ':80\|:443'
或使用更现代的ss命令:sudo ss -tulnp | grep ':80\|:443'
sudo kill -9 <PID>
listen指令(如将listen 80;改为listen 8080;),然后重启Nginx。Nginx运行用户(通常为nginx或www-data)需要对配置文件、日志文件、网站根目录有读取/写入权限。
sudo chown -R nginx:nginx /etc/nginx/ # 配置文件目录
sudo chown -R nginx:nginx /var/log/nginx/ # 日志目录
/var/www/html)权限不足,需调整:sudo chown -R nginx:nginx /var/www/html/
sudo chmod -R 755 /var/www/html/ # 允许用户读取和执行
注:若Nginx用户为
www-data,需将上述命令中的nginx替换为www-data。
若Nginx是通过系统服务(systemd)管理的,需确认服务状态及单元文件是否存在。
sudo systemctl status nginx
若状态为“failed”,需查看详细错误信息:sudo journalctl -u nginx -xe
sudo vim /etc/init.d/nginx
粘贴以下内容(根据实际路径修改nginx和NGINX_CONF_FILE变量),保存后赋予执行权限:chmod +x /etc/init.d/nginx
sudo chkconfig --add nginx # CentOS 6及以下
sudo systemctl daemon-reload # CentOS 7及以上
若系统启用了SELinux(CentOS默认开启),可能会阻止Nginx访问某些文件或端口。
sestatus
若输出“SELinux status: enabled”,需临时关闭SELinux(测试是否解决问题):sudo setenforce 0
若问题解决,可永久关闭SELinux(编辑/etc/selinux/config,将SELINUX=enforcing改为SELINUX=disabled),或调整SELinux策略允许Nginx访问相关资源(如日志目录、网站根目录)。若上述步骤均无法解决问题,可能是Nginx安装损坏或配置混乱。可尝试重新安装:
sudo yum remove nginx -y # CentOS 7及以下
sudo dnf remove nginx -y # CentOS 8及以上
sudo yum install epel-release -y # 安装EPEL仓库
sudo yum install nginx -y
/etc/nginx/),重装后可从备份中恢复。