n5.Nginx 常见模块

news2024/9/22 14:27:39

Nginx 常见模块

    • 4.1 Nginx 四层访问控制
    • 4.2 Nginx 账户认证功能
    • 4.3 自定义错误页面
    • 4.4 自定义错误日志
    • 4.5 检测文件是否存在
    • 4.6 长连接配置
    • 4.7 作为下载服务器配置
    • 4.8 作为上传服务器
    • 4.9 限流限速
    • 4.10 Nginx 状态页

4.1 Nginx 四层访问控制

访问控制基于模块ngx_http_access_module实现,可以通过匹配客户端源IP地址进行限制

注意: 如果能在防火墙设备控制,最好就不要在nginx上配置,可以更好的节约资源

location = /login/ {
   root /data/nginx/html/pc;
   allow 10.0.0.1;
   deny all;
 }

[root@Ubuntu2204 images]#mkdir /data/nginx/html/pc/login
[root@Ubuntu2204 images]#echo login > /data/nginx/html/pc/login/index.html

[root@Rocky8 ~]#curl http://www.anan.org/login/
<html>
<head><title>403 Forbidden</title></head>
<body>
<center><h1>403 Forbidden</h1></center>
<hr><center>nginx</center>
</body>
</html>

[root@Rocky8 ~]#hostname -I
10.0.0.8 

浏览器(10.0.0.1)----> 访问 http://www.anan.org/login/

在这里插入图片描述

4.2 Nginx 账户认证功能

由 ngx_http_auth_basic_module 模块提供此功能

[root@Ubuntu2204 images]#apt update; apt -y install apache2-utils

# 创建用户
# -b 非交互式方式提交密码
[root@Ubuntu2204 images]# htpasswd -cb /apps/nginx/conf/.htpasswd nan 123456
Adding password for user nan
[root@Ubuntu2204 images]# tail /apps/nginx/conf/.htpasswd
nan:$apr1$KinagyD8$kSVRQlOTrKolJr.3bIvAl/

# 安全加固
[root@Ubuntu2204 images]#chown nginx.nginx /apps/nginx/conf/.htpasswd
[root@Ubuntu2204 images]# chmod 600 /apps/nginx/conf/.htpasswd

 location = /login/ {
   root /data/nginx/html/pc;
   index index.html;
   auth_basic           "login password";
   auth_basic_user_file /apps/nginx/conf/.htpasswd;
 }
 
# 测试 
访问 http://www.anan.org/login/

在这里插入图片描述

4.3 自定义错误页面

自定义错误页,同时也可以用指定的响应状态码进行响应, 可用位置:http, server, location, if in location

# 自定义错误页面
error_page  404 /index.html;                                                                      
    location = /error.html {
    root /data/nginx/html;
    }

[root@Ubuntu2204 ~]#echo error > /data/nginx/html/error.html

# 访问不存在的页面进行测试 (在/etc/hosts文件中做域名解析)
[root@Rocky8 ~]#curl http://www.anan.org/lll.html
error

#  如果404,就转到主页
error_page 404 /index.html;

4.4 自定义错误日志

[root@Ubuntu2204 ~]#mkdir /data/nginx/logs
[root@Ubuntu2204 ~]#ls /data/nginx/

server {
   listen 80;
   server_name www.anan.org;
   charset utf-8;
   server_tokens off;   
   access_log /data/nginx/logs/access.log; 
   error_log /data/nginx/logs/error.log;
}

[root@Ubuntu2204 ~]#cat /data/nginx/logs/access.log

4.5 检测文件是否存在

try_files 会按顺序检查文件是否存在,返回第一个找到的文件或文件夹(结尾加斜线表示为文件夹), 如果所有文件或文件夹都找不到,会进行一个内部重定向到最后一个参数。只有最后一个参数可以引起 一个内部重定向,之前的参数只设置内部URI的指向。最后一个参数是回退URI且必须存在,否则会出现 内部500错误。

try_files $uri $uri/index.html $uri.html =489;

# 如果不存在页面 (如果是自定义的状态码则会显示在返回数据的状态码中)
[root@Rocky8 ~]#curl http://www.anan.org/lll.html -I
HTTP/1.1 489 
Server: nginx
Date: Wed, 17 Jul 2024 15:26:43 GMT
Content-Length: 0
Connection: keep-alive

4.6 长连接配置

keepalive_timeout timeout [header_timeout];  #设定保持连接超时时长,0表示禁止长连接,默认为75s,通常配置在http字段作为站点全局配置
keepalive_requests number;  #在一次长连接上所允许请求的资源的最大数量,默认为1000次,建议适当调大,比如:500

4.7 作为下载服务器配置

ngx_http_autoindex_module 模块处理以斜杠字符 “/” 结尾的请求,并生成目录列表,可以做为下载服 务配置使用

autoindex on | off;#自动文件索引功能,默为off

autoindex_exact_size on | off;  #计算文件确切大小(单位bytes),off 显示大概大小(单位K、M),默认on

autoindex_localtime on | off ; #显示本机时间而非GMT(格林威治)时间,默认off

charset charset | off;  #指定字符编码,默认为off,中文会乱码,指定为utf8

autoindex_format html | xml | json | jsonp; #显示索引的页面文件风格,默认html

limit_rate rate; #限制响应客户端传输速率(除GET和HEAD以外的所有方法),单位B/s,即bytes/second,默认值0,表示无限制,此指令由ngx_http_core_module提供

set $limit_rate 4k; #也可以通变量限速,单位B/s,同时设置,此项优级高.
[root@Ubuntu2204 ~]#mkdir /data/nginx/html/pc/download

location /download {
	autoindex on;
	autoindex_exact_size off;
	autoindex_localtime on;
	charset utf-8;
	limit_rate 1024k;
	root /data/nginx/html/pc;
	}

# 可以从清华大学镜像源同步下载实现仓库功能
[root@Ubuntu2204 ~]#rsync -avz rsync://mirrors.tuna.tsinghua.edu.cn/ubuntu /data/nginx/html/pc/download/ubuntu

在这里插入图片描述

4.8 作为上传服务器

client_max_body_size 1m; #设置允许客户端上传单个文件的最大值,默认值为1m,上传文件超过此值会出413错误

client_body_buffer_size size; #用于接收每个客户端请求报文的body部分的缓冲区大小;默认16k;超出此大小时,其将被暂存到磁盘上的由client_body_temp_path指令所定义的位置

client_body_temp_path path [level1 [level2 [level3]]];
#设定存储客户端请求报文的body部分的临时存储路径及子目录结构和数量,目录名为16进制的数字,使用hash之后的值从后往前截取1位、2位、2位作为目录名

4.9 限流限速

为什么要限速

限制某个用户在一定时间内能够产生的Http请求或者限制某个用户的下载速度。如果超过指定的阈值,则 提示503过载保护

限速相关模块

下载限速:限制用户下载资源的速度
ngx_http_core_module

请求限制:限制用户单位时间内所产生的Http请求数
ngx_http_limit_req_module

连接限制:限制同一时间的连接数,即并发数限制
ngx_http_limit_conn_module

请求频率限速原理

先将请求放置缓存中,然后按指定速度持续处理。当请求速度超过了处理速度会导致缓存被占满,如果 还有没有放入缓存的请求,则会被丢弃。工作原理类似于漏斗

限制下载速度

limit_rate_after 100m;  #下载达到100MB数据后开始限速
limit_rate 100k;        #限速100k

限制请求数

http {
   limit_req_zone $binary_remote_addr zone=one:10m rate=10r/s;
   ...
   server {
       ...
       location /search/ {
           limit_req zone=one burst=5;
           limit_req_status 500; #默认503,可以指定其它状态码
       }
      
#参数说明
limit_req_zone定义在http块中,$binary_remote_addr表示以客户端IP地址的二进制形式为限流依据的key

Zone定义IP状态及URL访问频率的共享内存区域。zone=keyword标识区域的名字,以及冒号后面跟区域大小。8000个IP地址的状态信息约1MB,例子区域可以存储80000个IP地址。

Rate定义最大请求速率。示例中速率不能超过每秒10个请求。超过此速率的请求放入burst队列做延迟处理

burst表示队列大小,当此队列满后,会中断请求报错

nodelay表示超过请求速率后不延迟处理

限制并发连接数

http {
limit_conn_zone $binary_remote_addr zone=conn_zone:10m;
}

limit_conn conn_zone 2; #限制并发2个连接

4.10 Nginx 状态页

基于nginx 模块 ngx_http_stub_status_module 实现,在编译安装nginx的时候需要添加编译参数 – with-http_stub_status_module,否则配置完成之后监测会是提示语法错误

[root@Ubuntu2204 ~]#cat /apps/nginx/conf/conf.d/mirrors.conf
server {
    listen 80;
    server_name mirrors.anan.org;
    root /data/nginx/html/mirrors;
    charset utf-8;
    server_tokens off;
    access_log /data/nginx/logs/mirrors-access.log; 
    error_log /data/nginx/logs/mirrors-error.log;
    
    location /nginx_status {
    stub_status;
    }
} 


#状态页用于输出nginx的基本状态信息:
#输出信息示例:
Active connections: 291
server accepts handled requests
       16630948 16630948 31070465
       上面三个数字分别对应accepts,handled,requests三个值
Reading: 6 Writing: 179 Waiting: 106

Active connections: #当前处于活动状态的客户端连接数,包括连接等待空闲连接数
=reading+writing+waiting

accepts:#统计总值,Nginx自启动后已经接受的客户端请求连接的总数。

handled:#统计总值,Nginx自启动后已经处理完成的客户端请求连接总数,通常等于accepts,除非有因worker_connections限制等被拒绝的失败连接,即失败连接数=accepts-handled

requests:#统计总值,Nginx自启动后客户端发来的总的请求数。因为长连接的原因此值大于上面的accept数

Reading:#当前状态,正在读取客户端请求报文首部的连接的连接数,数值越大,说明排队现象严重,性能不足

Writing:#当前状态,正在向客户端发送响应报文过程中的连接数,数值越大,说明访问量很大

Waiting:#当前状态,正在等待客户端发出请求的空闲连接数,开启keep-alive时,Waiting+reading+writing=active connections

r_connections限制等被拒绝的失败连接,即失败连接数=accepts-handled

requests:#统计总值,Nginx自启动后客户端发来的总的请求数。因为长连接的原因此值大于上面的accept数

Reading:#当前状态,正在读取客户端请求报文首部的连接的连接数,数值越大,说明排队现象严重,性能不足

Writing:#当前状态,正在向客户端发送响应报文过程中的连接数,数值越大,说明访问量很大

Waiting:#当前状态,正在等待客户端发出请求的空闲连接数,开启keep-alive时,Waiting+reading+writing=active connections


![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/5e69409600eb4dba92cfaddde1c849f1.png)


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1938691.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【一刷《剑指Offer》】面试题 37:两个链表的第一个公共结点

力扣对应题目链接&#xff1a;160. 相交链表 - 力扣&#xff08;LeetCode&#xff09; 牛客对应题目链接&#xff1a;两个链表的第一个公共结点_牛客题霸_牛客网 (nowcoder.com) 核心考点 &#xff1a;单链表理解&#xff0c;临界条件判定。 一、《剑指Offer》对应内容 二、分…

Python酷库之旅-第三方库Pandas(036)

目录 一、用法精讲 111、pandas.Series.item方法 111-1、语法 111-2、参数 111-3、功能 111-4、返回值 111-5、说明 111-6、用法 111-6-1、数据准备 111-6-2、代码示例 111-6-3、结果输出 112、pandas.Series.xs方法 112-1、语法 112-2、参数 112-3、功能 112-…

快速了解死锁及如何解决死锁问题

目录 什么是死锁&#xff1f; 死锁代码示例 产生死锁的条件&#xff1a; 死锁的危害&#xff1a; 如何解决死锁问题&#xff1f; 1、预防死锁&#xff08;破坏上述4个产生死锁的条件&#xff09;&#xff1a; 2、银行家算法 3、死锁的检测、解除 4、采用超时机制 什么…

C语言 ——— 写一个函数,调整 整型数组 中 奇数偶数的顺序

目录 题目要求 代码实现 题目要求 创建一个整型数组 自定义函数实现&#xff1a;调整该数组中数字的顺序&#xff0c;使得数组中所有的奇数位于数组的前半部分&#xff0c;数组中所有的偶数位于数组的后半部分 举例&#xff1a; 输入的整型数组为&#xff1a;[234,24,45,…

计算机网络知识点面试总结3

#来自ウルトラマンゼロ&#xff08;赛罗&#xff09; 1 数据链路层功能 数据链路层在物理层提供的服务的基础上向网络层提供服务&#xff0c;其最基本的服务是将源自网络层来的数据可靠地传输到相邻节点的目标机网络层&#xff0c;其主要作用是加强物理层传输原始比特流的功能。…

嵌入式面试总结

C语言中struct和union的区别 struct和union都是常见的复合结构。 结构体和联合体虽然都是由多个不同的数据类型成员组成的&#xff0c;但不同之处在于联合体中所有成员共用一块地址空间&#xff0c;即联合体只存放了一个被选中的成员&#xff0c;结构体中所有成员占用空间是累…

nginx基本原理

进程模型 当nginx启动之后&#xff0c;会有一个master进程和多个worker进程。默认是一个worker进程。 master进程的作用&#xff1a;接收来自外界信号&#xff0c;向各worker进程发送信号&#xff0c;监控worker进程的运行状态&#xff0c;当worker进程在异常情况下退出后&am…

Golang | Leetcode Golang题解之第242题有效的字母异位词

题目&#xff1a; 题解&#xff1a; func isAnagram(s, t string) bool {if len(s) ! len(t) {return false}cnt : map[rune]int{}for _, ch : range s {cnt[ch]}for _, ch : range t {cnt[ch]--if cnt[ch] < 0 {return false}}return true }

系统架构设计师教程 第3章 信息系统基础知识-3.6 办公自动化系统(OAS)-解读

系统架构设计师教程 第3章 信息系统基础知识-3.6 办公自动化系统&#xff08;OAS&#xff09; 3.6.1 办公自动化系统的概念3.6.1.1 办公活动3.6.1.1 办公自动化的概念 3.6.2 办公自动化系统的功能3.6.2.1 事务处理3.6.2.1.1 单机系统3.6.2.1.2 多机系统 3.6.2.2 信息管理3.6.2.…

科研绘图系列:R语言雨云图(Raincloud plot)

介绍 雨云图(Raincloud plot)是一种数据可视化工具,它结合了多种数据展示方式,旨在提供对数据集的全面了解。雨云图通常包括以下几个部分: 密度图(Density plot):表示数据的分布情况,密度图的曲线可以展示数据在不同数值区间的密度。箱线图(Box plot):显示数据的中…

大模型实战—大模型赋能网络爬虫

大模型赋能网络爬虫 简单来说,网页抓取就是从网站抓取数据和内容,然后将这些数据保存为XML、Excel或SQL格式。除了用于生成潜在客户、监控竞争对手和市场研究外,网页抓取工具还可以用于自动化你的数据收集过程。 借助AI网页抓取工具,可以解决手动或纯基于代码的抓取工具的…

配置kali 的apt命令在线安装包的源为国内源

目录 一、安装VMware Tools 二、配置apt国内源 一、安装VMware Tools 点击安装 VMware Tools 后&#xff0c;会加载一个虚拟光驱&#xff0c;里面包含 VMware Tools 的安装包 鼠标右键单击 VMware Tools 的安装包&#xff0c;点击复制到 点击 主目录&#xff0c;再点击选择…

XILINX芯片解密FPGA/CPLD芯片解密

Xilinx与其技术和制造合作伙伴(TSMC)为FPGA开发了一种高介电层金属闸(HKMG)、高性能、低功耗的28nm工艺技术。这一全新28nm工艺技术是在40nmFPGA工艺技术开发成果的基础上构建的&#xff0c;它推出了新的HKMG技术&#xff0c;可通过较低的功耗来最大程度地发挥可用系统性能。 …

一文彻底搞懂虚拟地址空间

虚拟地址空间&#xff1a;传统的进程管理每个进程都占连续的物理内存空间&#xff0c;如果内存爆满需要将很久没用的但还在内存中的整个进程拷贝到硬盘中&#xff0c;等需要用时重新加载回内存。现代计算机使用虚拟地址空间&#xff0c;虚拟地址空间每个进程的4g并不是真的有&a…

【ROS2】高级:安全-检查网络流量

目标&#xff1a;捕获和检查原始 ROS 2 网络流量。 教程级别&#xff1a;高级 时间&#xff1a;20 分钟 内容 概述 先决条件 运行演示 安装 tcpdump启动说话者和听者显示未加密的发现数据包显示未加密的数据包 启用加密显示加密的发现数据包显示加密数据包 概述 ROS 2 通信安全…

【Unity】Android Failed to transform Error while dexing.

文章目录 一、背景二、问题描述三、原因和解决方法 一、背景 1、Unity 2021.3.33f1 2、Firebase 11.7.0 3、升级至API-34 二、问题描述 错误信息 Failed to transform play-services-measurement-api-21.5.0.aar (com.google.android.gms:play-services-measurement-api:21.5.…

【yolov8】3、yolov8 环境安装 【GPU版】

pycharm下载安装 yolov8 环境安装 【GPU版】 1、要求1.1 什么是 CUDA 和 CUDNN1.2 查看cuda版本的3种方法&#xff08;版本在10.2以上的可以忽略本章节&#xff09;&#xff1a;1.3 没有找到NIVDIA图标&#xff0c;确认是否有英伟达显卡 2、pycharm下载安装进入官网 3、yolov8…

【数据分享】2013-2022年我国省市县三级的逐日SO2数据(excel\shp格式\免费获取)

空气质量数据是在我们日常研究中经常使用的数据&#xff01;之前我们给大家分享了2000——2022年的省市县三级的逐日PM2.5数据和2013-2022年的省市县三级的逐日CO数据&#xff08;均可查看之前的文章获悉详情&#xff09;&#xff01; 本次我们分享的是我国2013——2022年的省…

【从零开始实现stm32无刷电机FOC】【实践】【5/7 stm32 adc外设的高级用法】

目录 采样时刻触发采样同步采样 点击查看本文开源的完整FOC工程 本节介绍的adc外设高级用法用于电机电流控制。 从前面几节可知&#xff0c;电机力矩来自于转子的q轴受磁力&#xff0c;而磁场强度与电流成正比&#xff0c;也就是说电机力矩与q轴电流成正相关&#xff0c;控制了…

【C++】类和对象——默认成员函数(下)

目录 前言拷贝构造1.概念2.特征3.总结 赋值重载运算符重载赋值运算符重载探讨传引用返回和传值返回的区别 const成员取地址及const取地址操作符重载 前言 上一讲我们已经说了关于C的默认成员函数中的两个——构造和析构函数。所谓默认成员函数也就是&#xff1a;用户没有显示定…