nginx的优化与防盗链

目录

隐藏版本号

方法一

方法二

nginx日志分割

nginx页面压缩

链接超时

TIME_WAIT

内核设置进行优化 

防盗链

配置防盗链

fpm参数优化


隐藏版本号

方法一

修改配置文件
cd /usr/local/nginx/conf/
cp nginx.conf nginx.conf.bak.2023.0805
vim nginx.conf

在http模块中加入
server_tokens off

方法二

在源码包里改
/src/core/nginx.h
/opt/nginx-1.22.0/src/core/nginx.h
#define NGINX_VERSION "1.1.1" #修改版本号 #define NGINX_VER "burun/" NGINX_VERSION

nginx日志分割

nginx不自带日志分割工具,需要手动以脚本的方式分割
#!/bin/bash
#获取日期
d=$(date +%Y-%m-%d)
#定义存储目录
dir="/usr/local/nginx/logs"
#分割日志
logs_access="usr/local/nginx/logs/access.logs"
logs_error="usr/local/nginx/logs/error.logs"
#定义nginx的pid文件
pid_file='usr/local/nginx/run/nginx.pid'

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

#移动日志并且重命名
mv $logs_access ${dir}/access_${d}.log
mv $logs_error ${dir}/error_${d}.log

#发送信号给nginx主程序,生成新的日志文件
kill -USR1 $(cat ${pid_file})

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

nginx页面压缩

可以节约带宽,提升用户的访问速度
    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-9,6是中等等级,也是常用等级)Gzip 压缩级别的范围是 1 到 9,
    其中 1 表示压缩速度最快,但压缩比最低,9 表示压缩速度最慢,但压缩比最高。默认值为 1。
    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 打开时后,进行配置

链接超时

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

nginx并发设置
在高并发场景中,需要启动更多的nginx进程以保证响应速度,可以更快的处理用户的请求避免阻塞
1.根据CPU的核心数来进行设置
查看CPU的核心数
cat /proc/cpuinfo | grep processor | wc -l
nginx配置文件
worker_processes
#工作进程也就是worker进程的数量,一般配置成CPU数一致或者2倍
worker_connections
#每个进程可以处理的最大连接数

2.worker_cpu_affinity
置worker进程绑定到指定CPU的命令,可以减少CPU切换带来的开销,确保worker进程在一个独立的CPU核心上运行
worker_cpu_affinity 01 10
后面CPU的数为二进制数

在生产中worker一般为4,如果要扩展最多到8个。8个以上的worker进程反而会降低性能

TIME_WAIT

TIME_WAIT不是一个报错信息,是tcp连接中的一种状态,出现在tcp连接的四次挥手中

当连接的乙方发送fin报文,而且收到了对方的ack报文之后,就会进入time_wait
tcp处理等待的状态,有一个持续时间65秒,确保网络中的所有数据包都被完全处理完毕。
两个作用
1.确保可靠的关闭连接。如果立刻关闭连接,就得数据包也会被处理,从而会干扰新的连接
2.避免链接复用,time_wait时间太短,可能会导致就得连接仍然在网络中,会被误认为新链接而导致连接复用

在连接的生命周期中,time_wait占用的资源是非常小的,而且对服务器整体性能的影响非常有限。大量的短链接频繁创建和销毁,或者大并发连接时(负载均衡),time_out连接会积累,服务器会出现大量的tome_wait状态的连接,在这种情况下需要优化处理

内核设置进行优化 

查看系统的所有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连接,正在传输shuju
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

sysctl -p 立即生效

防盗链

vaid_referers设置信任的网站
none 允许没有http refer的请求访问资源
blocked 允许不带协议请求访问资源

配置防盗链

vim //usr/local/nginx/conf/nginx.conf
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;}}
............
}
...............
}


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-fpmnetstat -anpt | grep 9000

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

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

相关文章

用于大型图像模型的 CNN 内核的最新内容

一、说明 由于OpenAI的ChatGPT的巨大成功引发了大语言模型的繁荣,许多人预见到大图像模型的下一个突破。在这个领域,可以提示视觉模型分析甚至生成图像和视频,其方式类似于我们目前提示 ChatGPT 的方式。 用于大型图像模型的最新深度学习方法…

基于自组织竞争网络的患者癌症发病预测(matlab代码)

1.案例背景 1.1自组织竞争网络概述 前面案例中讲述的都是在训练过程中采用有导师监督学习方式的神经网络模型。这种学习方式在训练过程中,需要预先给网络提供期望输出,根据期望输出来调整网络的权重,使得实际输出和期望输出尽可能地接近。但是在很多情况下,在人们认知的过程中…

机器学习之弹性网络(Elastic Net)

弹性网络 代码原文 下面代码参考scikit-learn中文社区,链接在上面。 但是由于scikit-learn中文社区上的代码有些地方跑不通,故对此代码做了修改,输出结果与社区中显示的结果相同。 对弹性网络进行简单的介绍: ElasticNet是一个训…

第八篇: K8S Prometheus Operator实现Ceph集群企业微信机器人告警

Prometheus Operator实现Ceph集群企业微信告警 实现方案 我们的k8s集群与ceph集群是部署在不同的服务器上,因此实现方案如下: (1) ceph集群开启mgr内置的exporter服务,用于获取ceph集群的metrics (2) k8s集群通过 Service Endponit Ser…

【VALSE2023】0610 胡瀚《视觉自监督学习年度进展评述》

from: https://www.bilibili.com/video/BV1J44y1w79r 文章目录 自监督学习年度进展技术进展趋势一:掩码图像建模的改进技术进展二:发现掩码图像建模对**大模型**比较友好技术进展三:针对**小模型**的掩码图像建模训练技术进展四&a…

Unity Shader编辑器工具类ShaderUtil 常用函数和用法

Unity Shader编辑器工具类ShaderUtil 常用函数和用法 Unity的Shader编辑器工具类ShaderUtil提供了一系列函数,用于编译、导入和管理着色器。本文将介绍ShaderUtil类中的常用函数和用法。 编译和导入函数 CompileShader 函数签名:public static bool C…

web前端转正工作总结范文5篇

web前端转正工作总结(篇1) 来到__有限公司已经三个月了,目前的工作是前端开发,我是一名应届毕业生,之前没有过工作经验,在刚来到__这个大家庭的时候,我就被这里的工作气氛深深地吸引&#xff0…

Elastic的下载

文章目录 ElasticSearch的下载扩展1(ElasticSearch 与 JDK 版本 适配)扩展2(访问 http://192.168.1.200:9200 没有显示信息)扩展3(免密登录) ElasticSearch的下载 官方下载网址:https://www.el…

电脑维护进阶:让你的“战友”更强大、更持久!

前言 无论是学习还是工作,电脑已经成为了IT人必不可少的得力助手。然而,电脑的性能和寿命需要经过细心的维护来保证。本文将详细探讨如何维护你的电脑,延长它的寿命,以及一些实用建议。 硬件保养篇 内部清洁 灰尘会导致电脑散热…

在 Ubuntu 上安装 Docker 桌面

Ubuntu 22.04 (LTS) 安装 Docker 桌面 要成功安装 Docker Desktop,您必须: 满足系统要求拥有 64 位版本的 Ubuntu Jammy Jellyfish 22.04 (LTS) 或 Ubuntu Impish Indri 21.10。对于非 Gnome 桌面环境,必须安装 gnome-terminal:…

数字孪生技术的实用价值体现在哪?

随着科技的不断进步,数字孪生技术已成为引领未来发展的重要驱动力。数字孪生是将现实世界与数字世界紧密结合的技术,通过创建虚拟的物理模型,实时模拟和分析真实世界中的物体和过程,让数字孪生在各个领域都展现出了巨大的潜力&…

nvm下载node导致npm报错无法使用

有个依赖库需要更新下node,用nvm下载后项目跑不起来了,npm -v 还报错 其实一开始是npm下载不来,然后换了淘宝镜像后还是报错 然后就只能手动下载下了 进入node.js官网 https://nodejs.org/en/download 下载后注意要安装在你nvm目录中&#x…

Day 22 C++ STL常用容器——string容器

string容器 概念本质string和char 区别:特点string构造函数构造函数原型 string赋值操作赋值的函数原型示例 string字符串拼接函数原型:示例 string查找和替换函数原型示例 string字符串比较比较方式 字符串比较是按字符的ASCII码进行对比函数原型示例 s…

Dockerfile构建LNMP镜像

建立工作目录 [rootlocalhost ~]# mkdir lnmp [rootlocalhost ~]# cd lnmp/ 编写Dockerfile文件 [rootlocalhost lnmp]# vim Dockerfile [rootlocalhost lnmp]# ll 总用量 4 -rw-r--r--. 1 root root 774 8月 3 14:54 Dockerfile [rootlocalhost lnmp]# vim Dockerfile #基础…

Linux常见问题-打deb包流程

Deb打包目的:将程序打包成.deb格式是为了在Debian和Ubuntu等基于Debian的Linux发行版上进行方便的安装和管理。以下是一个简要的流程,以一个输出 "Hello World" 的C程序为例。 1 准备工作 确保你的系统安装了构建工具,如g&#x…

【Spring Boot】(三)深入理解 Spring Boot 日志

文章目录 前言一、日志文件的作用二、Spring Boot 中的日志2.1 查看输出的日志信息2.2 日志格式二、Spring Boot 中的日志2.1 查看输出的日志信息2.2 日志格式 三、自定义日志输出3.1 日志框架3.2 日志对象的获取3.3 使用日志对象打印日志 四、日志级别4.1 日志级别的作用4.2 日…

人到中年不得已,保温杯里泡枸杞--送程序员

目录 一:你现在身体的体能状况如何?你有身体焦虑吗? 二:如何保持规律性运动? 三:你有哪些健康生活的好习惯? 大厂裁员,称35岁以后体能下滑,无法继续高效率地完成工作&…

Gof23设计模式之组合模式

1.定义 ​组合模式又名部分整体模式,是用于把一组相似的对象当作一个单一的对象。组合模式依据树形结构来组合对象,用来表示部分以及整体层次。这种类型的设计模式属于结构型模式,它创建了对象组的树形结构。 2.结构 组合模式主要包含三种…

深入理解Spring MVC中的@ResponseBody注解

引言 在现代的Web应用开发中,数据的传递和交互是不可或缺的一部分。Spring MVC作为一个强大的框架,在处理客户端请求和响应时,提供了许多注解来简化开发过程。其中,ResponseBody注解在处理方法的返回值时起到了关键作用&#xff0…

Android 从其他xml文件中获取View组件数据

问题 Android Studio 我想在 trace.java 从setting.java绑定的页面activity_setting.xml中 的editview中获取数据 解决方案 仅适用于 在同一应用的不同组件之间共享数据 在 SettingActivity.java 中,当用户准备离开当前活动时,可以将 EditText 中的数…