Nginx 环境下 phpMyAdmin 的配置

phpmyadmin logo

phpMyAdmin 是一个用 PHP 写的 MySQL 数据库的可视化管理软件,可以在 Web 端很方便的对网站的数据库进行各种操作。注意,它的重点在于 MySQL 而不是 PHP。

之前用 DO 的机子的时候,装 LNMP 用了军哥的一键包,自带了 phpMyAdmin,直接放在了网站根目录下。尽管它有提示:

为了安全,建议将 phpmyadmin 目录重命名为不容易猜到的目录!

但那时候我并不知道为什么以及怎么搞。

Nginx 其实没有虚拟主机这个说法,因为它本来就是完完全全根据目录来设计并工作的。如果非要给 nginx 安上一个虚拟目录的说法,那就只有 alias 比较 “像” 了。

Nginx 服务器通过设置 alias 别名可以使特定的目录(phpmyadmin 目录)不出现在网站根目录下面, 即使网站根目录被攻破,也不会影响到 phpmyadmin 目录里面的文件。


用了 Amazon 的 Lightsail 之后,它的初始 Bitnami Nginx/LEMP 镜像也集成了 phpMyAdmin,但没有放在网站根目录,直接访问 your_ip/phpmyadmin 提示 403 Forbidden。

首先,403 错误是权限问题。用 tail -f /opt/bitnami/nginx/logs/error.log 查了 Nginx 的错误日志也发现是 access forbidden by rule。查了很多资料,了解到 Nginx 中,不在网站根目录的网页想要通过 IP 直接访问的话,用的是 alias(别名)这个东西。

网上的教程都要求新建一个 conf 写一堆规则,很让人头大。于是我直接在 Nginx 的安装目录下寻找原有的配置文件(这一点 Bitnami 做得还挺好的,初始安装的软件都位于 /opt/batnami/,phpMyAdmin 在 /opt/batnami/apps 下)。

经过查找,最常见的配置文件 /opt/bitnami/nginx/conf/nginx.conf 里有句 include "/opt/bitnami/nginx/conf/bitnami/bitnami.conf";,这个 bitnami.conf 又include 了一大堆 conf……经过地毯式的追根溯源,我终于发现了控制 phpMyAdmin 的那条 conf:

/opt/bitnami/apps/phpmyadmin/conf/nginx-app.conf

原文件开头是:

1
2
3
index index.php index.html index.htm;
allow 127.0.0.1;
deny all;

发现了 deny all 这个罪魁祸首。于是,把这一行删除或用 # 注释掉(或者干脆把后两行改成 allow all),然后重启 Nginx 和 PHP 服务,your_ip/phpmyadmin 顺利打开!

注:由于软件目录比较独特,网上给的重启服务指令一般是不能成功的。官方文档给出了正确的指令:

1
2
3
4
5
6
7
8
9
# 查看所有服务运行状态
sudo /opt/bitnami/ctlscript.sh status
# 不加任何服务名来启动所有服务
sudo /opt/bitnami/ctlscript.sh start
# 不加任何服务名来结束所有服务
sudo /opt/bitnami/ctlscript.sh stop
# 重启特定的服务
sudo /opt/bitnami/ctlscript.sh restart php-fpm
sudo /opt/bitnami/ctlscript.sh restart nginx

后记

这样做之后虽然很方便,但其实是相当不安全的。后来我查到了 Bitnami 的官方文档,有说到:

For security reasons, phpMyAdmin is accessible only when using 127.0.0.1 as the hostname. To access it from a remote system, you must create an SSH tunnel that routes requests to the Web server from 127.0.0.1. This implies that you must be able to connect to your server over SSH in order to access these applications remotely.

文档中正确的连接步骤(SSH 隧道)都有写出。

错误处理

  1. 登入后若页面下方提示:

    $cfg[‘TempDir’] (./tmp/) 读取失败且不能建立缓存, phpMyAdmin运行速度将受影响.

    则需在 index.php 同目录下(Bitnami 默认在 \opt\bitnami\apps\phpmyadmin\htdocs 下)手动 mkdir tmpchmod 777 tmp

  2. 更新 phpMyAdmin 时只需要去官网下载最新版本文件替换 htdocs 下的文件即可。记得原先的 config.inc.php 要保留好,否则缺失此文件的话页面下方会有提示:

    配置文件现在需要一个短语密码

    这样的话参考这里重新初始化配置。

-------------本文结束    感谢您的阅读-------------
0%