Nginx服务优化

1 隐藏版本号*

方法一 :在http模块中添加行

#隐藏版本号
server_tokens off;

方法二 :修改版本信息

进入源码安装包

cd /安装包根目录/src/core
vim nginx.h
解注释以下行并修改
define NGINX_VERSION		"Don't you guess!"
difine NGINX_VER			"Gotcha!/" NGINX_VERSION 

回到安装包根目录,重新编译安装

./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module
make -j 4 && make install

2 更改用户和组

vim nginx
#文件开头修改如下
user nginx nginx;

解释:表示主进程master会由root创建,子进程会由nginx创建,前一个是所有者,后一个是所在组。

3 设置页面的缓存时间

主要是针对动态页面的设置

设置图片的缓存:

vim nginx
location ~\.(gif|jpg|png)$ {root html;#设置图片的缓存时间expires 1d;
}

解释:location ~ {...}表示正则匹配,\.(gif|jpg|png)$表示以.jpg .gif .png 结尾的文件;expires 1d表示缓存时间1天。

4 日志分割*

Apache是自带日志分割的,按天来进行日志收集。如access-2024-07-03.log

Nginx不会自动分割,需要人为设置。以下是一种简单的日志分 割:

vim nginx-logs.sh
#!/bin/bash
#指定分割前一天的日志
day=$(date -d "-1 day" "+%Y%m%d")
logs_path="/usr/local/nginx/logs/"
#指定pid文件的位置
pid_path="/usr/local/nginx/run/nginx.pid"
mv /usr/local/nginx/logs/access.log ${logs_path}access-${day}.log
mv /usr/local/nginx/logs/error.log ${logs_path}error-${day}.log
#重新创建一个新的日志,主要用于日志分割
kill -USR1 $(cat $pid_path)
#加上日志清理,清理30天以上的日志
find $logs_path -mtime +30 -exec rm -rf {} \;#退出脚本,赋权,并创建定时任务,每天0点1分执行
chmod 777 nginx-logs.sh
crontab -e
0 0 * * * /usr/local/nginx/logs/nginx-logs.sh

5 绑定CPU*

nginx.confworker process 2 表示进程有2个,这个和CPU数挂钩。如果不绑定CPU的话,进程可能会在两个CPU之间来回切换使用,浪费资源。

所以要让进程绑定CPU,避免进程切换。

vim nginx.conf
#在http模块中添加行
worker_cpu_affinity 0001 0010 0100 1000;
#0001 0010 0100 1000 分别表示cpu 1 2 3 4 

注意:绑定cpu要写在http模块中。

6 连接超时

Nginx配置文件中,keepalive_timeout表示请求完成之后的连接保持时间,单位秒,一般60-120秒。其他超时设置如下:新增以下行

client_header_timeout 10;

客户端发送一个完整的请求头的超时时间,10秒之内没有发送一个完整的请求头,Nginx返回408:request timeout

client_body_timeout 5;

客户端和服务端建立连接之后,发送请求体的超时时间。客户端在5秒内没有发送任何内容,Nginx同样返回408

7 配置页面压缩

nginx.conf 中,gzip on是启用页面压缩

具体配置:

gzip on;
#最小的压缩文件,小于等于1k的文件就不压缩了
gzip_min_length 1k;
#设置压缩的缓冲区,4个,每个缓冲区大小64k
gzip_buffers 4 64k;
#压缩比例1-9,数字越小,压缩的比率越小,速度越块;数字越大,比率越大,速度越慢
gzip_comp_level 6;
#支持压缩的类型
gzip_types ...(图片文字都行,如text/plain image/gif)

8 回收TIME_WAIT*

TIME_WAIT是TCP连接中的一种状态,出现在四次挥手之后。处于等待状态,双方不再发送数据。

TIME_WAIT所占用的系统资源很小,数量较少时,完全可以忽略不计;然而数量很多时,就会有一定影响。所以对有需要的场景,需要在断开连接后,尽快结束TIME_WAIT状态,回收系统资源。

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

统计当前系统的连接状态。

在系统内核文件中进行设置:

vim /etc/sysctl.conf
  1. 防止tcp的半连接队列溢出,可以达到服务端在收到tcp的syn(同步)请求时能快速响应:
net.ipv4.tcp_syncookies=1
  1. 允许复用TIME_WAIT状态的连接,新的连接可以直接使用TIME_WAIT状态的端口。可以提高连接的重用率。
net.ipv4.tcp_tw_reuse=1
  1. 可选项,老版本的配置,时间戳戳记也可以进行连接复用,基本不用了
net.ipv4.tcp_tw_recycle=1
  1. 控制TIME_WAIT状态的持续时间,持续65秒。注意:不是立即把TIME_WAIT的连接收回,而是尽可能地把TIME_WAIT的状态进行回收:把没用的、空闲的进行回收
net.ipv4.tcp_fin_timeout=65

9 防盗链

在location模块中做以下配置:

location ~* \.(jpg|gif|png)$ {valid_referers none blocked *.ykw.com ykw.com;#允许ykw.com的网址访问图片if ( $invalid_referer ) {#对不满足条件(非ykw.com)的访问,执行以下操作rewrite ^/ http://www.ykw.com/error.html;#重定向到指定的URL的提示图片}
}

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

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

相关文章

C:数据结构---算法

1.1排序算法 稳定排序 不稳定排序 ①冒泡排序(稳定) 比较相邻的元素。如果第一个比第二个大,就交换他们两个。对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对 ②选择排序 在未排序序列中找到最小(大…

Nature Communications|柔性高密度、高灵敏应变传感器阵列(柔性应变传感/界面调控/电子皮肤/柔性电子)

复旦大学武利民( Limin Wu)和李卓( Zhuo Li)团队,在《Nature Communications》上发布了一篇题为“High-density, highly sensitive sensor array of spiky carbon nanospheres for strain field mapping”的论文。论文内容如下: 一、 摘要 在工程应用中,准确地映射应变…

星环科技推出语料开发工具TCS,重塑语料管理与应用新纪元

5月30-31日,2024向星力未来数据技术峰会期间,星环科技推出一款创新的语料开发工具——星环语料开发工具TCS(Transwarp Corpus Studio),旨在通过全面的语料生命周期管理,极大提升语料开发效率,助…

批量提取PDF中表格内容

1 背景 从PDF文件获取表格中的数据,也是日常办公容易涉及到的一项工作。比如我们想获取某公司年报里面的表格数据,PDF动辄上百页的数据。 2 传统方法 一个一个从PDF表格中复制,然后粘贴到Excel表格中,效率太低了。 3 办公自动…

云计算【第一阶段(29)】远程访问及控制

一、ssh远程管理 1.1、ssh (secureshell)协议 是一种安全通道协议对通信数据进行了加密处理,用于远程管理功能SSH 协议对通信双方的数据传输进行了加密处理,其中包括用户登录时输入的用户口令,建立在应用层和传输层基础上的安全协议。SSH客…

synchronized关键字详解(全面分析)

目录 synchronized关键字详解1、synchronized关键字简介2、synchronized作用和使用场景作用使用场景①、用在代码块上(类级别同步)②、用在代码块上(对象级别同步)③、用在普通方法上(对象级别同步)④、用在静态方法上(类级别同步)总结: 3、synchronized底层原理&am…

【初阶数据结构】2.顺序表

文章目录 1.线性表2.顺序表2.1 概念与结构2.2 分类2.2.1 静态顺序表2.2.2 动态顺序表 2.3 动态顺序表的实现2.4 顺序表算法题2.4.1 移除元素2.4.2 删除有序数组中的重复项2.4.3 合并两个有序数组 2.5 顺序表问题与思考 1.线性表 线性表(linear list)是n…

SpringBoot使用Redisson操作Redis及使用场景实战

前言 在SpringBoot使用RedisTemplate、StringRedisTemplate操作Redis中,我们介绍了RedisTemplate以及如何SpringBoot如何通过RedisTemplate、StringRedisTemplate操作Redis。 RedisTemplate的好处就是基于SpringBoot自动装配的原理,使得整合redis时比较…

防火墙安全策略练习

目录 实验拓扑 实验要求 实验思路 实验步骤 1.配置交换机,划分接口的vlan,配置ISP 2.配置防火墙 3.接下来在WEB界面进行所有安全策略操作 配置接口 创建安全区域: 创建地址: 时间段: 安全策略部分&#xff…

地理信息科学在灾害管理中的应用:GIS构建防灾减灾的智慧防线

在全球气候变化与人类活动加剧的背景下,自然灾害频发,给社会经济发展带来了严峻挑战。本文将深入分析GIS在灾害预测、评估和响应中的核心作用,展示其如何为构建更加安全、韧性的社会提供智慧解决方案。 灾害预测:GIS的“先知”之…

JavaScript青少年简明教程:为何学习JavaScript及JavaScript简介

JavaScript青少年简明教程:为何学习JavaScript及JavaScript简介 JavaScript最初是为web浏览器(前端开发)设计的。它可以在所有现代浏览器中运行,包括Chrome, Firefox, Safari, Edge等。 这意味着JavaScript代码可以在任何能运行…

docker中mysql设置lower_case_table_names配置的坑

前沿 今天在使用flowable流程框架的时候,遇到一个问题。需要配置MySQL数据库以实现表名大小写不敏感。本以为这是一个简单的任务,却耗费了我两个多小时的时间。 docker容器中修改配置,重启不成功 我们前提是容器中的mysql中已经有很多数据…

判断链表中是否有环(力扣141.环形链表)

这道题要用到快慢指针。 先解释一下什么是快慢指针。 快慢指针有两个指针,走得慢的是慢指针,走得快的是快指针。 在这道题,我们规定慢指针一次走一步,快指针一次走2步。 如果该链表有环,快慢指针最终会在环中相遇&a…

微调及代码

一、微调:迁移学习(transfer learning)将从源数据集学到的知识迁移到目标数据集。 二、步骤 1、在源数据集(例如ImageNet数据集)上预训练神经网络模型,即源模型。 2、创建一个新的神经网络模型&#xff…

大数据基础:Hadoop之Yarn重点架构原理

文章目录 Hadoop之Yarn重点架构原理 一、Yarn介绍 二、Yarn架构 三、Yarn任务运行流程 四、Yarn三种资源调度器特点及使用场景 Hadoop之Yarn重点架构原理 一、Yarn介绍 Apache Hadoop Yarn(Yet Another Reasource Negotiator,另一种资源协调者)是Hadoop2.x版…

LLM-向量数据库中的索引算法总结

文章目录 前言向量数据库介绍索引方法倒排索引KNN 搜索近似 KNN 搜索Product Quantization(PQ)NSW 算法搜索HNSW 前言 向量数据库是当今大模型知识库检索落地实践的核心组件,下图是构建知识库检索的架构图: 首先会将相关文档数据向量化嵌入到向量化数据…

达梦数据库dm8安装步骤及迁移

目录 前言: 一、安装部署 1、下载 2、创建用户及安装目录 3、挂载下载的镜像 4、环境配置 5、安装 二、基本使用 1、DM工具使用 2、兼容性配置 2.1 兼容GBK字符集编码 2.2 兼容UTF-8字符集编码 3、创建用户和密码,表空间 4、整理数据库配置 5、启动脚本设置 …

JavaSE学习笔记之内部类、枚举类和基本类型包装类

今天我们继续复习Java相关的知识,和大家分享有关内部类等方面的知识,希望大家喜欢。 目录​​​​​​​ 内部类 成员内部类 ​编辑 静态内部类 局部内部类 匿名内部类 枚举类 定义方法 基本类型包装类 自动装箱和拆箱 内部类 成员内部类 成…

使用 Google 的 Generative AI 服务时,请求没有包含足够的认证范围(scopes)

题意: Google generativeai 403 Request had insufficient authentication scopes. [reason: "ACCESS_TOKEN_SCOPE_INSUFFICIENT" 问题背景: I have tried the simple POC for generativeai on its own to do generate_content and it works…

Python酷库之旅-第三方库Pandas(017)

目录 一、用法精讲 41、pandas.melt函数 41-1、语法 41-2、参数 41-3、功能 41-4、返回值 41-5、说明 41-5-1、宽格式数据(Wide Format) 41-5-2、长格式数据(Long Format) 41-6、用法 41-6-1、数据准备 41-6-2、代码示例 41-6-3、结果输出 42、pandas.pivot函数 …