LNMP(Linux+Nginx+MySQL/MariaDB+PHP)环境中,连接问题通常涉及服务状态、网络配置、权限设置或配置文件错误。以下是系统化的排查与解决步骤:
检查服务状态:
使用systemctl命令确认Nginx、MySQL/MariaDB、PHP-FPM服务是否启动:
systemctl status nginx # 检查Nginx状态
systemctl status mysqld # 检查MySQL状态(CentOS 7)
systemctl status mariadb # 检查MariaDB状态(CentOS 8+)
systemctl status php-fpm # 检查PHP-FPM状态
若服务未启动,使用systemctl start <服务名>启动,并通过systemctl enable <服务名>设置开机自启。
检查进程是否存在:
使用ps命令确认关键进程是否运行:
ps aux | grep nginx # 检查Nginx进程
ps aux | grep mysqld # 检查MySQL进程
ps aux | grep php-fpm # 检查PHP-FPM进程
若进程不存在,需重启对应服务。
测试网络连通性:
使用ping命令检查客户端与服务器之间的网络连接:
ping <服务器IP>
若无法ping通,需排查网络配置(如防火墙、路由器设置)。
检查防火墙设置:
CentOS默认启用firewalld,需开放Nginx(80/443端口)、MySQL(3306端口):
firewall-cmd --permanent --zone=public --add-port=80/tcp # 开放HTTP端口
firewall-cmd --permanent --zone=public --add-port=443/tcp # 开放HTTPS端口
firewall-cmd --permanent --zone=public --add-port=3306/tcp # 开放MySQL端口
firewall-cmd --reload # 重新加载防火墙规则
检查端口监听状态:
使用ss或netstat命令确认服务是否监听正确端口:
ss -tuln | grep ':80' # 检查Nginx端口
ss -tuln | grep ':3306' # 检查MySQL端口
ss -tuln | grep ':9000' # 检查PHP-FPM默认端口(需与配置一致)
若端口未监听,需检查服务配置文件中的listen指令(如Nginx的listen 80;、PHP-FPM的listen = 127.0.0.1:9000)。
检查Nginx配置文件:
Nginx的主配置文件通常位于/usr/local/nginx/conf/nginx.conf或/etc/nginx/nginx.conf,虚拟主机配置在/usr/local/nginx/conf/conf.d/或/etc/nginx/conf.d/。常见问题:
listen 8080;但防火墙未开放8080);server_name配置错误(如未匹配访问域名);fastcgi_pass指向错误)。nginx -t测试配置文件语法:nginx -t
若语法错误,根据提示修改后重启Nginx:systemctl restart nginx。
检查PHP-FPM配置文件:
PHP-FPM的主配置文件通常位于/usr/local/php/etc/php-fpm.conf或/etc/php-fpm.conf,池配置在/usr/local/php/etc/php-fpm.d/www.conf。常见问题:
listen地址与Nginx的fastcgi_pass不一致(如Nginx配置fastcgi_pass 127.0.0.1:9000;,但PHP-FPM配置listen = /tmp/php-fpm.sock);listen.owner/listen.group权限错误(需与Nginx运行用户一致,通常为www)。systemctl restart php-fpm。检查MySQL配置文件:
MySQL的主配置文件通常位于/etc/my.cnf或/etc/mysql/my.cnf。常见问题:
bind-address设置为127.0.0.1,导致无法远程连接(需改为0.0.0.0);systemctl restart mysqld。Nginx与PHP-FPM用户一致性:
Nginx默认运行用户为www,PHP-FPM的www.conf中需设置相同的user和group:
user = www
group = www
listen.owner = www
listen.group = www
修改后重启PHP-FPM。
文件/目录权限:
/usr/local/nginx/html):chown -R www:www /usr/local/nginx/html
chmod -R 755 /usr/local/nginx/html
wp-content/uploads):chmod -R 777 /usr/local/nginx/html/wp-content/uploads
Nginx错误日志:
通常位于/usr/local/nginx/logs/error.log或/var/log/nginx/error.log,记录HTTP请求错误(如404、500、502)。使用tail命令查看最新日志:
tail -f /usr/local/nginx/logs/error.log
PHP-FPM错误日志:
通常位于/var/log/php-fpm/www-error.log或/usr/local/php/var/log/php-fpm.log,记录PHP脚本错误(如语法错误、数据库连接失败)。
MySQL错误日志:
通常位于/var/log/mysqld.log或/var/log/mysql/error.log,记录数据库连接、认证错误(如密码错误、权限不足)。
502 Bad Gateway(Nginx→PHP-FPM连接失败):
fastcgi_pass地址错误、PHP-FPM端口被占用。systemctl start php-fpm)、检查Nginx中的fastcgi_pass指令(需与PHP-FPM的listen一致)、重启PHP-FPM。数据库连接失败(WordPress/PHP应用):
bind-address限制、数据库未授权。wp-config.php中的DB_HOST、DB_USER、DB_PASS)、修改MySQL的bind-address为0.0.0.0、授权用户远程访问:GRANT ALL PRIVILEGES ON mydb.* TO 'myuser'@'%' IDENTIFIED BY 'mypassword';
FLUSH PRIVILEGES;
无法访问网站(Nginx端口未开放):
firewall-cmd --add-port=80/tcp)、检查Nginx配置中的listen 80;、重启Nginx。通过以上步骤,可系统性排查并解决CentOS LNMP环境中的连接问题。若问题仍未解决,建议结合具体错误日志进一步分析。