使用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 # 保存規則