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

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 刷新太快会出现错误
http://www.xdnf.cn/news/7078.html

相关文章:

  • AI:OpenAI论坛分享—《AI重塑未来:技术、经济与战略》
  • 二:操作系统之进程通信(IPC)
  • WRFOUT投影转换——兰伯特转等经纬度
  • 学习黑客HTTP 请求头
  • LangGraph Platform 快速入门
  • 如何设置 MySQL 的 root 密码:详细指南
  • LLM笔记(九)KV缓存调研
  • 利用jieba分词交集运算,挑选出相同身份证
  • 华为云Astro轻应用创建业务对象(BO)的概念梳理
  • 如何用mockito+junit测试代码
  • [LevelDB]LevelDB版本管理的黑魔法-为什么能在不锁表的情况下管理数据?
  • muduo库TcpServer模块详解
  • 设备预测性维护的停机时间革命:中讯烛龙如何用AI重构工业设备管理范式
  • Linux梦开始的地方
  • 面试题总结一
  • 2025.05.17得物机考笔试真题第一题
  • iOS 工厂模式
  • 【图像生成大模型】Step-Video-T2V:下一代文本到视频生成技术
  • 数据结构与算法学习笔记(Acwing提高课)----动态规划·背包模型(四)
  • 人工智能100问☞第26问:什么是贝叶斯网络?
  • 第三章:UI 系统架构拆解与动态界面管理实录
  • PyQt5基本窗口控件(对话框类控件)
  • 配置代理服务器访问github、google
  • golang 安装gin包、创建路由基本总结
  • 定期更新Let‘s Encrypt SSL证书遇到的问题
  • 代码随想录算法训练营第六十五天| 图论10—卡码网94. 城市间货物运输 I,95. 城市间货物运输 II
  • C++11-(2)
  • 从零启动 Elasticsearch
  • C#接口(Interface)全方位讲解:定义、特性、应用与实践
  • Manus 全面开放注册,OpenAI 发布 Codex,ChatGPT 上线 GPT-4.1!| AI Weekly 5.12-18