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 |
|
发现了 deny all
这个罪魁祸首。于是,把这一行删除或用 #
注释掉(或者干脆把后两行改成 allow all
),然后重启 Nginx 和 PHP 服务,your_ip/phpmyadmin
顺利打开!
注:由于软件目录比较独特,网上给的重启服务指令一般是不能成功的。官方文档给出了正确的指令:
1 |
|
后记
这样做之后虽然很方便,但其实是相当不安全的。后来我查到了 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 隧道)都有写出。
错误处理