【Nginx】Nginx的优化和防盗链

nginx版本迭代比较快

*工作中,在发版期,通常先备份文件并备注时间,方便后期故障后回档

例:
cp nginx.conf nginx.conf.bak.2023.0805

隐藏版本号的两种方法***

1.修改配置文件

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

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

server_tokens off
2.在源码包里改
/opt/nginx-1.22.0/src/core/nginx.h

define NGINX_VERSION "1.1.1"		#修改版本号
define NGINX_VER	"burim/" NGINX_VERSION
配置好之后,需要重新编译安装

nginx的日志分割:

nginx不自带日志分割工具,需要手动以脚本的形式来进行分割

#!/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

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

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

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

nginx的页面压缩

作用:节约带宽,提升用户的访问速度

gzip on;

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

gzip_min_length 1K;
#如果这个文件小于1k,就不再进行压缩
gzip_buffers 4 64k;
#压缩的缓冲区,大小为64k,有4个,nginx会使用4个64k大小的缓冲区,存储压缩后的数据
gzip_http_version 1.1;
#压缩的版本号,可以不写;默认为1.1
gzip_comp_level 6;
#压缩比率 1-9 数字
gzip_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;
#压缩的类型,开启对这些类型的文档的压缩功能

压缩功能是默认自带的可以不取消注释的

但是需要添加压缩细节,需要把gzip打开后,进行配置

图片缓存

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

连接超时

http1.1会有一个keepalive模式,告诉web服务器在处理完一个请求之后保持当前连接的tcp的状态为打开状态,如果当前连接有新的请求,服务端就会利用这个没有关闭的连接,继续给客户端响应,不需要再建立一个新的连接

keepalive在一段时间内,保持打开状态,在这段时间内还是会占用资源,占用过多还是会影响性能的

配置文件中

keepalive_timeout 65; tcp连接最多可以保持65秒

如果设置为0,表示禁用了keepalive的功能;只要请求完成,立刻关闭tcp连接

长连接;

client_header_timeout 80 请求头的超时时间

客户端向服务端发送请求,会有一个requst_header的超时时间;如果客户端没有在60秒内发送一个完整的请求头,nginx会返回408 request timeout(请求超时)

client_body_timeout 60 请求体的超时时间

客户端没有向服务器在60秒发送一个完整请求体,nginx 408 request timeout

ping 超时 表示服务端没有响应/ ip无法上网

nginx的并发设置

在高并发的场景中,需要启动更多的nginx进程以保证响应速度;可以更快的处理用户的请求,避免阻塞

1.根据cpu的核心数来进行设置

cat /proc/cpuinfo | grep processor | wc -l    #查看cpu的核心数

2.

worker_cpu_affinity 
#设置worker进程绑定到指定的cpu的命令,可以减少cpu切换带来的开销,确保worker进程在一个独立的cpu核心上运行

生产中worker一般设置为4,如果访问量不大,1也足够了

如果要扩展:最多到8个

8个以上的worker进程就不会再提高性能了,反而会降低性能

worker_cpu_affinity        #绑定worker进程到cpu;单个worker进程可以不绑定cpu

TIME_WAIT

不是报错信息,是tcp连接状态中的一种状态;会出现在tcp连接的四次挥手过程中

四次挥手过程中,当连接的一方发送FIN报文,而且收到了对方的ack报文后,就会进入TIME_WAIT

tcp处理等待的状态,是一个持续时间,65秒,确保网络中的所有数据包都被完全处理完毕

有两个作用:

1.确保可靠的关闭连接,如果立刻关闭连接,旧的数据包也会被处理,从而干扰新的连接

2.避免连接复用,time_wait的时间太短可能会导致旧的连接仍然在网络中,误认为是新连接,导致连接复用

而且在连接的生命周期中,time_wait占用的资源是非常小的,而且对服务器整体性能的影响也很有限

大量的短连接,频繁创建和销毁,或者大并发连接时(在负载均衡的条件下),time_wait连接会积累,服务器会出现大量time_wait状态的连接,这种情况下需要优化处理

nignx本身不能进行优化,要靠内核来进行优化

查看系统的所有tcp连接的状态***
netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
closed    表示连接未活动或者关闭
listen    监听,等待连接
SYN_recv        syn接收,表示服务端收到了客户端的syn连接请求,正在等待连接
SYN_sent        syn发送,客户端已经向服务器发送了syn请求,等待服务器确认
ESTABLISHED    表示已将建立了tcp连接,正在传送数据
FIN_wait_1    表示一端已将发送了连接关闭的请求,等待另一端确认
FIN_wait_2    表示另一端已经确认了,等待发出端确认关闭请求
close_wait   表示一端已经关闭连接,但是应用程序还未关闭连接
closing	     表示正在关闭连接
time_wait    连接等待
last_ack     表示应用程序已经发送了最后确认,等待另一端进入closed状态

提问:如果有大量timeout积累怎么办

答:修改内核

vim /etc/sysctl.conf

net.ipv4.tcp_syncookies = 1
    #表示开启syn的cookies(缓存),当出现SYN队列溢出,启用cookie处理请求
net.ipv4.tcp_tw_reuse = 1 
    #让TIME_WAIT状态的连接可以复用,即使time_wait把本地端口全部占满,也不会拒绝新的请求
net.ipv4.tcp_tw_recycle = 1
    #让TIME_WAIT尽快回收
net.ipv4.tcp_fin_timeout = 60
    #表示如果端口有本端要求关闭,FIN_WAIT_2状态的保持时间

防盗链

vim /usr/local/nginx/conf/nginx.conf
http {
...........
server{
...........
location ~* \.(jpg|gif|swf)$ {

...
}
}
}


~* \.(jpg|gif|swf)$     这段正则表达式表示匹配不区分大小写,以.jpg 或.gif 或.swf 结尾的文件;
valid_referers    设置信任的网站;*.kgc.com kgc.com都可以访问图片
none              允许没有http_refer的请求访问资源
www.kgc.com/ls.jpg
www.kgc.com        也可以访问显示图片;www.kgc.com	可以直接访问www.kgc.com/ls.jpg

blocked        允许不是http://开头的请求,可以不带协议的请求访问资源
*.kgc.com      只允许域名是kgc的才可以登录

只要不是信任的,就重写

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

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

相关文章

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

step by step. 题目: 给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。 请你将两个数相加,并以相同形式返回一个表示和的链表。 你可以假设除了数字 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模板

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

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

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

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

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

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

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

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

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

zookeeper安装教程及其基本使用

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

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

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

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

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

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

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&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;称为 相关子…

【c语言】 -- 指针进阶

&#x1f4d5;博主介绍&#xff1a;目前大一正在学习c语言&#xff0c;数据结构&#xff0c;计算机网络。 c语言学习&#xff0c;是为了更好的学习其他的编程语言&#xff0c;C语言是母体语言&#xff0c;是人机交互接近底层的桥梁。 本章来学习指针进阶。 让我们开启c语言学习…