当前位置: 首页 > news >正文

08 Nginx模块

01 索引模块

01-1 前提

# 之前进到页面是这样的
image-20241130140218138
图1 进入到的页面是index.php
# 希望访问的网站是这样的目录
image-20241130140406142
图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;		# 打开目录浏览功能}
}
image-20241130141653856
图3 成功创建目录功能

01-3 中文乱码

# 放进一个文件,查看发现是乱码的
[root@Nginx-01 conf.d]# cd /code/index/Download/
[root@Nginx-01 Download]# ls
day32-LNMP架构实战.zip
image-20241130142026037
图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;}
}
image-20241130142202579
图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;			# 开启使用本地时间}
}
image-20241130142659665
图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显示文件的大小}
}
image-20241130142912069
图7 修改文件大小的显示,不要以字节显示

02 限速模块

# 下载大文件限速
image-20241130150503482
图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
image-20241130152218608
图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服务器的状态信息
image-20241130152856435
图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;				# 其他都拒绝}
}
image-20241130153340277
图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格式为用户名:经过加密的密码# 输入密码之后能访问

image-20241130182450380

图12 用户名二号密码文件
image-20241130182629168
图13 访问网站出现登录页面
image-20241130182644853
图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"
image-20241130203325670
图15 刷新太快会出现错误

相关文章:

  • 【Docker】Docker Compose方式搭建分布式协调服务(Zookeeper)集群
  • Text2SQL:自助式数据报表开发---0517
  • Java求职者面试:从Spring Boot到微服务的技术点解析
  • 【GESP】C++三级真题 luogu-B3925 [GESP202312 三级] 小猫分鱼
  • 【PostgreSQL系列】PostgreSQL 复制参数详解
  • MLLM常见概念通俗解析(四)
  • 项目的部署发布和访问的流程
  • Jsoup库和Apache HttpClient库有什么区别?
  • 嵌入式学习笔记 - U(S)ART 模块HAL 库函数总结
  • [C++面试] const相关面试题
  • C# 深入理解类(成员常量)
  • Android 性能优化入门(一)—— 数据结构优化
  • 学习黑客Kerberos深入浅出:安全王国的门票系统
  • 利用html制作简历网页和求职信息网页
  • 【Linux笔记】——线程同步条件变量与生产者消费者模型的实现
  • Go 与 Gin 搭建简易 Postman:实现基础 HTTP 拨测的详细指南
  • window自带截图快捷键
  • Flutter与Kotlin Multiplatform(KMP)深度对比及鸿蒙生态适配解析
  • ubuntu防火墙命令和放行ssh端口
  • VueUse/Core:提升Vue开发效率的实用工具库
  • 南宁海关辟谣网传“查获600公斤稀土材料”:实为焊锡膏
  • 广西隆林突发山洪,致3人遇难1人失联
  • 本周看啥|《歌手》今晚全开麦直播,谁能斩获第一名?
  • 戛纳打破“疑罪从无”惯例,一法国男演员被拒之门外
  • 阿联酋与美国达成超过2000亿美元协议
  • 陕西一村民被冒名贷款40余万续:名下已无贷款,将继续追责