Day53-nginx常用模块精讲-多企业案例

2024-03-22 09:36

本文主要是介绍Day53-nginx常用模块精讲-多企业案例,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Day53-nginx常用模块精讲-多企业案例

  • 1.Nginx常用模块介绍
  • 2.查看Nginx加载了哪些模块
  • 3.autoindex_module(目录浏览功能模块):
  • 4.Nginx站点目录浏览功能配置实践
  • 5.实际场景案例:模拟搭建阿里云镜像站及yum仓库
  • 6.nginx中文乱码解决方案
  • 7.Nginx访问控制功能
    • 7.1 ngx_http_access_module模块
    • 7.2 ngx_http_auth_basic_module模块
  • 8.Nginx请求限制、并发限制、限速3个模块
  • 9.补充源码

云原生、SRE、DevOPS
1.nginx开启目录浏览下载功能
2.nginx实现访问控制:1)基于IP控制。2)基于用户名密码控制
3.nginx实现流量限制:1)请求数限制。2)连接数限制。3)速率限制。
4.nginx7种状态指标
5.nginx location匹配、匹配优先级(*****)
6.nginx日志、访问日志、错误日志、日志过滤、日志切割
7.nginx错误页面,错误页面优雅显示

1.Nginx常用模块介绍

在生产环境中,配置、调整及优化Nginx软件,主要就是根据这些模块的功能修改相应的参数来实现的。通过官方地址链接: http://nginx.org/en/docs/可以查看到上述及更多模块的详细使用帮助。
链接: https://www.nginx.com/resources/wiki/modules/index.html

ngx_http_core_module         # 包括一些核心的http参数配置,对应Nginx的配置为http区块部分
ngx_http_access_module       # 访问控制模块,用来控制网站用户对Nginx的访问
ngx_http_gzip_module         # 压缩模块,对Nginx返回的数据压缩,属于性能优化模块
ngx_http_fastcgi_module      # fastcgi模块,和动态应用相关的模块,例如PHP
ngx_http_proxy_module        # proxy代理模块
ngx_http_upstream_module     # 负载均衡模块,可以实现网站的负载均衡功能及节点的健康检查
ngx_http_rewrite_module      # URL地址重写模块
ngx_http_limit_conn_module 	 # 限制用户并发连接数及请求数模块
ngx_http_limit_req_module 	 # 根据定义的key限制Nginx请求过程的速率
ngx_http_log_module	         # 访问日志模块,以指定的格式记录Nginx客户访问日志等信息
ngx_http_auth_basic_module	 # Web认证模块,设置Web用户通过账号密码访问Nginx
ngx_http_ssl_module	         # ssl模块,用于加密的http连接,如https
ngx_http_stub_status_module	 # 记录Nginx基本访问状态信息等的模块

2.查看Nginx加载了哪些模块

[root@web01 ~]# nginx -V

3.autoindex_module(目录浏览功能模块):

ngx_http_autoindex_module
以目录的形式呈现文件内容,点击可深入浏览或下载。

第三方模块介绍:nginx第三方模块

4.Nginx站点目录浏览功能配置实践

gzip /etc/nginx/conf.d/default.conf 
cat >/etc/nginx/conf.d/mirrors.etiantian.org.conf<<EOF
server {listen 80;server_name mirrors.etiantian.org;#charset utf-8;      #设定字符集,防止中文字符乱码显示。#autoindex on;       #启用目录列表功能。#autoindex_exact_size off;#autoindex_localtime on;location / {root /data/;index  index.html;}
}
EOF
#检测语法并重启
nginx -t && pkill nginx && lsof -i :80
systemctl start nginx && lsof -i :80
#创建测试目录和文件
mkdir /data
echo oldboyedu >/data/index.html
cp /bin/{ls,cp} /data

1)不配置首页测试,403权限问题

[root@web01 conf.d]# curl -H "host:mirrors.etiantian.org" 10.0.0.7
<html>
<head><title>403 Forbidden</title></head>
<body>
<center><h1>403 Forbidden</h1></center>
<hr><center>nginx/1.20.1</center>
</body>
</html>

403的3个原因:
1)没有首页,并且禁止目录浏览功能。
2)站点目录没有访问权限。
3)通过访问控制限制了访问。

2)配置首页index.html

[root@web01 conf.d]# echo oldboyedu >/data/index.html
[root@web01 conf.d]# curl -H "host:mirrors.etiantian.org" 10.0.0.7
oldboyedu

3)开启配置浏览功能,并删掉首页文件,增加文件后测试结果

server {listen 80;server_name mirrors.etiantian.org;#charset utf-8;      #设定字符集,防止中文字符乱码显示。autoindex on;        #启用目录列表功能。#autoindex_exact_size off;#autoindex_localtime on;#location / {root /data/;index  index.html;}
}
#注意:只开启1行: autoindex on;        #启用目录列表功能。
nginx -t && systemctl start nginx#删除首页文件增加其他文件
[root@web01 conf.d]# rm -f /data/index.html 
[root@web01 conf.d]# cp /bin/ls /bin/cp /data
[root@web01 conf.d]# curl -H host:mirrors.etiantian.org 10.0.0.7
<html>
<head><title>Index of /</title></head>
<body>
<h1>Index of /</h1><hr><pre><a href="../">../</a>
<a href="cp">cp</a>                                      02-Jul-2030 02:15               155176
<a href="ls">ls</a>                                      02-Jul-2030 02:15              117608
</pre><hr></body>
</html>
###可以看到目录下列表了。可以使用浏览器解析,访问查看。

4)最终结果和阿里云的镜像对比
在这里插入图片描述

5.实际场景案例:模拟搭建阿里云镜像站及yum仓库

[root@web01 ~]# gzip /etc/nginx/conf.d/mirrors.etiantian.org.conf
[root@web01 ~]# cat /etc/nginx/conf.d/mirrors.etiantian.org.conf
server {listen 80;server_name mirrors.etiantian.org;charset utf-8;root /data;   #正常站点目录location / {index index.html; #阿里云镜像首页}#yum仓库目录location /centos/ {autoindex on;autoindex_exact_size off;autoindex_localtime on;}
}
#首页文件
[root@web01 conf.d]# cat /data/index.html 
<html>
<head>
<title>Welcome to oldboyedu!</title>
</head>
<body>
<h1>阿里云镜像首页</h1>
<p><em>Thank you for using oldboyedu阿里云.</em></p>
</body>
</html>
#测试结果

a)访问首页

[root@web01 ~]# curl -H host:mirrors.etiantian.org 10.0.0.7
[root@web01 conf.d]# curl -H host:mirrors.etiantian.org 10.0.0.7
<html><head>
<title>Welcome to oldboyedu!</title>
</head>
<body>
<h1>阿里云镜像首页</h1>
<p><em>Thank you for using oldboyedu阿里云.</em></p>
</body>
</html>

b)访问镜像文件页面

[root@web01 ~]# curl -H host:mirrors.etiantian.org 10.0.0.7/centos/ # 注意结尾斜线
<html>
<head><title>Index of /centos/</title></head>
<body>
<h1>Index of /down/</h1><hr><pre><a href="../">../</a>
<a href="a.txt">a.txt</a>                                02-Jul-2030 02:33       0
<a href="b.txt">b.txt</a>                                02-Jul-2030 02:33       0
<a href="c.txt">c.txt</a>                                 02-Jul-2030 02:33      0
</pre><hr></body>
</html># 使用rsync同步官方源到yum仓库
[root@web01 centos]# rsync -avz rsync://rsync.mirrors.ustc.edu.cn/repo/centos/  /data/centos/
receiving incremental file list
./
2 -> 2.1
......
7 -> 7.9.2009
8 -> 8.4.2105
HEADER.html
RPM-GPG-KEY-CentOS-3
.......
RPM-GPG-KEY-CentOS-Testing-7
dir_sizes
filelist.gz# yum仓库搭建见77期Day24内容
# 针对rpm包目录配置yum仓库及客户端repo配置。

6.nginx中文乱码解决方案

1)Nginx配置文件server里加charset utf-8;
解决目录列表下的名字乱码

2)中文的文件内容utf-8格式(notepad++>格式>转为utf-8编码)。
解决文件内容中文乱码

7.Nginx访问控制功能

实现nginx访问控制主要有两个模块:

  • 基于来源IP访问控制,即 ngx_http_access_module模块。
  • 基于使用用户密码登录 ,即ngx_http_auth_basic_module模块。

7.1 ngx_http_access_module模块

允许限制对某些客户端地址的访问。
访问策略:
通过来源IP地址限制

	1:允许10.0.0.7和10段访问,其他全部拒绝。allow 10.0.0.7;        #允许单个IP地址allow 10.0.0.0/24;     #允许地址或地址段deny all;	           #拒绝所有2:拒绝10.0.0.7或10段访问,其他全部允许。deny 10.0.0.7;      #拒绝指定的地址或地址段deny 10.0.0.0/24;      #拒绝指定的地址或地址段allow all;          #允许所有的地址

测试配置:

[root@web01 conf.d]# cat mirrors.etiantian.org.conf.03 
server {listen 80;server_name mirrors.etiantian.org;charset utf-8;root /data;   #正常站点目录
location / {index index.html; #阿里云镜像首页
}#yum仓库目录
location /centos/ {autoindex on;autoindex_exact_size off;autoindex_localtime on;#allow 10.0.0.7;        #允许单个IP地址#allow 10.0.0.0/24;     #允许地址或地址段#deny all;	            #拒绝所有#deny 10.0.0.7;         #拒绝指定的地址或地址段#deny 10.0.0.0/24;      #拒绝指定的地址或地址段#allow all;             #允许所有的地址
}location /admin/ {           #网站后台,先进行办公源地址访问。allow 10.0.0.7;           #允许指定的地址或地址段deny all;                 #拒绝所有的地址}
}

注意:deny和allow的顺序是有影响的
默认情况下,从第一条规则进行匹配
如果匹配成功,则不继续匹配下面的内容。
如果匹配不成功,则继续往下寻找能匹配成功的内容。

生产场景:
网站后台限制,允许源IP访问。
#在办公室还是公网访问

location /admin/ {allow 10.0.0.7;           #允许指定的地址或地址段,办公室出口IP。deny all;                 #拒绝所有的地址}
# 回家登录vpn,属于局域网内部访问,然后在访问172.16.1.7/admin。

局限性:

在这里插入图片描述

在nginx反向代理后面的节点机器,如何获取最终网站用户客户端机器的IP?

解答:x_forwarded_for

在这里插入图片描述

7.2 ngx_http_auth_basic_module模块

基于用户名和密码限制
#使用htpaaswd创建新的密码文件, -c创建新文件 -b允许命令行输入密码

[root@oldboy ~]# yum install httpd-tools -y
[root@web01 conf.d]# rpm -ql httpd-tools
/usr/bin/ab   #压测工具
/usr/bin/htpasswd  #生成密码工具
[root@oldboy ~]# htpasswd -b -c /etc/nginx/auth_pass oldboy 123456
[root@web01 conf.d]# cat /etc/nginx/auth_pass
oldboy:$apr1$Cpuo1Dul$pE1Fh8KKf8OiP9SDCF0Xj.

#配置文件

[root@web01 conf.d]# cat mirrors.etiantian.org.conf
server {listen 80;server_name mirrors.etiantian.org;charset utf-8;root /data;   #正常站点目录
location / {index index.html; #阿里云镜像首页
}
#yum仓库目录
location /centos/ {autoindex on;autoindex_exact_size off;autoindex_localtime on;
}location /admin/ {           #网站后台,先进行办公源地址访问。#用户名密码验证auth_basic "oldboyedu Auth access";auth_basic_user_file /etc/nginx/auth_pass;}
}

生产场景用途说明及扩展
1.网站后台(结合LDAP统一认证,活动目录域控制),
邮箱、服务器、SVN、GIT、openvpn、PC密码、wiki、wify。
入职后HR开邮箱,一套用户、密码走遍公司。用户角色和权限是分离的。权限归属各部门负责。
www.baidu.com搜 ”ldap 老男孩“,获取老男孩老师讲解此部分内容。

2.ngx_http_auth_basic_module局限性
1)用户信息依赖文件
2)操作管理机械,效率低
解决方式:
1)nginx结合LUA实现高效验证
2)nginx配合LDAP打通,利用nginx-auth-ldap模块

8.Nginx请求限制、并发限制、限速3个模块

1.Nginx请求数、并发连接及下载速度限制主要有三个模块:

  • 请求数频率限制:
    限制某个客户端在单位时间内同时访问的Http请求数,
    由ngx_http_limit_req_module实现。
  • 并发连接频率限制:
    限制同一时间的并发数,使用ngx_http_limit_conn_module实现。
  • 下载限速:
    限制客户端下载资源的速度,使用ngx_http_core_module实现

ngx_http_limit_req_module模块: #limit_req 限制请求
用于限制每一个定义的密钥的请求的处理速率,特别是从一个单一的IP地址的请求的处理速率。限制是使用“泄漏桶”方法完成的

1.什么是限速?
限速分为两类,
1)限制某个客户端在单位时间内同时访问的Http请求数,
2)限制客户端的下载速度

2.限速方式方法
请求数限制:limit_req
限制某个客户端在单位时间内同时访问的Http请求数,由ngx_http_limit_req_module实现。
连接限制:limit_conn
限制同一时间的并发数,使用ngx_http_limit_conn_module实现。
下载限速:
限制客户端下载资源的速度,使用ngx_http_core_module实现

3.限速的原理
网络传输中常用两个的流量控制算法:漏桶算法令牌桶算法。这里的限制是使用“泄漏桶”方法实现的

漏桶算法(leaky bucket)

漏桶算法(leaky bucket)算法思想如图所示:

在这里插入图片描述

漏桶算法说明:

  • 水(请求)从上方倒入水桶,从水桶下方流出(被处理);
  • 来不及流出的水存在水桶中(缓冲队列),慢慢以固定速率流出;
  • 水桶满后水溢出(丢弃请求)

这个算法的核心是:缓存请求、勾速处理、多余请求直接丢弃。

请求限制(limit_req)

limit_req_zone $binary_remote_addr zone=req_one:10m rate=1r/s;
# 定义限制的关键字[$binary_remote_addr],用户来源的IP地址
# 定义内存区域,名称为one,大小10m
# 定义速率每秒处理1个请求。

实测配置:

# http标签段定义请求限制, rate限制速率,限制一秒钟最多一个IP请求
[root@web01 conf.d]# cat mirrors.etiantian.org.conf
limit_req_zone $binary_remote_addr zone=req_one:10m rate=1r/s;  #这个放此处即可
server {listen 80;server_name mirrors.etiantian.org;charset utf-8;root /data;   #正常站点目录
location / {index index.html; #阿里云镜像首页}#yum仓库目录
location /centos/ {autoindex on;autoindex_exact_size off;autoindex_localtime on;limit_req zone=req_one burst=5 nodelay;# 请求超过1r/s,剩下的将被延迟处理,请求数超过burst定义的数量,则返回503}location /admin/ {           #网站后台,先进行办公源地址访问。auth_basic "oldboyedu Auth access";auth_basic_user_file /etc/nginx/auth_pass;}
}
#burst与nodelay
#通过设置burst参数,可以允许Nginx缓存处理一定程度的突发,多余的请求可以先放到队列里,慢慢处理,这起到了平滑流量的作用。但是如果队列设置的比较大,请求排队的时间就会比较长,这对用户很不友好。#有什么解决办法呢?nodelay参数允许请求在排队的时候就立即被处理,也就是说只要请求能够进入burst队列,就会立即被后台worker处理,请注意,这意味着burst设置了nodelay时,系统瞬间的QPS可能会超过rate设置的阈值。nodelay参数要跟burst一起使用才有作用。

9.补充源码

# 01_test.etiantian.org.conf
server{listen 80;server_name _default;return 404;
}server {listen       80;server_name  test.etiantian.org;charset        utf-8;location / {root   /usr/share/nginx/html/test;index  index.html index.htm;}
}# 02_game.etiantian.org.conf
server {listen       80;server_name  game.etiantian.org etiantian.org;charset        utf-8;location / {root   /usr/share/nginx/html/game;index  index.html index.htm;}
}# mirrors.etiantian.org.conf
server {listen 80;server_name mirrors.etiantian.org;charset utf-8;root /data;   #正常站点目录location / {index index.html; #阿里云镜像首页}#yum仓库目录location /centos/ {autoindex on;autoindex_exact_size off;autoindex_localtime on;#allow 10.0.0.7;        #允许单个IP地址#allow 10.0.0.0/24;     #允许地址或地址段#deny all;	           #拒绝所有#deny 10.0.0.7;      #拒绝指定的地址或地址段#deny 10.0.0.0/24;      #拒绝指定的地址或地址段#allow all;          #允许所有的地址}location /admin/ {           #网站后台,先进行办公源地址访问。#用户名密码验证auth_basic "oldboyedu Auth access";auth_basic_user_file /etc/nginx/auth_pass;#来源IP限制#allow 10.0.0.7;           #允许指定的地址或地址段#deny all;                 #拒绝所有的地址}
}# mirrors.etiantian.org.conf.01
server {listen 80;server_name mirrors.etiantian.org;charset utf-8;autoindex on;autoindex_exact_size off;autoindex_localtime on;location / {root /data/;index  index.html;}
}# mirrors.etiantian.org.conf.02
server {listen 80;server_name mirrors.etiantian.org;charset utf-8;root /data;   #正常站点目录location / {index index.html; #阿里云镜像首页}#yum仓库目录location /centos/ {autoindex on;autoindex_exact_size off;autoindex_localtime on;}
}# mirrors.etiantian.org.conf.03
server {listen 80;server_name mirrors.etiantian.org;charset utf-8;root /data;   #正常站点目录location / {index index.html; #阿里云镜像首页}#yum仓库目录location /centos/ {autoindex on;autoindex_exact_size off;autoindex_localtime on;#allow 10.0.0.7;        #允许单个IP地址#allow 10.0.0.0/24;     #允许地址或地址段#deny all;	           #拒绝所有#deny 10.0.0.7;      #拒绝指定的地址或地址段#deny 10.0.0.0/24;      #拒绝指定的地址或地址段#allow all;          #允许所有的地址}location /admin/ {           #网站后台,先进行办公源地址访问。allow 10.0.0.7;           #允许指定的地址或地址段deny all;                 #拒绝所有的地址}
}

这篇关于Day53-nginx常用模块精讲-多企业案例的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/835049

相关文章

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

JS常用组件收集

收集了一些平时遇到的前端比较优秀的组件,方便以后开发的时候查找!!! 函数工具: Lodash 页面固定: stickUp、jQuery.Pin 轮播: unslider、swiper 开关: switch 复选框: icheck 气泡: grumble 隐藏元素: Headroom

python: 多模块(.py)中全局变量的导入

文章目录 global关键字可变类型和不可变类型数据的内存地址单模块(单个py文件)的全局变量示例总结 多模块(多个py文件)的全局变量from x import x导入全局变量示例 import x导入全局变量示例 总结 global关键字 global 的作用范围是模块(.py)级别: 当你在一个模块(文件)中使用 global 声明变量时,这个变量只在该模块的全局命名空

Hadoop企业开发案例调优场景

需求 (1)需求:从1G数据中,统计每个单词出现次数。服务器3台,每台配置4G内存,4核CPU,4线程。 (2)需求分析: 1G / 128m = 8个MapTask;1个ReduceTask;1个mrAppMaster 平均每个节点运行10个 / 3台 ≈ 3个任务(4    3    3) HDFS参数调优 (1)修改:hadoop-env.sh export HDFS_NAMENOD

性能分析之MySQL索引实战案例

文章目录 一、前言二、准备三、MySQL索引优化四、MySQL 索引知识回顾五、总结 一、前言 在上一讲性能工具之 JProfiler 简单登录案例分析实战中已经发现SQL没有建立索引问题,本文将一起从代码层去分析为什么没有建立索引? 开源ERP项目地址:https://gitee.com/jishenghua/JSH_ERP 二、准备 打开IDEA找到登录请求资源路径位置

深入探索协同过滤:从原理到推荐模块案例

文章目录 前言一、协同过滤1. 基于用户的协同过滤(UserCF)2. 基于物品的协同过滤(ItemCF)3. 相似度计算方法 二、相似度计算方法1. 欧氏距离2. 皮尔逊相关系数3. 杰卡德相似系数4. 余弦相似度 三、推荐模块案例1.基于文章的协同过滤推荐功能2.基于用户的协同过滤推荐功能 前言     在信息过载的时代,推荐系统成为连接用户与内容的桥梁。本文聚焦于

【C++】_list常用方法解析及模拟实现

相信自己的力量,只要对自己始终保持信心,尽自己最大努力去完成任何事,就算事情最终结果是失败了,努力了也不留遗憾。💓💓💓 目录   ✨说在前面 🍋知识点一:什么是list? •🌰1.list的定义 •🌰2.list的基本特性 •🌰3.常用接口介绍 🍋知识点二:list常用接口 •🌰1.默认成员函数 🔥构造函数(⭐) 🔥析构函数 •🌰2.list对象

常用的jdk下载地址

jdk下载地址 安装方式可以看之前的博客: mac安装jdk oracle 版本:https://www.oracle.com/java/technologies/downloads/ Eclipse Temurin版本:https://adoptium.net/zh-CN/temurin/releases/ 阿里版本: github:https://github.com/

30常用 Maven 命令

Maven 是一个强大的项目管理和构建工具,它广泛用于 Java 项目的依赖管理、构建流程和插件集成。Maven 的命令行工具提供了大量的命令来帮助开发人员管理项目的生命周期、依赖和插件。以下是 常用 Maven 命令的使用场景及其详细解释。 1. mvn clean 使用场景:清理项目的生成目录,通常用于删除项目中自动生成的文件(如 target/ 目录)。共性规律:清理操作

【区块链 + 人才服务】可信教育区块链治理系统 | FISCO BCOS应用案例

伴随着区块链技术的不断完善,其在教育信息化中的应用也在持续发展。利用区块链数据共识、不可篡改的特性, 将与教育相关的数据要素在区块链上进行存证确权,在确保数据可信的前提下,促进教育的公平、透明、开放,为教育教学质量提升赋能,实现教育数据的安全共享、高等教育体系的智慧治理。 可信教育区块链治理系统的顶层治理架构由教育部、高校、企业、学生等多方角色共同参与建设、维护,支撑教育资源共享、教学质量评估、