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

相关文章

MySql基本查询之表的增删查改+聚合函数案例详解

《MySql基本查询之表的增删查改+聚合函数案例详解》本文详解SQL的CURD操作INSERT用于数据插入(单行/多行及冲突处理),SELECT实现数据检索(列选择、条件过滤、排序分页),UPDATE... 目录一、Create1.1 单行数据 + 全列插入1.2 多行数据 + 指定列插入1.3 插入否则更

nginx 负载均衡配置及如何解决重复登录问题

《nginx负载均衡配置及如何解决重复登录问题》文章详解Nginx源码安装与Docker部署,介绍四层/七层代理区别及负载均衡策略,通过ip_hash解决重复登录问题,对nginx负载均衡配置及如何... 目录一:源码安装:1.配置编译参数2.编译3.编译安装 二,四层代理和七层代理区别1.二者混合使用举例

nginx -t、nginx -s stop 和 nginx -s reload 命令的详细解析(结合应用场景)

《nginx-t、nginx-sstop和nginx-sreload命令的详细解析(结合应用场景)》本文解析Nginx的-t、-sstop、-sreload命令,分别用于配置语法检... 以下是关于 nginx -t、nginx -s stop 和 nginx -s reload 命令的详细解析,结合实际应

Python通用唯一标识符模块uuid使用案例详解

《Python通用唯一标识符模块uuid使用案例详解》Pythonuuid模块用于生成128位全局唯一标识符,支持UUID1-5版本,适用于分布式系统、数据库主键等场景,需注意隐私、碰撞概率及存储优... 目录简介核心功能1. UUID版本2. UUID属性3. 命名空间使用场景1. 生成唯一标识符2. 数

Spring Boot中WebSocket常用使用方法详解

《SpringBoot中WebSocket常用使用方法详解》本文从WebSocket的基础概念出发,详细介绍了SpringBoot集成WebSocket的步骤,并重点讲解了常用的使用方法,包括简单消... 目录一、WebSocket基础概念1.1 什么是WebSocket1.2 WebSocket与HTTP

PostgreSQL的扩展dict_int应用案例解析

《PostgreSQL的扩展dict_int应用案例解析》dict_int扩展为PostgreSQL提供了专业的整数文本处理能力,特别适合需要精确处理数字内容的搜索场景,本文给大家介绍PostgreS... 目录PostgreSQL的扩展dict_int一、扩展概述二、核心功能三、安装与启用四、字典配置方法

golang中reflect包的常用方法

《golang中reflect包的常用方法》Go反射reflect包提供类型和值方法,用于获取类型信息、访问字段、调用方法等,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值... 目录reflect包方法总结类型 (Type) 方法值 (Value) 方法reflect包方法总结

C# 比较两个list 之间元素差异的常用方法

《C#比较两个list之间元素差异的常用方法》:本文主要介绍C#比较两个list之间元素差异,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1. 使用Except方法2. 使用Except的逆操作3. 使用LINQ的Join,GroupJoin

Python中re模块结合正则表达式的实际应用案例

《Python中re模块结合正则表达式的实际应用案例》Python中的re模块是用于处理正则表达式的强大工具,正则表达式是一种用来匹配字符串的模式,它可以在文本中搜索和匹配特定的字符串模式,这篇文章主... 目录前言re模块常用函数一、查看文本中是否包含 A 或 B 字符串二、替换多个关键词为统一格式三、提

python常用的正则表达式及作用

《python常用的正则表达式及作用》正则表达式是处理字符串的强大工具,Python通过re模块提供正则表达式支持,本文给大家介绍python常用的正则表达式及作用详解,感兴趣的朋友跟随小编一起看看吧... 目录python常用正则表达式及作用基本匹配模式常用正则表达式示例常用量词边界匹配分组和捕获常用re