CentOS LNMP常见问题及解决方案
原因:Nginx无法连接到PHP-FPM进程,常见于PHP-FPM服务未启动、fastcgi_pass地址错误或进程数不足。
解决方案:
systemctl status php-fpm,若未运行则启动:systemctl start php-fpm;fastcgi_pass指向正确(如Unix socket:unix:/var/run/php-fpm/php-fpm.sock或IP端口:127.0.0.1:9000),并与PHP-FPM配置(/usr/local/php/etc/php-fpm.conf或/etc/php-fpm.d/www.conf)一致;pool段中增加pm.max_children(如设为50,根据服务器内存调整),避免进程数不足导致连接失败。原因:Nginx配置文件(如/etc/nginx/nginx.conf或站点配置文件)存在语法错误,导致服务无法启动或重载。
解决方案:
nginx -t,若报错会提示错误位置(如“invalid parameter”或“unexpected ‘}’”);systemctl reload nginx。原因:Nginx进程用户(如nginx)与PHP-FPM进程用户不一致,或网站文件/目录权限不足(如root所有导致Nginx无法读取)。
解决方案:
/etc/nginx/nginx.conf)中的user为www-data(或nginx),并在PHP-FPM配置(/usr/local/php/etc/php-fpm.conf或/etc/php-fpm.d/www.conf)中设置user = www-data、group = www-data,重启服务:systemctl restart nginx php-fpm;/var/www/html)所有者设为www-data:www-data,文件权限设为644(chmod 644 /var/www/html/*),目录权限设为755(chmod 755 /var/www/html)。原因:防火墙未开放HTTP(80)/HTTPS(443)端口,或SELinux处于Enforcing模式阻止Nginx/PHP-FPM进程访问文件。
解决方案:
firewall-cmd --permanent --zone=public --add-service=http、firewall-cmd --permanent --zone=public --add-service=https,然后重载:firewall-cmd --reload;Permissive模式测试(setenforce 0),若问题解决则永久修改:编辑/etc/selinux/config,将SELINUX=enforcing改为SELINUX=permissive,重启系统;或添加SELinux布尔值允许Nginx访问数据库:setsebool -P httpd_can_network_connect_db 1。原因:配置文件语法错误、端口冲突(如9000端口被占用)、依赖库缺失(如libevent)。
解决方案:
php-fpm -t,修复报错(如listen地址格式错误);netstat -tuln | grep 9000,若被占用则修改PHP-FPM配置中的listen端口(如9001);yum install libevent libevent-devel -y,重新编译PHP-FPM。原因:配置文件错误(如/etc/my.cnf中datadir路径不存在)、端口冲突(3306被占用)、数据目录权限问题。
解决方案:
mysqld --validate-config,修复datadir等参数错误;netstat -tuln | grep 3306,修改my.cnf中的port为其他端口(如3307);chown -R mysql:mysql /var/lib/mysql(默认数据目录),重启服务:systemctl restart mariadb。fileinfo、imagick)原因:安装PHP时未启用扩展,或扩展未正确安装。
解决方案:
php.sh(如将with_fileinfo='--disable-fileinfo'改为--enable-fileinfo),重新运行脚本;addons.sh脚本(如./addons.sh install fileinfo),或手动编译安装(如imagick:yum install ImageMagick-devel -y,然后/usr/local/php/bin/phpize、./configure --with-php-config=/usr/local/php/bin/php-config、make && make install,最后在php.ini中添加extension="imagick.so")。原因:Nginx服务未启动、域名未解析到服务器IP、防火墙阻止访问。
解决方案:
systemctl status nginx,若未运行则启动:systemctl start nginx;nslookup yourdomain.com确认解析到服务器IP;firewall-cmd --list-all,确保http和https服务已添加,若未添加则执行firewall-cmd --permanent --zone=public --add-service=http、firewall-cmd --permanent --zone=public --add-service=https,然后重载。