一、为什么下载站要增加访问控制¶
原笔记在基础下载站之上,又提出了两个增强需求:
- 给
svip目录增加认证功能 - 给站点增加状态统计功能
这两个需求对应的是两类常见运维场景:
- 有些目录不是所有人都能直接访问
- 有些信息需要专门暴露给运维或监控系统查看
二、如何为 svip 目录增加账号密码认证¶
原笔记通过 auth_basic 模块给 /svip/ 增加了认证规则,配置如下:
server {
listen 80;
server_name v.oldboylinux.cn;
root /app/code/v;
error_log /var/log/nginx/v-error.log notice;
access_log /var/log/nginx/v-access.log main;
autoindex on;
autoindex_localtime on;
autoindex_exact_size off;
location / {
index index.html;
}
location /svip/ {
auth_basic "Please input password:";
auth_basic_user_file /etc/nginx/user;
}
}
这里最关键的是两条指令:
auth_basic:开启基础认证,并设置提示语auth_basic_user_file:指定用户名密码文件
三、密码文件该怎么准备¶
原笔记的完整操作步骤如下。
先准备受保护目录和测试文件:
[root@oldboy01 conf.d]# mkdir -p /app/code/v/svip/
[root@oldboy01 conf.d]# touch /app/code/v/svip/svip-16k-{01..10}.torrent
再安装工具并生成密码文件:
[root@oldboy01 conf.d]# yum install -y httpd-tools
[root@oldboy01 conf.d]# htpasswd -bc /etc/nginx/user lidao996 1
# 添加新用户时不要再加 -c
[root@oldboy01 conf.d]# htpasswd -b /etc/nginx/user oldboy 1
最后调整权限:
[root@oldboy01 conf.d]# chmod 600 /etc/nginx/user
[root@oldboy01 conf.d]# chown nginx.nginx /etc/nginx/user
这里的重点很明确:
- 第一次创建密码文件时才用
-c - 后续追加用户不能再用
-c,否则会覆盖原内容 - 密码文件权限要尽量收紧
四、如何验证认证已经生效¶
原笔记的验证方式很直接:
1、先执行 nginx -t
2、再执行 systemctl reload nginx
3、浏览器访问 http://v.oldboylinux.cn/svip/
4、输入用户名 lidao996 和密码 1
如果能弹出认证框,并在输入正确账号密码后访问到目录内容,就说明认证功能已经生效。
五、如何为站点增加状态统计页面¶
原笔记接着又加入了 stub_status 模块,配置如下:
location /status {
stub_status;
}
整合进站点配置后的关键部分如下:
server {
listen 80;
server_name v.oldboylinux.cn;
root /app/code/v;
error_log /var/log/nginx/v-error.log notice;
access_log /var/log/nginx/v-access.log main;
autoindex on;
autoindex_localtime on;
autoindex_exact_size off;
location / {
index index.html;
}
location /svip/ {
auth_basic "Please input password:";
auth_basic_user_file /etc/nginx/user;
}
location /status {
stub_status;
}
}
访问:
http://v.oldboylinux.cn/status
就能看到 Nginx 的当前状态信息。
六、stub_status 页面里的指标该怎么理解¶
原笔记对状态页中的指标做了详细说明,核心可以整理为:
| 指标 | 含义 |
|---|---|
Active connections |
当前活动连接数,体现并发情况 |
accepts |
已接受的客户端连接总数 |
handled |
已处理的连接总数 |
requests |
已处理的请求总数 |
reading |
正在读取请求头的连接数 |
writing |
正在向客户端写响应的连接数 |
waiting |
等待中的空闲连接数量 |
原笔记特别强调:
Active connections可以帮助理解当前并发reading、writing、waiting分别能反映连接所处阶段
七、如何配合压力测试观察状态变化¶
原笔记最后还补了一个很实用的实验:
先查看 CPU 核心数,确认并发参考值:
[root@oldboy01 conf.d]# lscpu
...
CPU(s): 8
...
再使用 ab 做压力测试:
[root@oldboy01 conf.d]# ab -n 99999 -c 8 -H Host:v.oldboylinux.cn http://192.168.1.20/
同时刷新:
http://v.oldboylinux.cn/status
就能直观看到状态页指标的变化。
八、这个案例里涉及了哪些常用模块¶
原笔记最后对模块做了一个汇总,这里可以简化理解为:
autoindex:目录索引auth_basic:基础认证allow/deny:访问控制stub_status:运行状态监控root、location、listen、server_name:Nginx 核心站点指令access_log、log_format:日志记录
这也说明,一个看似简单的下载站,实际上已经把很多常见 Nginx 能力串联起来了。
九、小结¶
这个案例很适合拿来理解两类高频配置:
- 如何给敏感目录增加基础认证
- 如何给运维侧暴露 Nginx 状态页
对入门阶段来说,auth_basic 和 stub_status 都是非常值得先掌握的基础功能。