论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
IT评测·应用市场-qidao123.com技术社区
»
论坛
›
运维.售后
›
运维.售后
›
四、nginx的优化和location匹配规则
四、nginx的优化和location匹配规则
羊蹓狼
论坛元老
|
2025-1-1 07:35:00
|
显示全部楼层
|
阅读模式
楼主
主题
1607
|
帖子
1607
|
积分
4821
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
nginx的优化
隐藏版本号
当我们访问nginx网页,可以检察nginx的版本号,如下表现1.220,如许会暴露自己版本的毛病。
可以通过以下办法隐藏自己的版本号
1、server_token off:通用方法编译、apt、yum都可以使用
但是这种办法只能隐藏版本,服务名称还在
我们配置nginx的主配置文件,在http里面加一个一段话,表示隐藏版本号
重启nginx后,革新网页,我们会发现已经隐藏了版本号
2、修改源码文件:仅限于编译安装
server_token on
我们进入nginx安装包,找到nginx的焦点文件core,编辑源码nginx.h,具体操纵如下
配置文件里这两行分别是版本号和服务名
如我们修改成如许,保存退出
接着需要重新编译nginx才气生效,再举行编译安装
make -j 4 && make install
最后配置nginx的主配置文件,把之前的off改成on
重启nginx后,革新网页,我们会发现已经变成我们设定的服务名和版本号了
nginx的日记分割
nginx本身没有设计日记分割的工具,
运维
职员自己举行处理和分割。
使用shell脚本实现日记分割:
如我们使用vim nginxlog.sh创建一个脚本,具体操纵如下
#!/bin/bash
d=$(date +%Y-%m-%d)
dir="/usr/local/nginx/logs"
logs_access='/usr/local/nginx/logs/access.log'
logs_error='/usr/local/nginx/logs/error.log'
pid_file='/usr/local/nginx/run/nginx.pid'
if [ ! -d "$dir" ]
then
mkdir -p $dir
fi
mv ${logs_access} ${dir}/access_${d}.log
#mv /usr/local/nginx/logs/access.log /usr/local/nginx/logs/access_2024-12-09.log
mv ${logs_error} ${dir}/error_${d}.log
#mv /usr/local/nginx/logs/error.log /usr/local/nginx/logs/error_2024-12-09.log
kill -USR1 $(cat ${pid_file})
find $dir -mtime +30 -exec rm -rf {} \;
当我们允许脚本之后,会发现在nginx的日记文件夹下,生成了按日期分割的日记文件
注意:nginx按日期分割的日记文件只能检察历史文件,如果是在生成之后的日记不会记录在分割
后的日记文件里,还是会在access.log和error.log里。
以是nginx的日记分割适合检察前一天的日记文件,我们只需要创建好定时任务,如每天0点执行脚
本(0 0 * * * /opt/nginxlog.sh)。
keepalive_timeout
http1.1之后特有的模式,keepalive模式,主流的前端软件都支持keepalive。
连接保持
数据传送完毕之后,连接不是立刻断开。而是一段时间之后保持连接,无需在举行三次握手。如果
需要传输数据,可以继续使用这个连接。连接保持的时间不宜太长,一般在60-180秒,keepalive
的保持时间太长,会占用过多的资源,影响性能。
会话保持
我们和服务端建立连接之后,在一定时间保持登录或者固定状态,保证在浏览时数据同等。
连接保持是关于连接的控制
会话保持是关于交互的控制
增补两个timeout
client_header_timeout 80; #客户端向服务端发送一个完整哀求头的超时时间,ngingx就会返回408。
client_body_timeout 80; #客户端和服务端建立连接之后,没有在规定时间内发送一个完整的哀求体,或者没有任何内容,ngingx也就会返回408。
nginx的并发处理和cpu绑定
1、work_processes 2 #修改为内核数量的2倍或者同等,一般设置2-4个,不能凌驾8个,凌驾8个性能反而会低落。
worker_connections 1024 #每个子进程的并发连接数,默认1024,凌驾1024,就要修改体系限制文件配额的配置文件/etc/security/limits.conf。
nginx处理文件的本领,即同时处理总的并发数 = 内核数(worker_processes)* 子进程处理并发数(worker_connections )
2、如下图片表现,如果我们主机是4核的,那么每个进程进来都需要内核来处理,可能会造成同一个进程哀求可能被不同内核处理(跳频),以是需要我们把进程绑定到cpu上,一个进程有一个cpu处理,防止跳频。如下4个进程绑定4个cpu分别是01 10 100 1000,如果是2核的,定01 10。
work_cpu_affinity #将nginx的进程绑定到cpu的焦点,防止cpu之间的切换,提高性能
timewait的回收机制
timewait状态
timewait是tcp连接当中一种正常状态。
http1.1版本开始多了一个连接保持。
timewait状态下,tcp连接处于等待阶段,等待一个持续的时间,确保两边的数据尽可能的传输完毕
两个目的:
1、确保连接时被可靠的关闭:即时是四次挥手之后,对方有可能还有数据未处理完毕,在timewait阶段可以保证数据依然被正确的处理,防止旧的数据包影响其他新的连接。
2、制止出现连接复用的问题:如果timewait不存在,或者时间较短,旧的连接可能依然处于网络之中,有可能被以为新的连接。
如我们重启nginx服务之后,curl检察nginx服务后,检察timewait数量,表现如下
netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}' #检察timewait数量
当服务器上同时有大量的短链接频仍的创建和烧毁,或者处理大量并发连接时,timewait就会出现堆积(如僵尸进程)。
timewait的回收机制配置
处理timewait并发堆积
/etc/sysctl.conf:修改内核的配置为文件,加入以下内容
fin_wait 1:终止等待1,表示应用程序已经发送连接关闭的哀求,正在等待另一端的确认
fin_wait 2:表示另一端已经确认连接关闭的哀求,正在等待另一端发送连接关闭的哀求
net.ipv4.tcp_tw_recycle=1:在NAT环境中,地点转换,会加速体系收回timewait,在nat环境中,源地点会发生变化,他总是基于源IP地点举行辨认,多个客户端使用一个相同的外部IP地点时,有连接混淆的情况,导致客户端无法正确连接。
最后配置完之后,别忘了 sysctl -p 革新配置。
通俗的说:timewait的回收机制就是,进来排队,端口没有了也没关系等着,连接上了尽量保持联系,确认关闭连接后再回收端口。
配置防盗链
防止别的用户通过链接的方式盗用网站的图片
我们使用两台主机,zw5作为原网站,而zw4作为盗链网站。
1、我们配置zw5的nginx主配置文件,添加一个location,如下
vaild_referers:设置信任的网站可以正常的使用图片
none:允许没有http_refer的哀求,www.xy104.com/ls.jpg=www.xy104.com
blocked:允许不是http://开头的哀求,http://www.xy104.com=www.xy104.com
$invalid_referer:不是信任的网站的地点,就是以为是真,true,为真执行rewrite就是重写,重定向访问:http://www.xy104/com/error.png
2、配置访问图片
提前准备好图片名称是 ls.jpg 和 error.png
3、配置index.html,如下,表示正常访问是我们ls.jpg图片
4、配置主机映射/etc/hosts
5、对zw4盗链主机配置index.html,如下,表示直接复制链接访问 zw104.com/ls.jpg
6、配置zw4盗链主机的映射/etc/hosts
7、验证
当正常访问www.zw104.com后表现的网页是正常的,也就是正常访问主机zw5的时间是正常的。
当我们访问zw4的nginx(www.zw105.com)的时间,即访问盗链网站,会出现我们提前放好的 error.png图片
nginx的页面压缩和图片缓存
页面压缩
对文件举行压缩的功能,节约带宽,提高访问速度
前提是要有模块:http_gzip_module,这个我在装nginx的时间都加载了。
首先要配置nginx的主配置文件,如下:主要使用前4行代码即可
这种方法压缩结果并不佳,相识即可
图片缓存
图片缓存只需要在nginx主配置文件添加一个location规则,如下
这时间我们访问nginx的图片后,会发现缓存时间86400秒
location匹配的规则和优先级
在nginx当中,匹配的对象一般是URI来匹配
多个location一旦匹配此中之一,不再匹配其他location
location匹配的分类
1、精确匹配:location = / {...}
=:表示完全相同,一个字错都不行
2、正则匹配:location ~ / {...}
^~:表示普通字符的前缀匹配,如果匹配乐成,不再匹配其他的location
~:区分巨细写的字符匹配
~*:不区分巨细写的字符匹配
!~:区分巨细写,匹配的取非
!~*:不区分巨细写,匹配的取非
3、一般匹配:location /
ocation匹配的优先级
我们可以准备三种图片都叫1.jpg,分别存放在三个不同目录下,使用三种location匹配规则,如果我们访问192.168.254.15/1.jpg会先匹配哪张图片?
精确匹配>正则匹配>一般匹配
location = 大于 location ^~ 大于 location ~ ~* 大于 location /test1 大于 location /
网站匹配location的规则
1、location = / { }
直接匹配网站的根目录,也就是网站的首页。首页一般都是一个静态的页面,直接匹配可以提高访问速度
2、处理静态文件的哀求,通过前缀或者后缀举行匹配的规则
location ^~ /static { }
location ~* \
.
{jsp | gif | png | html | php}$ { }
3、通用匹配:一般用来转发包罗.php或者.jsp为结尾的动态哀求
location /
proxy_pass http://
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复
使用道具
举报
0 个回复
倒序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
回帖后跳转到最后一页
发新帖
回复
羊蹓狼
论坛元老
这个人很懒什么都没写!
楼主热帖
一文带你走进【内存泄漏】
让你成为网络世界中有破坏力的人-HTTP ...
保举开源项目:LuCI App AdGuardHome - ...
dolphinscheduler单机化改造
day01-Tomcat框架分析
3. 视图-触发器-存储过程-索引 ...
基于 Sealos 的镜像构建能力,快速部署 ...
使用jsch进行sftp传输时遇到的问题com. ...
邮件管理数据库设计--MySQL
深入理解并发编程同步工具类 ...
标签云
AI
运维
CIO
存储
服务器
浏览过的版块
备份
公有云
Oracle
移动端开发
SQL-Server
快速回复
返回顶部
返回列表