网上绝大多数讲的是使用来自apache的组件htpasswd来实现密码部分,实际上openssl(相信用到ssh的都安装有这个模块)就能够实现密码部分,而不需要额外再去apt-get。

这里演示的是为phpMyAdmin的登录页面增加一层身份认证,就像这样
auth_gate.png

一、生成加密过的密码

这一步是免不掉的,因为nginx必须使用crypt()函数将表单提交的密码加密后和存储的密码比对。

实际上不仅htpasswd能够对明文密码进行加密,openssl下的passwd命令也能够完成。

命令是:

openssl passwd

接下来会提示输入密码,连续输入两次后就能得到加密后的密码了,如:

O5az.RSPzd.HE

此时把加密的密码复制下来,供后面使用。

二、创建认证文件

后面在nginx设置中对眼身份认证,需要指定一个存有用户名和密码的文件,所以这里首先创建。

为防止出现权限问题,将文件创建到nginx配置目录下,文件名为pma_pass(可随意更改)

nano /etc/nginx/pma_pass

在文件中写入

demo:O5az.RSPzd.HE

其中demo即设置的验证用户名,可随意更改,不需要再次加密。

三、修改nginx配置文件

打开nginx配置文件(可能路径不一样)

nano /etc/nginx/sites-available/default

定位到phpMyAdmin锁能访问到的那个server(如果是通过IP访问,即http://IP/phpmyadmin的话,就是在default_server中)
增加一个location,如:

server {
    . . .

    location / {
        try_files $uri $uri/ =404;
    }

    location /phpmyadmin {
    }

    . . .
}

在此location下填入认证提示,并指明认证文件路径

server {
    . . .

    location / {
        try_files $uri $uri/ =404;
    }

    location /nothingtosee {
        auth_basic "Admin Login";
        auth_basic_user_file /etc/nginx/pma_pass;
    }

    . . .
}

auth_basic 中字符串内容用在认证界面的提示中,如果不希望别人知道这个网页的用途的话,就写一个无关紧要的Admin Login咯。

四、重启nginx生效

重启nginx

service nginx restart

接下来再去访问加上身份认证的网页时,就会出现
auth_gate.png


参考

How To Install and Secure phpMyAdmin with Nginx on an Ubuntu 14.04 Server