Nginx的错误日志是排查问题的核心依据,Ubuntu下默认路径为/var/log/nginx/error.log。使用以下命令实时查看最新错误信息(如启动失败、500/502错误等):
sudo tail -f /var/log/nginx/error.log
日志中会明确提示错误类型(如配置语法错误、端口占用、权限不足),是后续排查的基础。
配置文件语法错误是Nginx无法启动的常见原因。使用以下命令检查/etc/nginx/nginx.conf(主配置文件)及/etc/nginx/sites-enabled/下的站点配置文件:
sudo nginx -t
若输出Syntax is ok则表示语法正确;若报错(如缺少分号、括号不匹配、路径错误),需根据提示修正配置文件,修正后再次运行nginx -t确认无误。
Nginx默认使用80(HTTP)和443(HTTPS)端口,若这些端口被其他进程(如Apache、旧版Nginx)占用,会导致启动失败。使用以下命令查看端口占用:
sudo netstat -tulnp | grep -E ':80|:443'
# 或更详细的lsof命令
sudo lsof -i :80
若发现冲突进程,可通过kill -9 <PID>终止该进程,或修改Nginx配置文件中的listen指令更换端口(如listen 8080;)。
Nginx进程(通常为www-data用户)需要对网站目录及文件有读取权限,否则会出现403 Forbidden或Permission denied错误。执行以下命令修复权限:
# 将网站目录所有者设为www-data
sudo chown -R www-data:www-data /var/www/html
# 设置目录权限为755(文件为644)
sudo chmod -R 755 /var/www/html
若仍存在权限问题,可检查SELinux状态(Ubuntu默认未启用,若启用需调整策略):
getenforce # 查看SELinux状态(Enforcing/Permissive/Disabled)
若Nginx作为反向代理(如搭配PHP-FPM),需确保后端服务正常运行。使用以下命令检查服务状态:
# 检查PHP-FPM(根据版本调整,如php7.4-fpm、php8.2-fpm)
sudo systemctl status php-fpm
# 检查MySQL/MariaDB
sudo systemctl status mysql
若服务未运行,启动对应服务:
sudo systemctl start php-fpm
sudo systemctl start mysql
同时,需确认Nginx配置文件中proxy_pass或fastcgi_pass指向的后端地址(如http://127.0.0.1:9000)与PHP-FPM监听端口一致。
若系统资源(如内存、磁盘空间、文件描述符)不足,会导致Nginx无法启动或响应缓慢。
df -lh
若/var或/分区占用100%,需清理无用文件(如日志、缓存)或扩容磁盘。free -h
若内存不足,可优化Nginx配置(如减少worker_processes、调整keepalive_timeout)。/etc/security/limits.conf,添加以下内容(允许单个用户最多打开65535个文件):* soft nofile 65535
* hard nofile 65535
同时,在/etc/nginx/nginx.conf的worker_processes下方添加:worker_rlimit_nofile 65535;
完成上述排查与修复后,重启Nginx使更改生效:
# Systemd系统(Ubuntu 16.04+)
sudo systemctl restart nginx
# 旧版SysVinit系统
sudo service nginx restart
若重启成功,可通过sudo systemctl status nginx确认服务状态(显示active (running)即为正常)。
/var/log/php-fpm.log)。telnet 127.0.0.1 9000),防火墙是否阻止连接(sudo ufw status)。root或alias指令是否指向正确路径,确保请求的文件存在于指定目录。