当Nginx无法正确处理PHP文件时,通常是由于配置问题导致的。以下是常见原因及解决方法:
# 检查PHP-FPM是否运行
systemctl status php-fpm # 对于较新系统
service php-fpm status # 对于较旧系统
# 如果未运行,启动服务
systemctl start php-fpm
service php-fpm start
确保在Nginx配置文件中包含PHP处理指令:
location ~ \.php$ {
try_files $uri =404;
fastcgi_pass unix:/var/run/php-fpm.sock; # 或127.0.0.1:9000
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
确保Nginx用户(通常是www-data或nginx)有权限访问PHP文件:
# 更改文件所有者
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 {} \;
检查/etc/php-fpm.d/www.conf
(路径可能因系统而异):
listen = /var/run/php-fpm.sock # 或127.0.0.1:9000
listen.owner = www-data
listen.group = www-data
listen.mode = 0660
# 测试Nginx配置
nginx -t
# 重启服务
systemctl restart nginx php-fpm
service nginx restart && service php-fpm restart
在网站根目录创建info.php
文件:
<?php phpinfo(); ?>
访问http://yourdomain.com/info.php
查看是否显示PHP信息页面。
SELinux阻止访问:
setenforce 0 # 临时禁用SELinux
# 或设置正确的SELinux上下文
chcon -R -t httpd_sys_content_t /var/www/html
防火墙阻止端口:
firewall-cmd --permanent --add-service=http
firewall-cmd --permanent --add-service=https
firewall-cmd --reload
PHP扩展缺失:
# 安装常见PHP扩展
apt install php-mysql php-gd php-mbstring php-curl # Debian/Ubuntu
yum install php-mysql php-gd php-mbstring php-curl # CentOS/RHEL
如果问题仍然存在,请检查Nginx和PHP-FPM的错误日志以获取更多信息:
- Nginx错误日志:/var/log/nginx/error.log
- PHP-FPM错误日志:/var/log/php-fpm.log
或/var/log/php7.x-fpm.log