【Nginx】Nginx的优化和防盗链

news2025/2/12 3:42:19

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.coloradmin.cn/o/864342.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

分享花店行业小程序平台搭建教程

随着移动互联网的快速发展,花店也开始意识到拥有一个专属的小程序能够提升用户体验、增加销售额。那么,如何快速搭建一个漂亮、实用的花店小程序呢?下面就为大家介绍一下具体的步骤。 第一步,使用第三方制作平台。如乔拓云网是一个…

Linux下C语言调用libcurl库获取天气预报信息

一、概述 当前文章介绍如何在Linux(Ubuntu)下使用C语言调用libcurl库获取天气预报的方法。通过HTTP GET请求访问百度天气API,并解析返回的JSON数据,可以获取指定城市未来7天的天气预报信息。 二、设计思路 【1】使用libcurl库进…

24届近5年南京大学自动化考研院校分析

今天给大家带来的是南京大学控制考研分析 满满干货~还不快快点赞收藏 一、南京大学 学校简介 南京大学是一所历史悠久、声誉卓著的高等学府。其前身是创建于1902年的三江师范学堂,此后历经两江师范学堂、南京高等师范学校、国立东南大学、国立第四中…

数字孪生和元宇宙之间的差别与联系是什么?

元宇宙和数字孪生是两个引人瞩目的概念,它们在虚拟与现实世界的交汇点上呈现出独特的视角和应用。虽然二者都涉及数字化和模拟技术,但在其差异与联系上,我们可以发现深刻的内涵和潜力。 首先,元宇宙是一个更为宽泛的概念&#xf…

嵌入式是大坑吗?

嵌入式不是坑,但里面遍地是坑。一不小心,你就会掉进去。 嵌入式覆盖的范围太广,低端的产品太多。 单片机叫嵌入式,开发板叫嵌入式,摄像头叫嵌入式,手机、平板电脑、通讯基站、无人机、机器人、自动驾驶汽…

C++之红黑树剖析

博主:拖拉机厂第一代码手 gitee:拖拉机厂第一代码手 已收录到专栏C,点击访问 目录 💴红黑树简介💵红黑树的插入操作💶红黑树的删除操作💷红黑树的实现💸红黑树节点的定义💸红黑树结构…

autoware 之 op_behavior_selector行为选择器状态机代码分析

autoware 1 op_behavior_selector行为选择器状态机代码分析 /这里是整个状态机运行时的结构:/ //停止状态:[#停止状态]//任务完成状态:[#任务完成状态]//转向状态:[*前进状态,#转向状态]//停止信号停止状态:[*停止信号等待状态,#停止信号停止状态]//前进状态 :[*目…

C语言学习系列-->看淡指针(1)

文章目录 一、概述二、指针变量和地址2.1 取地址操作符2.2 指针变量和解引用操作符2.2.1 指针变量2.2.2 拆解指针类型2.2.4 解引用操作符 2.3 指针变量的大小 三、指针变量的意义3.1 指针的解引用指针-整数 四、 const修饰指针五、指针运算5.1 指针- 整数5.2 指针-指针5.3 指针…

OpenText 企业安全 调查 产品简介

关于OpenText OpenText是一家信息软件公司,使企业能够通过市场领先的信息管理解决方案(内部或云中)获得洞察力。 全球面临的数字风险 市场合力驱动的信息管理 处于风暴中心的信息 →安全漏洞和数据保护 • 防止威胁并将破坏影响降至最低 …

通过PostMan监视提交文件,验证web文件传输

切换文件流,传输文件 找到图片地址 发送请求然后接受 再来一张 哈,谢谢各位同志的阅读,然后呢如果觉得本文对您有所帮助的话,还给个免费的赞捏 Thanks♪(・ω・)ノ

【二】数据库系统

数据库系统的分层抽象DBMS 数据的三个层次从 数据 到 数据的结构----模式数据库系统的三级模式(三级视图)数据库系统的两层映像数据库系统的两个独立性数据库系统的标准结构 数据模型从 模式 到 模式的结构----数据模型三大经典数据模型 数据库的演变与发…

给大家推荐9个Linux高效运维命令技巧!

文章目录 前言一、实用的 xargs 命令二、命令或脚本后台运行三、找出当前系统内存使用量较高的进程四、找出当前系统CPU使用量较高的进程五、同时查看多个日志或数据文件六、持续ping并将结果记录到日志七、查看tcp连接状态八、查找80端口请求数最高的前20个IP九、ssh实现端口转…

构建高性能的MongoDB数据迁移工具:Java的开发实践

随着大数据时代的到来,数据迁移成为许多企业和组织必须面对的挑战之一。作为一种非关系型数据库,MongoDB在应用开发中得到了广泛的应用。为了满足数据迁移的需求,我们需要一个高性能、稳定可靠的MongoDB数据迁移工具。下面将分享使用Java开发…

【华秋推荐】新能源汽车中的T-BOX系统,你了解多少?

近几年,新能源汽车产业进入了加速发展的阶段。我国的新能源汽车产业,经过多年的持续努力,技术水平显著提升、产业体系日趋完善、企业竞争力大幅增强,呈现市场规模、发展质量“双提升”的良好局面。同时,通过国家多年来…

【碎碎念】在CSDN 512天创作纪念日

‍‍🏡博客主页: virobotics的CSDN博客:LabVIEW深度学习、人工智能博主 🎄所属专栏:『碎碎念』 🍻上篇纪念文: 我的创作纪念日 文章目录 📩📩📩前言&#x1f…

thinkphp中分页paginate和group by一起使用时 代码异常的解决办法

1. paginate和group by报错,代码如下,月份分组 $page intval($where[page]);$limit intval($where[limit]);$start_time $where[start_time];$end_time $where[end_time];$query Db::table(eb_bonuslistlog)->field(DATE_FORMAT(create_time,&qu…

Cookie的详解

Cookie Cookie为什么要用Cookie?Cookie是什么?Cookie怎么用?Cookie常用属性修改与删除:在浏览器查看cookie前端页面读取CookieJava后端读写cookie最典型的cookie--JESSIONID是什么?什么时候种下JSESSIONID?…

2023年京东按摩仪行业数据分析(京东销售数据分析)

近年来,小家电行业凭借功能与颜值,取代黑电和白电,成为家电市场的主要增长点。在这一市场背景下,颜值更高、功能更丰富、品种更齐全的各类按摩仪,借助新消费和电子商务的风潮,陆续被推上市场。今年&#xf…

通达信波段选股公式,使用钱德动量摆动指标(CMO)

钱德动量摆动指标(CMO)是由图莎尔钱德发明的,取值范围在-100到100之间,是捕捉价格动量的技术指标。该指标计算近期涨幅之和与近期跌幅之和的差值,然后将计算结果除以同期所有价格波动的总和。本文的波段选股公式使用均线识别趋势,…

微信小程序上传图片和文件

1.从微信里选择图片或文件上传 使用的vant的上传组件 原生用 wx.chooseMessageFile() html <!-- 从微信上面选择文件 --><van-uploader file-list"{{ file }}" bind:after-read"afterRead" max-count"{{3}}" deletable"{{ true…