# 7. auth\_basic 模块使用
#### 1. 介绍
在这一篇文章[nginx之编译第三方模块(六)](http://www.rails365.net/articles/2015-11-04-nginx-zhi-bian-yi-di-san-fang-mo-kuai-liu)中介绍了如何编译模块,而我们演示了如何编译[nginx-module-vts](https://github.com/vozlt/nginx-module-vts)这个监控nginx服务器运行情况的模块。只要用户在浏览器输入`http://your_ip/status`,就可以访问监控页面。这样很不安全,因为任何人都可以访问这个页面。如果有一个方法能让访问这个页面的时候输入用户名和密码,那就好了。而nginx的源码提供了[ngx\_http\_auth\_basic\_module](http://nginx.org/en/docs/http/ngx_http_auth_basic_module.html)这个模块,它可以来解决这个问题。
`ngx_http_auth_basic_module`它提供了最基本的http认证,这是http协议支持的,它会弹出一个框让你输入用户名和密码,只有用户名和密码输入正确了才能访问,这样就能防止`/status`被任何人访问了。
#### 2. 使用
这个模块是默认就编译进nginx的,所以可以直接拿来使用。
首先我们得有一个机制是来存放用户名和密码,`ngx_http_auth_basic_module`是使用文件作为存储介质的,用户名是明文存储,而密码是加密之后再存储,这样在认证框输入的用户名和密码必须和文件的信息匹配才能认证成功。
我们用`htpasswd`这个命令来生成存放用户名和密码的文件,所以需要先安装它。
```
$ sudo apt-get install apache2-utils
```
我们先添加第一个用户`hfpp2012`。
```
$ sudo htpasswd -c /etc/nginx/.htpasswd hfpp2012
New password:
Re-type new password:
Adding password for user hfpp2012
```
键入两遍相同的密码就可以了。
`-c`参数表示会创建`/etc/nginx/.htpasswd`这个文件,以后再添加用户就不用指定这个参数了,比如添加`yinsigan`用户。
```
$ sudo htpasswd /etc/nginx/.htpasswd yinsigan
```
现在我们需要在配置文件中打开http basic auth认证。
```
server {
...
location /status {
auth_basic "Restricted";
auth_basic_user_file /etc/nginx/.htpasswd;
vhost_traffic_status_display;
vhost_traffic_status_display_format html;
}
}
```
这样就可以了,看下效果图。
![](https://box.kancloud.cn/5725f8a39ff9700980bae1062f9facae_993x341.png)
完结。