ToB企服应用市场:ToB评测及商务社交产业平台

标题: 四、nginx的优化和location匹配规则 [打印本页]

作者: 羊蹓狼    时间: 2025-1-1 07:35
标题: 四、nginx的优化和location匹配规则
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:修改内核的配置为文件,加入以下内容


最后配置完之后,别忘了 sysctl  -p 革新配置。
通俗的说:timewait的回收机制就是,进来排队,端口没有了也没关系等着,连接上了尽量保持联系,确认关闭连接后再回收端口。

配置防盗链

防止别的用户通过链接的方式盗用网站的图片
我们使用两台主机,zw5作为原网站,而zw4作为盗链网站。
1、我们配置zw5的nginx主配置文件,添加一个location,如下


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 ~ / {...}

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企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4