Nginx的优化和防盗链(面试高频!!!)

Nginx的优化和防盗链

全篇高能!!!!干货较多!!!!本篇含面试高频题:

修改配置文件时,先备份!!!以便回滚!!!
nginx页面优化
一、隐藏版本号:
方法一:修改配置文件

 vim /usr/local/nginx/conf/nginx.conf

在http模块中,添加一个命令:

server_tokens off;

方法二:在源码包中修改(达到混淆入侵者的目的)

vim /opt/nginx-1.22.0/src/core/nginx.h
#define NGINX_VERSION "1.1.1" #修改版本号
 #define NGINX_VER "burun/"
  NGINX_VERSION

二、nginx的日志分割:
因为nginx不带日志分割工具,所以需要使用脚本形式来进行日志分割。
脚本文件

vim nginxlog.sh
#!/bin/bash
#获取日期
d=$(date +%Y-%m-%d)
#定义存储目录
dir="/usr/local/nginx/logs"

#分割日志
logs_file="/usr/local/nginx/logs/access.log"
logs_error='/usr/local/nginx/logs/error.log'

#定义nginx的pid文件
pid_file='/usr/local/nginx/run/nginx.pid'

if [ ! -d "$dir" ]
then
   mkdir -p $dir
fi

#移动日志并且重命名

mv $logs_file ${dir}/access_${d}.log
# mv /usr/local/nginx/logs/access.log /usr/local/nginx/logs/access_2023-08-05.log
mv $logs_error ${dir}/error_${d}.log

#用kill发送信号给nginx主程序,生成一个新的日志文件

kill -USR1 $(cat ${pid_file})
#cat /usr/local/nginx/run/nginx.pid

#日志文件清理的命令,清理过期文件
find ${dir} -mtime +30 -exec rm -rf {} \;

三、nginx的页面压缩:
主要作用:节约带宽,提升用户的访问速度
注意:nginx压缩的功能是默认自带的,但是如果需要压缩细节,需要打开gzip的注释,然后进行配置。
修改配置文件:

vim /usr/local/nginx/conf/nginx.conf

在这里插入图片描述

gzip on;                       #取消注释,开启gzip的压缩功能
    gzip_min_length 1k;        #最小压缩文件的大小      
    gzip_buffers 4 64k;        #压缩缓冲区,大小为4个64K缓冲区,Nginx 会使用 4 个 64KB 大小的缓冲区来存储压缩后的数据。
    gzip_http_version 1.1;     #压缩版本,默认为1.1
    gzip_comp_level 6;         #压缩比率(压缩等级为1-96是中等等级,也是常用等级)Gzip 压缩级别的范围是 19,
	其中 1 表示压缩速度最快,但压缩比最低,9 表示压缩速度最慢,但压缩比最高。默认值为 1gzip_vary on;              #支持前端缓存服务器支持压缩页面
补充:需要那个功能选那个压缩类型!
gzip_types text/plain text/javascript application/x-javascript text/css text/xml application/xml application/xml+rss image/jpg image/jpeg image/png image/gif application/x-httpd-php application/javascript application/json;
 #压缩的类型,哪些文档启用压缩功能

四、nginx的图片缓存:
修改配置文件:

vim /usr/local/nginx/conf/nginx.conf

注意:不能加png格式,否则会陷入死循环!!
在这里插入图片描述

http {
.................
 location ~* \.(gif|jpg|jepg|bmp|ico)$ {
             root html;
             expires 1d;    #设置缓存时间为一天;         
         }
}

连接超时:
http1.1会有一个keepalive模式,告诉web服务器在处理完一个请求之后保持当前连接的tcp的状态,如果当前连接有新的请求,服务端就会利用这个没有关闭的连接,继续给客户端响应,不需要再建立一个新的连接。
keepalive 在一段时间只内保持打开状态,在这段时间之内还是会占用资源,占用过多会影响性能。
keepalive_timeout 65;#tcp连接最多可以保持65秒。
绝大多数企业一般会设置到60 -65
设置为0,就是禁用了keepalive功能。只要请求完成立刻关闭tcp连接。
长连接:
client_header_timeout 60;
客户端向服务端发送请求,会有一个request_header的超时时间。
如果客户端没有在60秒内发送一个完整的请求头(equest_header),nginx会返回一个408 (request timeout :请求超时)
client_body_timeout 60;
客户端没有向服务器在60s发送一个完整的请求体。nginx会返回一个408 (request timeout :请求超时)

vim /usr/local/nginx/conf/nginx.conf
http {
...... 
    keepalive_timeout 65 ;  #指定TCP链接最多可以保持65秒
    client_header_timeout 60;  #请求头
    client_body_timeout 60;    #请求体
...... 
}

五、nginx的并发设置:

在高并发的场景中,需要启动更多的nginx进程以保证响应速度,可以更快的处理用户的请求,避免造成阻塞。
1.根据cpu核心数来进行设置
查看cpu核心数:

cat /proc/cpuinfo | grep processor | wc -l
修改配置文件:
```csharp
vim /usr/local/nginx/conf/nginx.conf

设置工作进程数:
在这里插入图片描述

worker_processes  2;				#修改为核数相同或者2倍
worker_cpu_affinity 01 10;	

注意:在生产中worker一般设置为4,访问量不大1足够了,如果要扩展,最多8个!!,8个以上的work进程就不会提高性能了,反而会降低性能。
将work进程绑定cpu
work _cpu affinty  01 10#设置work进程绑定到指定的cpu命令,可以减少cpu切换带来的开销,确保work进程在一个独立的cpu和核心上运行
0110 是二进制数 cpu1 和cpu2 的意思
#注意:单个work进程可以不绑定cpu

如果并大量大将连接数改为10240就够用了(目前在企业中:最好的办法还是更改worker_connections 最大连接数)
在这里插入图片描述
并发量计算:worker_process 数 乘以 worker_connections 数
要想达到并发量值,还需要更改最大连接文件数:

1.临时:ulimit -n 65535 (linux最大只支持打开65535)
2.永久修改:vim /etc/security/limits.conf
65535 为Linux系统最大打开文件数

soft nproc 65535
hard nproc 65535
soft nofile 65535
hard nofile 65535
注意:设置保存后,需要重新ssh连接才会看到配置更改的变化。

TIME_WAIT:不是一个报错信息,是tcp连接状态中是一种状态,出现在tcp连接的四次挥手中。
当连接的一方发送fin报文,而且收到了对方的ack报文之后,就会进入time_wait
tcp处理等待的状态,是有一个持续时间,65秒,确保网络中的所有数据包都被完全处理完毕。
有两个作用:
1,确保可靠的关闭连接,如果立刻关闭连接,旧的数据包也会被处理,从而会干扰新的连接。
2.避免连接复用,time_wait时间太短,可能会导致旧的连接仍然在网络中,误认为是新连接,就会导致连接复用。
而且在连接的生命周期中,time_wait占用的资源是非常小的,而且对服务器整体性能的影响也是有限的。大量的短连接频繁创建和销毁,或者大并发连接时(负载均衡),time_wait连接会积累,服务器会出现大量的time_wait连接状态,在这种情况下需要进行优化处理。
在linux内核设置,进行优化。
查看系统的所有tcp连接状态:

netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'

tcp连接在系统中的状态:

closed:表示连接未活动或者关闭
listen:监听,等待连接
syn_recv:syn接收,服务端收到了来自客户端的syn(连接请求),正在等待确认。
syn_sent:syn发送,客户端已经向服务端发送syn请求,等待服务器确认。
ESTABLISHED:已经建立了tcp连接,正在传输数据。
fin_wait1:表示一端已经发送了连接关闭的请求,等待另一端确认。
fin_wait2:表示另一端已经确认了,等到发出端,确认关闭请求。
close_wait:表示一端已经关闭连接,但是应用程序还未关闭连接。
closing:正在关闭
time_wait:连接等待。
last_ack:表示应用程序已经发送了最后的确认,等待另一端进入closed状态。

修改内核文件:

vim /etc/sysctl.conf 
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1 
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_fin_timeout = 60
#net.ipv4.tcp_fin_timeout =30-65之间 一般45即可
sysctl -p 立即生效

六、配置防盗链

修改配置文件:

vim /usr/local/nginx/conf/nginx.conf

valid_referers:设置信任的网站,
none:允许没有http_refer的请求访问资源
在这里插入图片描述

http {
...........
server{
...........
location ~* \.(jpg|gif|swf)$ {            
         root  html;
         expires 1d;
         valid_referers none blocked *.kgc.com kgc.com;   
         if ( $invalid_referer ) {
           rewrite ^/ http://www.kgc.com/error.png;
           }
        }
............
}
...............
}

解释:

~* \.(jpg|gif|swf)$ :这段正则表达式表示匹配不区分大小写,以.jpg 或.gif 或.swf 结尾的文件;
valid_referers :设置信任的网站,可以正常使用图片;

none:允许没有http_refer的请求访问资源(根据Referer的定义,它的作用是指示一个请求是从哪里链接过来的,
如果直接在浏览器的地址栏中输入一个资源的URL地址,那么这种请求是不会包含 Referer 字段的),如 http://www.kgc.com/game.jpg
我们使用 http://www.kgc.com 访问显示的图片,可以理解成 http://www.kgc.com/game.jpg 这个请求是从 http://www.kgc.com 
这个链接过来的。

blocked:允许不是http://开头的,不带协议的请求访问资源; 
*.kgc.com:只允许来自指定域名的请求访问资源,如 http://www.kgc.com

if语句:如果链接的来源域名不在valid_referers所列出的列表中,$invalid_referer为true,则执行后面的操作,
即进行重写或返回 403 页面。

网页准备:

Web源主机(192.168.233.21)配置:
cd /usr/local/nginx/html
将game.jpg、error.png文件传到/usr/local/nginx/html目录下
vim index.html
...... 
<img src="game.jpg"/>
</body>
</html>

echo "192.168.233.21 www.kgc.com" >> /etc/hosts 
echo "192.168.233.22 www.benet.com" >> /etc/hosts 

盗链网站主机(192.168.233.22):
cd /usr/local/nginx/html
vim index.html
...... 
<img src="http://www.kgc.com/game.jpg"/>
</body>
</html>

echo "192.168.233.21 www.kgc.com" >> /etc/hosts 
echo "192.168.233.22 www.benet.com" >> /etc/hosts

在盗图网站主机上进行浏览器验证

http://www.benet.com

七、fpm参数优化
Nginx的PHP解析功能实现如果是交由FPM处理的,为了提高PHP的处理速度,可对FPM模块进行参数的调整。
根据服务器的内存与服务负载,调整FPM模块参数。

vim /usr/local/php/etc/php-fpm.conf 
pid = run/php-fpm.pid
 ​
vim /usr/local/php/etc/php-fpm.d/www.conf
 --96--
pm = dynamic                #fpm进程启动方式,动态的
 --107--
pm.max_children=20          #fpm进程启动的最大进程数
 --112--
pm.start_servers = 5        #动态方式下启动时默认开启的进程数,在最小和最大之间
 --117--
pm.min_spare_servers = 2    #动态方式下最小空闲进程数
 --122--
pm.max_spare_servers = 8    #动态方式下最大空闲进程数
 ​
 ​
kill -USR2 `cat /usr/local/php/var/run/php-fpm.pid`         #重启php-fpm

netstat -anpt | grep 9000

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/69535.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Nginx】Nginx的优化和防盗链

nginx版本迭代比较快 *工作中&#xff0c;在发版期&#xff0c;通常先备份文件并备注时间&#xff0c;方便后期故障后回档 例&#xff1a; cp nginx.conf nginx.conf.bak.2023.0805 隐藏版本号的两种方法*** 1.修改配置文件 vim /usr/local/nginx/conf/nginx.conf 在http模…

【Leetcode】链表中两数之和(模拟加法器)(击败100%)

step by step. 题目&#xff1a; 给你两个 非空 的链表&#xff0c;表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的&#xff0c;并且每个节点只能存储 一位 数字。 请你将两个数相加&#xff0c;并以相同形式返回一个表示和的链表。 你可以假设除了数字 0 之外&…

Java【算法 04】HTTP的认证方式之DIGEST认证详细流程说明及举例

HTTP的认证方式之DIGEST 1.是什么2.认值流程2.1 客户端发送请求2.2 服务器返回质询信息2.2.1 质询参数2.2.2 质询举例 2.3 客户端生成响应2.4 服务器验证响应2.5 服务器返回响应 3.算法3.1 SHA-2563.1.1 Response3.1.2 A13.1.3 A2 3.2 MD53.2.1 Request-Digest3.2.2 A13.2.3 A2…

百度智能云:千帆大模型平台接入Llama 2等33个大模型,上线103个Prompt模板

大家好&#xff0c;我是herosunly。985院校硕士毕业&#xff0c;现担任算法研究员一职&#xff0c;热衷于机器学习算法研究与应用。曾获得阿里云天池比赛第一名&#xff0c;CCF比赛第二名&#xff0c;科大讯飞比赛第三名。拥有多项发明专利。对机器学习和深度学习拥有自己独到的…

[免费在线] 将 PDF 转换为 Excel 或 Excel 转换为 PDF | 5 工具

有了免费的在线 PDF 转换器&#xff0c;您可以轻松免费在线将 PDF 转换为 Excel 或 Excel 转换为 PDF。这篇文章为您筛选了 5 个最常用的工具。要从存储介质恢复错误删除或丢失的 PDF 文档、Excel 电子表格、Word 文件或任何其他文件&#xff0c;您可以使用免费的数据恢复程序 …

人大金仓三大兼容:Oracle迁移无忧

企业级应用早期的架构模式是C/S&#xff08;Client/Server&#xff09;模式&#xff0c;Client做人机交互逻辑的呈现&#xff0c;Sever做业务计算逻辑的实现。这就类似餐馆的运作模式&#xff0c;Client是前台的服务员提供点菜和上菜服务&#xff0c;而Server则是后厨完成菜品的…

辽宁线上3D三维虚拟工厂生产仿真系统应用场景及优势

工厂虚拟仿真是一种基于计算机技术和虚拟现实技术的数字化解决方案&#xff0c;它可以通过模拟工厂中的设备、流程和操作&#xff0c;来为工程师和操作人员提供了一个沉浸式的虚拟环境&#xff0c;帮助他们更好地了解和优化工厂生产过程。 工厂VR三维可视化技术为工业生产提供了…

拂袖一挥,zipfile秒列zip包内容

使用wxpython列出文件夹中的zip文件及内容 最近在做一个文件管理的小工具,需要列出选择的文件夹下的所有zip压缩文件,并在点击某个zip文件时能够显示其中的内容。为此我使用了wxpython来实现这个功能。 1. 导入需要的模块 首先导入程序需要的模块: import wx import os imp…

zookeeper安装教程及其基本使用

目录 zookeeper下载&#xff1a; zookeeper下载官网&#xff1a; 本地安装配置&#xff1a; 启动zookeeper&#xff1a; 开启服务端&#xff1a; 启动客户端&#xff1a; 查看zookeeper的状态&#xff1a; zoo.cfg文件解读&#xff1a; zookeeper的集群安装&#xff1a…

认识 spring 中的事务 与 事务的传播机制

前言 本篇介绍spring中事务的实现方式&#xff0c;如何实现声明式事务&#xff0c;对事物进行参数的设置&#xff0c;了解事务的隔离级别和事务的传播机制&#xff1b;如有错误&#xff0c;请在评论区指正&#xff0c;让我们一起交流&#xff0c;共同进步&#xff01; 文章目录…

史上最强,Jenkins插件实现多个Job并行后再触发Job详细,一篇贯通...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 在利用Jenkins来自…

【使用Hilbert变换在噪声信号中进行自动活动检测】基于Hilbert变换和平滑技术进行自动信号分割和活动检测研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

echart图案例

效果 代码&#xff1a; index.vue <template><div class"pageBox"><div class"oneLineBox"><div class"fourColorImgBox"><div class"titleBox">企业风险四色图</div><div class"conte…

自建机房还是选择云服务器?以腾讯云为例

大企业是选择自购服务器自建机房还是使用腾讯云服务器&#xff1f;都说企业上云是趋势&#xff0c;自建机房是一次性支出&#xff0c;上云租赁云服务器等产品需要年年续费&#xff0c;大型企业有必要把数据中心迁移上云吗&#xff1f;腾讯云服务器网想说&#xff0c;自建机房购…

Postman 汉化及下载

Postman 是一款常用的 API 测试工具&#xff0c;可以方便地进行接口测试、调试和文档编写。本文将详细介绍如何下载安装 Postman 并汉化&#xff0c;包括每个步骤的详细说明。 下载安装 Postman 1、打开浏览器&#xff0c;访问 Postman 官网&#xff0c;下载适用于自己系统的…

强化学习-信任区域策略优化和近端策略优化(第7章)

来源书籍&#xff1a; TENSORFLOW REINFORCEMENT LEARNING QUICK START GUIDE 《TensorFlow强化学习快速入门指南-使用Python动手搭建自学习的智能体》 著者&#xff1a;[美]考希克巴拉克里希南&#xff08;Kaushik Balakrishnan&#xff09; 译者&#xff1a;赵卫东 出版…

Kendo UI for jQuery,一个现代的jQuery UI组件!

Kendo UI for jQuery是什么&#xff1f; Kendo UI for jQuery是完整的jQuery UI组件库&#xff0c;可快速构建出色的高性能响应式Web应用程序。Kendo UI for jQuery提供在短时间内构建现代Web应用程序所需要的工具&#xff0c;从多个UI组件中选择&#xff0c;并轻松地将它们组…

图像多目标跟踪

目标跟踪&#xff08;Object Tracking&#xff09;是自动驾驶中常见的任务&#xff0c;根据跟踪目标数量的不同&#xff0c;目标跟踪可分为&#xff1a; 单目标跟踪&#xff08;Single Object Tracking&#xff0c;SOT&#xff09;多目标跟踪&#xff08;Multi-Objects Tracki…

餐馆包厢隔断装修该怎么去设计

餐馆包厢隔断装修设计需要综合考虑以下几个方面&#xff1a; 1. 功能布局&#xff1a;根据包厢的面积和形状来确定餐桌、椅子、电视等家具的摆放方式&#xff0c;保证客人的用餐舒适度和便利性。 2. 音响设备&#xff1a;安装合适的音响设备&#xff0c;提供一定的音乐背景&…

SQL 相关子查询 和 不相关子查询、Exists 、Not Exists、 多表连接(包含自连接)

不相关子查询 子查询的查询条件不依赖于父查询&#xff0c;称不相关子查询。子查询可以单独运行的 select stu_id,sex,age from student t where sex(select sexfrom studentwhere stu_id10023 )相关子查询 关联子查询 子查询的查询条件依赖于父查询&#xff0c;称为 相关子…
最新文章