Nginx添加HTTP密码认证

Nginx添加HTTP密码认证

为什么要给nginx添加密码认证?

为了方便,我们有时候可能会放一些监控脚本在默认的域名下,比如放个phpinfo.php,用于查看php的信息等等,但这个又不想被别人直接访问,而且也不想写个什么登录界面,这时,我们就可以直接用nginx的身份认证功能。

添加了认证是什么效果?

开启了身份认证,访问的时候就需要输入账号和密码。

Xnip2018-11-18_15-56-48.jpg

如果不输入点取消,则会显示需要认证。

Xnip2018-11-18_15-56-57.jpg

怎样添加认证?

把以下两句放在nginx配置文件中的server下或者location里面

auth_basic 'Restricted';            # 认证名称,随意填写
auth_basic_user_file /usr/local/nginx/htpasswd;     # 认证的密码文件,需要生成。

其中/usr/local/nginx/htpasswd是账号密码文件,使用htpasswd命令生成,其中最后两个参数是用户名和密码,到时需要登录的时候就是用这个用户名和密码。

htpasswd -bc /usr/local/nginx/htpasswd zhangsan 123456

如果你服务器没有htpasswd命令,请先安装,htpasswd是apache的一个工具:

yum install -y httpd-tools

以下是我服务器放的例子,注意这不是一个完整配置文件,我只是指明身份认证的两句配置可以放在这个地方:

Xnip2018-11-18_16-18-00.jpg

最后,需要重载一下nginx:
首先检查配置文件是否有语法问题:

sudo nginx -t

如下图,如果显示的是ok,successful,则是对的,如果是failed就说明语法有问题,需要检查一下,比如是否少写分号等等。

Xnip2018-11-18_16-27-31.jpg

语法没问题再重载nginx:

sudo nginx -s reload

认证原理

nginx开启密码认证的原理是使用了HTTP authentication认证机制的basic版HTTP basic authentication,只要向客户端发送以下header即可触发浏览器弹出认证窗口(接收输入用户名和密码),其中『My Realm』可以改成任意其他自己喜欢的字符串:

WWW-Authenticate: Basic realm="My Realm"
HTTP/1.0 401 Unauthorized

其实HTTP authentication认证机制还有另一种,叫HTTP digest authentication,它比basic版的更安全,因为Basic版的认证方式在传输过程中采用的用户名密码加密方式为BASE-64,即类似『base64_encode(username:password)』这样加密的,其解码过程非常简单,如果被嗅探,密码几乎是透明的。

但nginx默认不支持更安全的digest认证方式,如果要支持,需要安装插件HTTP Digest Authentication

使用编程语言实现HTTP authentication

前面已经说了nginx密码认证的原理是HTTP authentication,只需要发送一个http header即可触发浏览器弹出认证窗口,毫无疑问,随便找一门编程语言都可以发送一个header,这里我使用php作为示例:用PHP进行HTTP认证

怎样退出呢?

最好的方法是关闭浏览器再打开,注意是关闭整个浏览器而不是只关闭一个标签,其他退出方式具体请参考How to log out user from web site using BASIC authentication?

打赏

2
Leave a Reply

avatar
1 Comment threads
1 Thread replies
0 Followers
 
Most reacted comment
Hottest comment thread
2 Comment authors
xiebrucepocld Recent comment authors

This site uses Akismet to reduce spam. Learn how your comment data is processed.

  Subscribe  
Notify of
pocld
Guest
pocld

博主,请教一个问题,比如我用 pic.xiebruce.top 这个域名搭建了Picuploader 图床,设置加密。但是在打开 http://www.xiebruce.top 同样会弹出身份认证框
应该如何解决?谢谢!

扫码在手机查看
iPhone请用自带相机扫
安卓用UC/QQ浏览器扫

Nginx添加HTTP密码认证