使用nginx -t命令(或指定配置文件路径nginx -c /path/to/config -t)测试配置文件语法。若存在语法错误,命令会明确提示错误位置(如文件名、行号)及原因(如缺少分号、括号不匹配)。例如:
sudo nginx -t
# 正确输出示例:nginx: configuration file /etc/nginx/nginx.conf test is successful
# 错误输出示例:nginx: [emerg] ";" is not allowed here in /etc/nginx/sites-available/example.conf:3
修复语法错误后再进行后续排查。
Nginx的错误日志是定位问题的核心线索,默认路径为/var/log/nginx/error.log。使用以下命令查看最新错误信息(按时间倒序排列):
sudo tail -n 50 /var/log/nginx/error.log # 查看最后50条日志
sudo tail -f /var/log/nginx/error.log # 实时跟踪日志输出(按Ctrl+C退出)
日志中常见的错误类型包括:权限不足(如无法访问网站根目录)、端口冲突、upstream服务器不可达等。
Nginx默认监听80(HTTP)和443(HTTPS)端口,若这些端口被其他进程占用,会导致启动失败。使用以下命令检查端口占用:
sudo netstat -tulnp | grep -E ':80|:443' # 查看80/443端口的占用进程
# 或使用ss命令(更高效):
sudo ss -tulnp | grep -E ':80|:443'
若端口被占用,可通过以下方式解决:
sudo kill -9 <PID>(替换为实际进程ID);listen指令(如将80改为8080)。Nginx运行用户(通常为nginx或www-data)需对网站根目录、日志文件及配置文件有读写权限。常见修复命令:
sudo chown -R nginx:nginx /var/www/html # 将网站根目录所有者设为nginx
sudo chmod -R 755 /var/www/html # 设置目录权限为755(所有者可读写执行,其他用户可读执行)
sudo chown -R nginx:nginx /var/log/nginx # 确保Nginx可写入日志文件
若权限不足,可能导致403 Forbidden(无法访问)或无法写入日志等错误。
若Nginx作为反向代理,需确保后端服务(如PHP-FPM、Node.js、Tomcat)正常运行。以PHP-FPM为例:
sudo systemctl status php-fpm # 检查PHP-FPM服务状态
sudo systemctl restart php-fpm # 重启PHP-FPM服务
若后端服务未运行,需启动对应服务并配置Nginx的upstream块(如server 127.0.0.1:9000;)指向正确地址。
若系统启用了SELinux(CentOS默认开启),可能会阻止Nginx访问某些文件或端口。可通过以下命令临时关闭SELinux测试:
sudo setenforce 0 # 临时关闭SELinux(重启后恢复)
若问题解决,需调整SELinux策略:
sudo chcon -R -t httpd_sys_content_t /var/www/html # 允许Nginx访问网站根目录
sudo semanage port -a -t http_port_t -p tcp 8080 # 若修改了端口(如8080),需添加端口策略
永久关闭SELinux(不推荐):编辑/etc/selinux/config,将SELINUX=enforcing改为SELINUX=disabled。
使用以下命令检查Nginx是否正在运行:
sudo systemctl status nginx # 查看Nginx服务状态
ps aux | grep nginx # 查看Nginx进程列表
若进程未运行,尝试启动Nginx:
sudo systemctl start nginx # 启动Nginx
sudo systemctl enable nginx # 设置开机自启
若启动失败,需结合错误日志进一步排查。
CentOS的防火墙(firewalld或iptables)可能阻止外部访问Nginx的端口。使用以下命令开放端口:
sudo firewall-cmd --permanent --add-service=http # 开放HTTP端口(80)
sudo firewall-cmd --permanent --add-service=https # 开放HTTPS端口(443)
sudo firewall-cmd --reload # 重新加载防火墙规则
若使用iptables,可添加规则:
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT
sudo service iptables save # 保存规则