当Nginx无法正确处理PHP文件时,通常会出现502 Bad Gateway、404 Not Found或直接下载PHP文件等问题。以下是常见原因及解决方案:
# 检查PHP-FPM状态
systemctl status php-fpm # 或 php7.4-fpm/php8.0-fpm等
# 启动PHP-FPM服务
systemctl start php-fpm
systemctl enable php-fpm
确保Nginx配置中包含PHP处理指令:
location ~ \.php$ {
fastcgi_pass unix:/run/php/php7.4-fpm.sock; # 根据实际版本修改
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
# 设置正确的文件和目录权限
chown -R www-data:www-data /var/www/html # 根据实际用户组修改
find /var/www/html -type d -exec chmod 755 {} \;
find /var/www/html -type f -exec chmod 644 {} \;
检查PHP-FPM配置中的socket路径:
# 查看PHP-FPM配置
cat /etc/php/7.4/fpm/pool.d/www.conf | grep listen
确保Nginx配置中的fastcgi_pass
与PHP-FPM的listen
一致。
# 安装常见PHP扩展
apt install php-mysql php-curl php-gd php-mbstring php-xml php-zip
检查错误日志:
tail -f /var/log/nginx/error.log
tail -f /var/log/php7.4-fpm.log
测试PHP-FPM:
# 创建测试文件
echo "<?php phpinfo(); ?>" > /var/www/html/info.php
然后访问http://your-server/info.php
验证配置:
nginx -t
php-fpm7.4 -t # 根据版本调整
server {
listen 80;
server_name example.com;
root /var/www/html;
index index.php index.html;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php7.4-fpm.sock;
}
location ~ /\.ht {
deny all;
}
}
希望这些解决方案能帮助您解决Nginx处理PHP的问题。如果问题仍然存在,请提供具体的错误信息以便进一步诊断。