nginx下为访问页面增加身份认证
网上绝大多数讲的是使用来自apache的组件htpasswd来实现密码部分,实际上openssl(相信用到ssh的都安装有这个模块)就能够实现密码部分,而不需要额外再去apt-get。
这里演示的是为phpMyAdmin的登录页面增加一层身份认证,就像这样
一、生成加密过的密码
这一步是免不掉的,因为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
接下来再去访问加上身份认证的网页时,就会出现
参考
How To Install and Secure phpMyAdmin with Nginx on an Ubuntu 14.04 Server