01 索引模块
01-1 前提
# 之前进到页面是这样的
图1 进入到的页面是index.php
# 希望访问的网站是这样的目录
图2 希望访问的是这样的
01-2 创建配置文件主体
[root@Nginx-01 conf.d]# mkdir -p /code/index/{Download,About,Health-Library}
[root@Nginx-01 conf.d]# cat index.conf
server{listen 172.2.25.10:80;root /code/index;server_name www.like.index.com;location / {autoindex on; # 打开目录浏览功能}
}
图3 成功创建目录功能
01-3 中文乱码
# 放进一个文件,查看发现是乱码的
[root@Nginx-01 conf.d]# cd /code/index/Download/
[root@Nginx-01 Download]# ls
day32-LNMP架构实战.zip
图4 中文乱码
[root@Nginx-01 Download]# cat /etc/nginx/conf.d/index.conf
server{listen 172.2.25.10:80;root /code/index;server_name www.like.index.com;charset utf-8,gbk; # 添加字符集location / {autoindex on;}
}
图5 乱码问题恢复了
01-4 时间
# 由上图可知,系统时间和上传时间不同
[root@Nginx-01 Download]# date
2024年 11月 30日 星期六 14:24:32 CS
[root@Nginx-01 Download]# cat /etc/nginx/conf.d/index.conf
server{listen 172.2.25.10:80;root /code/index;server_name www.like.index.com;charset utf-8,gbk;location / {autoindex on;autoindex_localtime on; # 开启使用本地时间}
}
图6 使用的是服务器的时间
01-5 修改文件大小显示
[root@Nginx-01 Download]# cat /etc/nginx/conf.d/index.conf
server{listen 172.2.25.10:80;root /code/index;server_name www.like.index.com;charset utf-8,gbk;location / {autoindex on;autoindex_localtime on;autoindex_exact_size off; # 以K M G显示文件的大小}
}
图7 修改文件大小的显示,不要以字节显示
02 限速模块
# 下载大文件限速
图8 希望下载大文件限速
# Nginx配置限速的配置文件
[root@Nginx-01 Download]# cat /etc/nginx/conf.d/index.conf
server{listen 172.2.25.10:80;root /code/index;server_name www.like.index.com;charset utf-8,gbk;location / {autoindex on;autoindex_localtime on;autoindex_exact_size off;limit_rate_after 100m; # 100m(兆)之后开始限速limit_rate 50k; # 限制速率为50k/s}
}
03 Nginx状态模块
[root@Nginx-01 Download]# cat /etc/nginx/conf.d/index.conf
server{listen 172.2.25.10:80;root /code/index;server_name www.like.index.com;charset utf-8,gbk;location / {autoindex on;autoindex_localtime on;autoindex_exact_size off;limit_rate_after 100m;limit_rate 50k;}location /nginx_status {stub_status; # # nginx状态模块}
}
# 注意,访问的时候输入:域名/nginx_status
图9 在浏览器查看Nginx服务器状态
Active connections # 当前活动的连接数
accepts # 已接收的总TCP连接数量
handled # 已处理的TCP连接数量
requests # 当前http请求数Reading # 当前读取请求头数量
Writing # 当前响应的请求头数量
Waiting # 等待的请求数,开启了keepalive# 注意, 一次TCP的连接,可以发起多次http的请求, 如下参数可配置进行验证
keepalive_timeout 0; # 类似于关闭长连接
keepalive_timeout 65; # 65s没有活动则断开连接
HTTP请求头部:
accept: text/html # 请求类型
accept-encoding: gzip, deflate # 请求编码 gzip压缩
accept-language: zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0. # 请求语言类型
cache-control: no-cache # 请求缓存
connection: keep-alive # 长连接 1.0 1.1 2.0 默认使用1.1
cookie:
wordpress_test_cookie=WP+Cookie+check; wordpress_logged_in_4d3dfc2d7997ebbb6f8c4f291b7d3e51=admin%7C1723165561%7CG2Fa5IDQbAEziFeVRE7U2UdILPENaglORCrNzMVWVEq%7Ca08cbc5fb7fb239120a04080b54d308d77358b29fb0e647cb7d410d2b4aaec71; wp-settings-time-1=1723084874 # 会话保持使用 浏览器将cookie用户名密码 请求服务端
host: www.wp.com # 请求主机 域名
pragma: no-cache # 缓存
user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36 Edg/127.0.0.0 # 客户端浏览器的信息HTTP响应头部:
connection: keep-alive # 响应长连接
content-type: text/html; charset=UTF-8 # 响应文件类型
date: Mon, 12 Aug 2024 02:37:50 GMT # 响应时间
location: http://www.wp.com/ # 响应主机
server: nginx/1.26.1 # 响应服务的版本号
PHP/7.2.34 # 响应的PHP版本
04 访问控制模块
04-1 allow deny
# 其他服务器能访问到Nginx服务器的状态信息
图10 服务器能访问Nginx状态
[root@Nginx-01 Download]# cat /etc/nginx/conf.d/index.conf
server{listen 172.2.25.10:80;root /code/index;server_name www.like.index.com;charset utf-8,gbk;location / {autoindex on;autoindex_localtime on;autoindex_exact_size off;limit_rate_after 100m;limit_rate 50k;}location /nginx_status {stub_status;allow 172.2.25.1; # 允许172.2.25.1查看deny all; # 其他都拒绝}
}
图11 服务器访问不到Nginx状态
04-2 基于用户登录认证
[root@Nginx-01 conf.d]# cat index.conf
server{listen 172.2.25.10:80;root /code/index;server_name www.like.index.com;charset utf-8,gbk;location / {autoindex on;autoindex_localtime on;autoindex_exact_size off;limit_rate_after 100m;limit_rate 50k;auth_basic "test"; # 描述信息,可以随便填,必须存在auth_basic_user_file "/etc/nginx/conf.d/passwd"; # 密码文件存放位置}location /nginx_status {stub_status;allow 172.2.25.1;deny all;}
}
# 使用的是shadow文件里面的密码,passwd格式为用户名:经过加密的密码# 输入密码之后能访问

图12 用户名二号密码文件
图13 访问网站出现登录页面
图14 输入完用户名和密码就能正常访问页面了
04-3 手动生成密码
[root@Nginx-01 conf.d]# yum install -y httpd-tools
[root@Nginx-01 conf.d]# htpasswd -b -c /etc/nginx/conf.d/passwd user passwd
Adding password for user user
[root@Nginx-01 conf.d]# cat passwd
user:$apr1$nlmOtY2Z$7tMl2fUFKbrV8Slzz0Vnj1
05 Nginx访问限制模块
# 连接频率限制:防止TCP三次握手攻击
# 请求频率限制:限制每秒最多请求数
[root@Nginx-01 conf.d]# cat index.conf
limit_conn_zone $remote_addr zone=conn_zone:10m;
# limit_conn_zone:这个指令用于定义一个内存区域,用于存储当前活动的连接数。它通常用于限制来自单个IP地址的并发连接数。
# $remote_addr:这是Nginx中的一个变量,表示客户端的IP地址。
# zone=conn_zone:10m:这里定义了一个名为conn_zone的内存区域,大小为10MB。这个区域用于存储每个IP地址的当前连接数。
limit_req_zone $binary_remote_addr zone=req_zone:10m rate=1r/s;
# limit_req_zone:这个指令用于定义一个内存区域,用于限制请求速率。它常用于防止暴力破解密码或防止恶意用户通过发送大量请求来影响服务器性能。
# $binary_remote_addr:这是Nginx中的一个变量,它存储了客户端IP地址的二进制形式,比$remote_addr占用更少的内存空间。
# zone=req_zone:10m:这里定义了一个名为req_zone的内存区域,大小为10MB,用于存储每个IP地址的请求状态。
# rate=1r/s:这表示每个IP地址每秒最多只能发起1个请求。
server{listen 172.2.25.10:80;root /code/index;server_name www.like.index.com;charset utf-8,gbk;limit_conn conn_zone 1;# limit_conn:这个指令用于限制并发连接数。# conn_zone:这是之前定义的连接限制区域的名称。# 1:这表示每个IP地址最多只能有1个并发连接。limit_req zone=req_zone burst=3 nodelay;# limit_req:这个指令用于限制请求速率。# zone=req_zone:这是之前定义的请求限制区域的名称。# burst=3:这表示在允许的速率之外,还可以额外处理3个请求。这些额外的请求会被立即处理,而不是被延迟或排队。# nodelay:这个参数与burst一起使用,表示当请求超过rate限制但仍在burst范围内时,这些请求会被立即处理,而不是被延迟。location / {autoindex on;autoindex_localtime on;autoindex_exact_size off;limit_rate_after 100m;limit_rate 50k;auth_basic "test";auth_basic_user_file "/etc/nginx/conf.d/passwd";}location /nginx_status {stub_status;allow 172.2.25.1;deny all;}
}
# 设置的每秒连接数为1 刷新太快会出现错误# 这个是报错日志,表明请求超过了req_zone区域设置的速率限制
2024/11/30 20:33:11 [error] 18646#18646: *4 limiting requests, excess: 3.210 by zone "req_zone", client: 172.2.25.1, server: www.like.index.com, request: "GET / HTTP/1.1", host: "172.2.25.10"
2024/11/30 20:33:11 [error] 18646#18646: *4 limiting requests, excess: 3.086 by zone "req_zone", client: 172.2.25.1, server: www.like.index.com, request: "GET / HTTP/1.1", host: "172.2.25.10"
图15 刷新太快会出现错误