不能直接用内网IP访问phpMyAdmin,因其默认仅允许127.0.0.1访问;需修改Nginx配置中location块的allow规则(如改为allow 192.168.1.0/24),确保listen为0.0.0.0:80,并检查SELinux、防火墙及PHP会话权限。

不能直接用浏览器访问内网IP打开phpMyAdmin管理页——它必须通过LNMP所在服务器的Nginx(或Apache)反向代理或本地路径提供服务,而“绑定到内网IP”实际是指让phpMyAdmin能被局域网其他机器通过该IP访问,且自身配置允许非localhost连接。
phpMyAdmin默认只监听127.0.0.1,改Nginx配置才能暴露给内网
LNMP一键包或手动部署后,phpMyAdmin通常放在 /home/wwwroot/phpmyadmin 或 /usr/share/phpMyAdmin,但Nginx默认只允许 127.0.0.1 访问其location块。不改配置,即使你把Nginx listen 改成 0.0.0.0:80,phpMyAdmin目录仍可能被 deny all 或 allow 127.0.0.1 拦住。
实操要点:
- 编辑Nginx虚拟主机配置(如
/usr/local/nginx/conf/vhost/phpmyadmin.conf或主配置里的server块) - 确认
location /或对应phpMyAdmin路径下没有deny all,且有明确放行规则 - 把
allow 127.0.0.1改成allow 192.168.1.0/24(按你局域网网段调整)或allow all(仅测试用) - 确保
listen指令不是127.0.0.1:80,而是0.0.0.0:80或具体内网IP(如192.168.1.10:80) - 执行
nginx -t && nginx -s reload生效
phpMyAdmin自身限制:$cfg['Servers'][$i]['host'] ≠ 浏览器访问地址
很多人误以为改了 $cfg['Servers'][$i]['host'] 就能让别人通过浏览器直连这个IP——其实它只控制phpMyAdmin后台连接哪个MySQL实例,和“谁可以访问phpMyAdmin网页”完全无关。
立即学习“PHP免费学习笔记(深入)”;
常见错误现象:
- 浏览器访问
http://192.168.1.10/phpmyadmin显示 403 Forbidden —— Nginx权限没放开 - 能打开登录页,但输对账号密码后跳转回登录页或报
#2002 Cannot log in to the MySQL server——$cfg['Servers'][$i]['host']填了localhost,导致PHP尝试连本机MySQL(而MySQL只绑定了内网IP或压根没开远程) - 填了目标MySQL内网IP(如
'192.168.1.100'),但PHP报Connection refused—— 目标MySQL未开启skip-networking=OFF,或bind-address仍是127.0.0.1
正确做法:
-
$cfg['Servers'][$i]['host'] = '192.168.1.100';(指向真实MySQL所在内网IP) -
$cfg['Servers'][$i]['auth_type'] = 'cookie';(避免明文存密码) - 确保目标MySQL用户授权来自phpMyAdmin服务器IP,例如:
CREATE USER 'pma'@'192.168.1.10' IDENTIFIED BY 'xxx'; GRANT ALL ON *.* TO 'pma'@'192.168.1.10';
SELinux和防火墙是静默杀手,别跳过检查
CentOS 7/8 默认启用 SELinux 和 firewalld,它们不会报错,只会静默拦截HTTP请求或MySQL连接。
必须验证的点:
- 运行
getenforce,如果是Enforcing,临时关掉:setenforce 0;长期方案是加SELinux策略,比如setsebool -P httpd_can_network_connect 1 - 检查firewalld是否放行80端口:
firewall-cmd --list-ports,没看到80/tcp就执行firewall-cmd --add-port=80/tcp --permanent && firewall-cmd --reload - 从另一台局域网机器执行
telnet 192.168.1.10 80,不通说明Nginx根本没监听或被拦了;再试telnet 192.168.1.100 3306确认MySQL连通性 - PHP错误日志(
/var/log/php-fpm/www-error.log)和Nginx错误日志(/usr/local/nginx/logs/error.log)比浏览器页面更可信
最易被忽略的是:phpMyAdmin的session保存路径(session.save_path)默认可能落在 /var/lib/php/session,如果SELinux上下文不对或目录权限为root:root且PHP进程以nginx用户运行,会导致登录后无法维持会话——表现为反复跳登录页。检查并修复权限:chown -R nginx:nobody /var/lib/php/session(根据你的PHP-FPM user/group调整)。



















