月下博客

nginx配置phpmyadmin

phpmyadmin是常用的mysql web可视化管理软件,经常作为站点辅助程序一起发布。nginx是优秀的高性能web代理和反向代理软件,是web服务器的主流软件。

为了能在浏览器上访问站点的phpmyadmin管理界面,需要在nginx上配置访问规则。根据nginx的语法,相对还是比较简单的。根据phpmyadmin的文件类型分类解析即可。下面是一个常用配置:

location ~ /phpmyadmin/.+/.php$ {
    if ($fastcgi_script_name ~ /phpmyadmin/(.+/.php.*)$) {
        set $valid_fastcgi_script_name $1;
    }
    include fastcgi_params;
    fastcgi_pass   127.0.0.1:9000;
    fastcgi_index  index.php;
    fastcgi_param SCRIPT_FILENAME /var/www/phpmyadmin/$valid_fastcgi_script_name;
}
location ~ /phpmyadmin/.+/.(js|css|png|jpg|gif|swf|ico|pdf|mov|fla|zip|rar)$ {
    root /var/www/;
    expires 30d;
    try_files $uri =404;
}

在这个配置中,我们把phpmyadmin配置到了/phpmyadmin这个二级目录下。这个可以根据需求自定义,比如可是替换成dbman之类,显得没那么敏感。然后根据请求进来的是php文件还是静态文件,转发给相应的程序处理。

如果我们希望/phpmyadmin是全局性的该怎么做呢?apache httpd里面可以通过设置alias的方式设置全局性的二级子目录,这样在服务器上的多个站点就可以共享配置了。很可惜根据nginx的文档,nginx现在还不能提供这样的功能。为了在多个站点的域名都有phpmyadmin,只能写到各个配置文件里了。

当然另外一个更为优雅的方法是将以上配置单独写到一个文件里,然后在主配置文件中include这个文件即可。相对于在每个域名下重复书写,这是更好的解决办法。我的常用做法是在/etc/nginx/conf.d目录下建立global.d目录,把上述内容存放到global.d里保存为phpmyadmin.conf。然后在配置文件里添加:

include /etc/nginx/conf.d/global.d//*.conf;

这样如果还有其他全局性的配置,也可以一并放到这里。同时也省去了每个配置文件里都需要重复一大段的麻烦。