tengine Tengine 常用模块使用介绍
原标题:Tengine常用模块使用介绍
Tengine和Nginx
Tengine简介
2011年12月起:Tengine是淘宝发起的Web服务器项目。它在Nginx的基础上,增加了许多先进的功能和特性,以满足访问量大的网站的需求。天音的性能和稳定性已经在淘宝、天猫商城等大型网站上得到了很好的测试。其最终目标是构建一个高效、稳定、安全、易用的Web平台。
Nginx简介
Nginx是一个开源项目,是一个高性能的HTTP服务器和反向代理。也可以作为IMAP/POP的反向代理。通过简单的配置,可以实现高性能,占用较少的系统资源。Nginx最初是为了解决C10K问题而设计的,它非常轻量级,只支持事件模型。
特征
Nginx的特性
模块化设计,可扩展性好,可靠性高:master/worker支持热部署:更新配置文件、更改日志文件、更新服务器版本,无需停机。低内存消耗:保持活动连接模式下的10,000个非活动连接仅消耗250万内存。事件驱动、aio、mmapDOS机制只存在于2016-04-26 nginx-1.10.0版本
Tengine特性
继承Nginx-1.6.2的所有功能,兼容Nginx配置;动态模块加载支持。添加模块不再需要重新编译整个Tengine;支持SO_REUSEPORT选项,连接性能提升到官方nginx的三倍;它还支持HTTP v2协议和SPDY v3协议,可以同时使用这两种协议。流式上传到HTTP后端服务器或FastCGI服务器大大降低了机器的I/O压力;更强大的负载均衡能力,包括一致性哈希模块和会话保持模块,还可以对后端服务器进行主动健康检查,根据服务器状态自动上线和下线,动态分析上游出现的域名;输入过滤机制支持。通过使用这种机制,编写Web应用防火墙更加方便。设置后端失败时代理、memcached、fastcgi、scgi和uwsgi的重试次数。动态脚本语言Lua支持它。扩展函数非常高效和简单;支持管道和系统日志形式的日志和日志采样;支持按指定关键字采集天京的运行状态;将多个CSS和Java文件访问请求合并成一个请求;自动删除空白色字符和注释以减小页面大小,并根据CPU数量自动设置进程数和绑定CPU亲缘关系;监控系统的负载和资源占用,以保护系统;显示对运维人员更友好的错误信息,便于定位错误机器;更强大的反攻击模块;更方便的命令行参数,比如列出编译的模块和支持的指令;到期时间可以根据访问文件类型设置;
Tengine安装
下载地址:https://file.jichengguandao.com/uploads/2021-11/21/c3skrtfeif0.html
一个
2
三
四
五
六
七
八
九
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# yum -y安装pcre-develop open SSL-develop zlib-develop
# ./configure
前缀=/usr/local
sbin-path=/usr/sbin/nginx
conf-path =/etc/nginx/nginx . conf
error-log-path =/var/log/nginx/error . log
http-log-path =/var/log/nginx/access . log
pid-path=/var/run/nginx.pid
lock-path=/var/run/nginx.lock
http-client-body-temp-path =/var/cache/nginx/client _ temp
http-proxy-temp-path =/var/cache/nginx/proxy _ temp
http-fastcgi-temp-path =/var/cache/nginx/fastcgi _ temp
http-uwsgi-temp-path =/var/cache/nginx/uwsgi _ temp
http-scgi-temp-path =/var/cache/nginx/scgi _ temp
用户=nginx
group=nginx
带-http_ssl_module
带-http_realip_module
带-http _ add _ module
带-http_sub_module
带-http_dav_module
带-http_flv_module
带-http _ MP4 _模块
带-http_gunzip_module
带-http_gzip_static_module
带-http_random_index_module
带-http_secure_link_module
带-http_stub_status_module
带-http_auth_request_module
带螺纹的
带流
带-stream_ssl_module
带-http_slice_module
带文件aio
带-http_v2_module
#制作&&制作安装
启动前配置:
一个
2
三
echo“export PATH = $ PATH:/usr/local/nginx/sbin”& gt;/etc/profile.d/nginx.sh
useradd-rnginx-s/sbin/nologin
mkdir/var/cache/nginx/client _ temp-PV
一、核心模块
1.主端配置
公约:
大部分模块的使用方式与nginx相同,nginx模块的使用可以参考nginx官方网站tengine。
语法:表示函数或选项,后跟语法
默认值:默认值
上下文:可以出现的上下文
参考文献:https://file.jichengguandao.com/uploads/2021-11/21/juayrehy4xu.html
参考文献:http://nginx.org/en/docs/
一、必要的常用配置
1.用户指定用于运行工作进程的用户和组
语法:用户用户;
默认:用户无人无人;
背景:主要
2.pid指定nginx进程的pid文件路径
yntax: pid文件;
默认值:
pid nginx.pid
背景:主要
3.单个工作进程可以打开的最大文件数
语法:worker _ rlimit _ nofile number
默认:-
背景:主要
二、性能优化相关配置
1.worker _ processes number | auto worker的进程数;一般来说,CPU内核的数量应该减少1
语法:worker _ processes number | auto
默认值:
worker _ processes 1;
背景:主要
2.worker _ cpu _ affinitypumask…将工作进程绑定到CPU
语法:worker _ CPU _ affinity cpumask…;
worker _ cpu _ affinity auto
默认:-
背景:主要
示例:
一个
2
三
四
五
六
七
八
九
双核cpu,启动八个进程
worker _ processes 8;
worker _ CPU _ affinity 0110011001100110;
8核cpu,启动8个进程
worker _ processes 8;
worker _ CPU _ affinity 10000000010000000100000000100000001000000001000000000001000000001000000000001;
8核cpu,启动2个进程
worker _ processes 2;
worker _ CPU _ affinity 101010100101010101;
3.worker_priority nice定义了工作流程的优先级。数字越小,优先级越高
相应的优先级为:100-139
语法:worker _ priority number
默认值:
worker _ priority 0;
背景:主要
c、调试定位问题
1.守护程序开启|关闭是否将nginx进程作为守护程序启动
语法:守护进程开启|关闭;
默认值:
守护进程打开;
背景:主要
2.master_process on | off是否使用master/worker模型启动nignx进程
语法:master _ process on | off
默认值:
master _ process on
背景:主要
3、error_log文件| stderr | syslog:服务器=地址|内存:大小
错误日志记录方法及其日志级别
一个
2
三
四
五
六
七
八
九
10
11
语法:error_log文件;
默认值:
error _ log log/error . log错误;
上下文:主,http,邮件,流,服务器,位置
方法:
文件/路径/到/某些_日志_文件;
Stderr:发送到错误输出;
Syslog:服务器=地址:发送到syslog服务器;
内存:大小:缓冲区大小
例如:
error_loglogs/error.lognotice
2.事件段配置
1.worker_connections数每个工作进程可以同时打开的最大连接数
语法:worker _ connections number
默认值:
工人_连接512;
背景:事件
最大并发数=最大连接数*工作进程数4
2.use方法表示处理并发连接请求时使用的方法
语法:使用方法;
默认:-
背景:事件
3.当accept_mutex on | off被启用时,这意味着让多个工作人员依次响应新请求并进行序列化
语法:accept _ mutex on | off
默认值:
accept _ mutex on
背景:事件
3.服务器段的常见配置
1、听地址
监听端口;
监听unix:路径
默认服务器:默认虚拟主机
Ssl:将服务仅限于ssl连接
积压:延迟队列的长度
接收缓冲区大小
Sndbuf:发送缓冲区大小
2.服务器名…主机名
语法:server _ name name…;
默认值:
server _ name
上下文:服务器
指示当前服务器的主机名;由一个或空个白色字符分隔的多个主机;
支持使用*任何长度的任何字符;
支持以~开头的正则表达式模式字符串;
应用策略:
第一,匹配准确;
左边,*通配符匹配;
*右侧通配符匹配;
正则表达式模式匹配;
例如:
服务器名www.example.com;
server _ name * .example.com
server _ name www . example . *;
服务器名~^..例子..$;
www.example.com mail.example.com
3.TCP_NODELAY选项是否通过打开|关闭tcp_nodelay为保持激活模式下的连接启用
语法:tcp _ nodelay on | off
默认值:tcp _ nodelay on
上下文:http,服务器,位置
4.sendfile on | off是否启用sendfile功能
语法:sendfile on | off
默认值:
发送文件;
上下文:http,服务器,位置,如果在位置中
4.路径相关配置
1.根路径设置web资源路径映射
语法:根路径;
默认值:
根html
上下文:http,服务器,位置,如果在位置中
例如:
一个
2
三
位置/i/
根/数据/w3;
}
2、locationuri { … }
语法:locationuri { … }
位置@名称{ … }
默认:-
上下文:服务器、位置
根据用户要求的URI匹配定义的位置。匹配时,请求将由相应位置块中的指令处理;
=: URIs完全匹配;
~:做正则表达式模式匹配,区分字符大小写;
~ *:做正则表达式模式匹配,不区分字符大小写;
~:匹配URI的左半部分,不区分字符大小写;
匹配优先级:=,~,~/~ *,无符号;
例如:
一个
2
三
位置=/{ 0
;
}
一个
2
三
位置/
;
}
一个
2
三
位置/文档/
;
}
一个
2
三
location^~/images/{
;
}
一个
2
三
位置~*。${
;
}
2.别名路径定义路径别名
语法:别名路径;
默认:-
背景:位置
例如:
一个
2
三
位置/i/
别名/数据/w3/images/;
}
3、错误_页面代码… ] uri
根据用户其他资源的http响应的状态代码重定向错误的页面
语法:error _ page code…]uri;
默认:-
上下文:http,服务器,位置,如果在位置中
有许多配置选项,这里介绍一下。有兴趣的话可以参考nginx或者Teengine的官方文件,这里不做过多介绍。这里有一些常用的模块,比如ssl、重写、gzip、fastcgi、防盗链、stasus等等
正式文件:
https://file.jichengguandao.com/uploads/2021-11/21/juayrehy4xu.html
http://nginx.org/en/docs/
二、腾金常用模块
1、模块ngx _ http _重写_模块
ngx _ http _ rewrite _ module模块可以使用正则表达式重定向请求url。
A.重写正则表达式替换重定向请求
根据正则表达式检查用户请求的URI,并在匹配时用替换指定的字符串替换它
存在于同一位置的多个重写规则将被从上到下逐一检查,并且可以使用标志来控制该循环功能
如果替换以http://或https://开头,替换结果将通过重定向直接返回给客户端
:
最后:重写完成后,停止当前位置当前uri的其他后续重写操作,改为新uri的新一轮处理;Break:重写完成后,停止对当前位置当前uri的其他后续重写操作;重定向:重写完成后,将重写后生成的新URL以临时重定向的方式直接返回给客户端,客户端请求新URL;永久:重写完成后,重写后生成的新URL以永久重定向的形式直接返回给客户端,客户端请求新URL;
B.是否启用重写日志
启用后,日志信息会发送到错误日志
语法:rewrite _ log on | off
默认值:rewrite _ log off
上下文:http,服务器,位置,如果
c、if{ …}条件判断机制
当满足条件时,执行配置块中的配置
条件:
比较表达式:
==, !=
~:模式匹配,区分大小写的字母;~ *:模式匹配,字符不区分大小写;!~:模式不匹配,字母区分大小写;!~ *:模式不匹配,字母不区分大小写;
文件和目录的存在性判断:
-f!文件d!-d:目录-e!-e:有-x,!-x:执行
例如:
一个
2
三
四
五
六
七
八
九
10
11
12
13
14
15
如果{
rewrite^$/msie/break;
}
if "){ 0
设置$ id $ 1;
}
如果{
return405
}
如果{
limit _ rate10k
}
如果{
return403
}
d、返回代码;停止处理并将指定的代码返回给客户端
语法:返回代码;
返回代码网址;
返回网址;
默认:-
上下文:服务器,位置,如果
E.设置$变量值用户定义变量
语法:设置$变量值;
默认:-
上下文:服务器,位置,如果
ngx_http_rewrite_module示例:
一个
2
三
四
五
六
七
八
#将172.18.4.70下的所有访问映像重定向到tupian目录
# vim/usr/local/nginx/conf/nginx . conf
位置/图像{
rewrite^/image//tupian/last;
rewrite^/image//tupian/最后;
返回403;
index.html指数;
}
测试效果:
一个
2
三
四
五
#添加测试页面
# cat/usr/local/nginx/html/image/index . html
图像
# cat/usr/local/nginx/html/tupian/index . html图皮人的
if{ …}示例
一个
2
三
如果{
return405
}
2、模块ngx_http_gzip_module
过滤、压缩和传输指定类型的资源以节省带宽
gzip开|关;
启用或禁用gzip压缩响应消息;
语法:gzip on | off
默认:gzip关闭;
上下文:http,服务器,位置,如果在位置中
gzip_comp_level级别;
指定压缩比,1-9,默认值为1;
语法:gzip _ comp _ level
默认值:gzip _ comp _ level 1;
上下文:http,服务器,位置
gzip _ disable regex…;
Regex是匹配客户端浏览器类型的模式,这意味着不会对所有匹配的浏览器执行压缩响应;
语法:gzip _ disable regex…;
默认:-
上下文:http,服务器,位置
该指令出现在版本0.6.23中。
gzip_min_length长度;
触发压缩功能启用的响应消息的最小长度;
语法:gzip_min_length长度;
默认值:gzip _ min _ length 20
上下文:http,服务器,位置
gzip _ http _ version 1.0 | 1.1
启用压缩响应功能时,设置协议的最低版本;
语法:gzip _ http _ version 1.0 | 1.1
默认:gzip _ http _ version 1.1
上下文:http,服务器,位置
gzip _ types mime-type…;
指定仅执行压缩的资源内容类型;文本/html;是默认值;
语法:gzip _ types mime-type…;
默认值:gzip _ types text/html;
上下文:http,服务器,位置
gzip _ proxied off |过期|无缓存|无存储|私有| no _ last _ modified | no _ etag | auth | any…;
对代理的请求基于哪个属性来判断是否应该启用压缩功能;
语法:gzip _ proxied off |过期|无缓存|无存储|私有| no _ last _ modified | no _ etag | auth | any…;
默认值:gzip _ proxied off
上下文:http,服务器,位置
示例配置:
示例:
gzip on
gzip _ http _ version 1.0
gzip _ comp _ level 6;
gzip _ disable msie6
gzip _ min _ length 2;
gzip _ types text/纯文本/css text/xml应用程序/x-java应用程序/xml应用程序/json应用程序/Java-;
测试示例:
配置前:检查响应头消息中是否有gzip选项
配置后:检查响应头消息中是否有gzip选项
3、模块ngx_http_fastcgi_module
fastcgi_pass地址地址是fpm服务器监听的地址和端口;
示例:fastcgi 127 . 0 . 0 . 1:9000;
Fastcgi_index名称Fastcgi应用程序主页名称
参数值传递给fpm服务器的参数及其值
fastcgi _ cache _ path _ path keys _ zone = name:size;
路径:用于存储缓存文件数据的文件系统路径;
Max_size=size:定义此路径中用于存储缓存数据的大小空;
级别=#]:缓存目录级别定义;
级别=1:2
keys _ zone = name:size空之间的名称和大小,用于在内存中缓存k/v映射关系;
非活动=时间
注意:它只能在http上下文中定义
例如:
一个
fastcgi _ cache _ path/var/cache/nginx/client _ temp levels = 1:2 keys _ zone = one:10m;
存储格式:
一个
/var/cache/nginx/client _ temp/c/29/b7f 54 B2 df 7773722d 382 f 4809d 65029 c
Fastcgi_cache zone | off是否启用缓存,如果是,数据缓存在哪个缓存中
fastcgi_cache_key字符串定义了要使用的缓存键
例如:fastcgi _ cache _ key $ request _ uri
fastcgi _ cache _ methods get | head | post…缓存了哪些类型的请求相关数据
Fastcgi_cache_validtime为不同的响应代码设置其可缓存持续时间
注意:调用缓存时,至少应该指定三个参数
fastcgi_cache
fastcgi_cache_key
fastcgi_cache_valid
测试示例:
一个
2
三
四
五
六
七
八
九
# vim/usr/local/nginx/conf/nginx . conf
fastcgi _ cache _ path/var/data/nginx/cache levels = 1:2 keys _ zone = my cache:10minactive = 4m;
#以上选项必须在http上下文中
位置。PHP $ { 0
fastcgi _ pass 127 . 0 . 0 . 1:9000;
fastcgi _ cache mycache
fastcgi _ cache _ key $ request _ uri
fastcgi _ cache _ valid any10m
}
启用前检查:/var/data/nginx/缓存目录
启动后检查/var/data/nginx/cache目录
4、模块ngx_http_ssl_module
Ssl开|关是否启用当前虚拟主机的SSL功能
语法:ssl开|关;
默认值:ssl关闭;
上下文:http,服务器
Ssl_certificate文件当前虚拟主机使用的PEM格式的证书文件
语法:ssl_certificate文件;
默认:-
上下文:http,服务器
Ssl_certificate_key文件当前虚拟机使用的证书文件中公钥对的私钥文件路径语法:ssl_certificate_key文件;
默认:-
上下文:http,服务器
Ssl _ protocolsSSL协议版本
语法:ssl _ protocols
默认值:SSL _ protocol TLS v1 TLS v1 . 1 TLS v1 . 2;
上下文:http,服务器
Ssl_session_cache off | none |]表示Ssl会话的缓存机制
语法:SSL _ session _ cache off | none |];
默认值:ssl _ session _ cache none
上下文:http,服务器
内建:使用openssl的内置缓存机制,这是每个工作人员独有的;
Shared:所有工作进程共享的缓存;
Name:缓存空之间的名称;
size:cache空之间的大小;每1MB内存空可以缓存4000个会话
Ssl _ session _ time out SSL会话超时期限是指SSL会话缓存中缓存条目的有效期限
语法:ssl _ session _ timeout
默认值:ssl _ session _ timeout 5m
上下文:http,服务器
示例:
简介:请查看我的其他博客,了解证书的使用情况。
一个
2
三
四
五
六
七
八
九
10
11
12
13
14
# vim /etc/nginx/nginx.conf
服务器{
听443ssl
服务器名www.ops.com;
SSL _ certificate/usr/local/nginx/SSL/nginx . CRT;
SSL _ certificate _ key/usr/local/nginx/SSL/nginx . key;
ssl_session_cache共享:SSL:1m;
ssl _ session _ timeout 5m
位置/
根html
index.html·index.htm指数;
}
}
# nginx -s重新加载
查看权限:
4、模块ngx_http_referer_module
valid _ referers none | blocked | server _ name | string…
推荐人:定义法律数据。本模块用于定义什么是合法的
语法:valid _ referers none | blocked | server _ name | string…;
默认:-
上下文:服务器、位置
无表示请求消息头中没有引用者头
Blocked表示请求消息的引用头没有值
Server _ names表示其值是主机名
例:根据上面的定义,如果是非法的,就返回403
一个
2
三
四
五
六
有效的推荐人无被阻止的服务器名
*.zx.com zx。* www . zx . org/gallery/
~.谷歌。;
如果{
return403
}
5、模块ngx _ http _ stub _ status _模块
Status_module:用于输出nginx的基本状态信息
示例:
一个
2
三
四
# vim /etc/nginx/nginx.conf
位置/状态{
stub_status打开;
}
参观和测试:
每个参数的含义:
Active connection:活跃连接数accepts:已经接受的客户端请求的总数量handled:已经处理的数量request:客户端发来的总请求数量Reading:处于读取客户端请求报文首部的连接数Writing:处于向客户端发送响应报文过程的连接数Waiting:处于等待客户端发出请求的空闲请求连接数