Nginx服务优化与防盗链
目录
1.隐藏nginx版本号
1.查看版本号
2.隐藏版本信息
2.修改用户与组
3.缓存时间
4.日志分割
5.连接超时
6.更改进程数
7.网页压缩
8.配置防盗链
1.配置web源主机(192.168.156.10 www.lhf.com)
2.配置域名映射关系
3.配置盗链主机 (192.168.156.110 www.dao.com)
4.在web源主机(192.168.52.210 www.zhuo.com)中配置防盗链
1.隐藏nginx版本号
1.查看版本号
方法一:curl 命令
可以在 CentOS 中使用命令 curl -I http://192.168.156.140显示响应报文首部信息.
curl -I http://192.168.156.140

方法二:在网页中查看
1. #切换至html目录,拖一个图片进去
cd /apps/nginx/html
2. #在网页中查看
http://192.168.156.140/3.#打开浏览器访问IP地址,然后按F12,打开查看
2.隐藏版本信息
方法一:修改配置文件
1.#修改配置文件
vim /apps/nginx/conf/nginx.conf2.#重启nginx
systemctl restart nginx3.#查看版本是否被隐藏
curl -I http://192.168.156.10
http {include mime.types;default_type application/octet-stream;server_tokens off; #添加,关闭版本号......
}


方法二: 修改源码文件,重新编译安装
1. #切换至nginx安装包所在目录
cd /opt/
2. #停止nginx服务
systemctl stop nginx.service
3. #切换至安装目录
cd nginx-1.18.0/
4. #切换至内核目录
cd src/core/
5. #进入配置文件
vim nginx.h
#define NGINX_VERSION "yxp"
#define NGINX_VER "yyy/" NGINX_VERSION
6. #切换至文件目录
cd ../../
7. #编译
./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-http_stub_status_module
8. #安装
make && make install -j4
9. #将配置文件下的之前关闭版本信息开启
vim /apps/nginx/conf/nginx.conf
server_tokens on;
10. #重启nginx
systemctl restart nginx
11. #查看版本信息
curl -I http://192.168.156.10
2.修改用户与组
1. #修改配置文件
vim /apps/nginx/conf/nginx.conf
user lhf lhf; #取消注释,修改用户为 lhf ,组为 lhf
2. #创建非登录用户
useradd -s /sbin/nologin lhf
3. #重启服务
systemctl restart nginx
4. #查看是否修改成功
ps aux | grep nginx



3.缓存时间
当nginx将网页数据返回给客户端后,可设置缓存时间,以方便在日后进行相同内容的请求时直接返回,避免重复请求,加快了访问速度一般针对静态网页设置,对动态网页不设置缓存时间。
1. #修改配置文件
vim /apps/nginx/conf/nginx.conf#添加以下内容location ~ \.(jpg|png|bmp|gif)$ {root html;expires 1d;}
2. #查看是否有语法错误
nginx -t
3. #重启服务
systemctl restart nginx.service
4.#在网页中查看服务
http://192.168.156.10/2.png
Cahce-Control:max-age=86400 表示缓存时间是 86400 秒。也就是缓存一天的时间,一天之内浏览器访问这个页面,都是用缓存中的数据,而不需要向 Nginx 服务器重新发出请求,减少了服务器的使用带宽。



4.日志分割
随着Nginx运行时间的增加,产生的日志也会逐渐增加,为了方便掌握Nginx的运行状态,需要时刻关注Nginx日志文件。太大的日志文件对监控是一个大灾难,不便于分析排查,需要定期的进行日志文件的切割。
1. #写脚本
vim /apps/nginx/nginx_log.sh
#!/bin/bash
#this is for divide nginx log
d=$(date +%F -d -1day) #显示前一天的时间
path="/var/log/nginx"
pid="/apps/nginx/logs/nginx.pid"
[ -d $path ] ||mkdir -p $path #创建日志文件目录
mv /apps/nginx/logs/access.log ${path}/www.yxp.com-$d #移动并重命名日志文件 kill -USR1 $(cat $pid) #重建新日志文件
find $path -mtime +30 -delete #删除30天之前的日志文件
2. #赋予权限
chmod +x /apps/nginx/nginx_log.sh
3. #计划任务
[root@localhost nginx]#crontab -e
30 1 * * * /apps/nginx/nginx_log.sh
扩展小知识
在linux操作系统中,每个文件都有很多的时间参数,其中有三个比较主要,分别是ctime,atime,mtime
ctime(status time): 当修改文件的权限或者属性的时候,就会更新这个时间,ctime并不是create time,更像是change time, 只有当更新文件的属性或者权限的时候才会更新这个时间,但是更改内容的话是不会更新这个时间。
atime(accesstime): 当使用这个文件的时候就会更新这个时间。
mtime(modification time): 当修改文件的内容数据的时候,就会更新这个时间,而更改权限或者属性,mtime不会改变,这就是和ctime的区别。
5.连接超时

HTTP有一个KeepAlive模式,它告诉web服务器在处理完一个请求后保持这个TCP连接的打开状态。若接收到来自同一客户端的其它请求,服务端会利用这个未被关闭的连接,而不需要再建立一个连接。KeepAlive 在一段时间内保持打开状态,它们会在这段时间内占用资源。占用过多就会影响性能。
keepalive_timeout
指定KeepAlive的超时时间(timeout)。指定每个TCP连接最多可以保持多长时间,服务器将会在这个时间后关闭连接。 Nginx的默认值是65秒,有些浏览器最多只保持 60 秒,所以可以设定为 60 秒。若将它设置为0,就禁止了keepalive 连接。
第二个参数(可选的)指定了在响应头Keep-Alive:timeout=time中的time值。这个头能够让一些浏览器主动关闭连接,这样服务器就不必去关闭连接了。没有这个参数,Nginx 不会发送 Keep-Alive 响应头。
client_header_timeout
客户端向服务端发送一个完整的 request header 的超时时间。如果客户端在指定时间内没有发送一个完整的 request header,Nginx 返回 HTTP 408(Request Timed Out)。
client_body_timeout
指定客户端与服务端建立连接后发送 request body 的超时时间。如果客户端在指定时间内没有发送任何内容,Nginx 返回 HTTP 408(Request Timed Out)。
#修改配置文件
vim /apps/nginx/conf/nginx.conf
-----------------------------------
http {
...... keepalive_timeout 65 180;client_header_timeout 80;client_body_timeout 80;
......
}
------------------------------------#重启nginx服务
systemctl restart nginx.service
#在网页中测试
192.168.156.10



6.更改进程数
在高并发场景,需要启动更多的Nginx进程以保证快速响应,以处理用户的请求,避免造成阻塞。
网段一瞬间,比如:淘宝;一瞬间请求过多时,cpu会 负载,这时就需要增加CPU工作个数,每个CPU可以处理多少个最大文件数调高,worker_processes*worker_connections 等于它的同一时间段最多可以有多少台机器来访问。
//配置文件优化以及内核优化
1. #统计cpu核数
cat /proc/cpuinfo |grep processor|wc -l
或
cat /proc/cpuinfo |grep -c processor
2. #查看目前有的核数
ps -aux |grep nginx
3. #修改 Nginx 的配置文件worker_processes 参数,一般设为 CPU 的个数或者核数,
在高并发的情况下可设置为 CPU 个数或者核数的 2 倍,可以查看 CPU 的核数以确定参数。
vim /apps/nginx/conf/nginx.conf
worker_processes 2;
worker_cpu_affinity 01 10; 设置每个进程由不同的cpu处理,计算机是二进制语言,01(1),10(2)
//内核优化、做亲和度、指定2个/4个线程,怎么使用CPU内核,目的是让CPU的内核压力均衡events {worker_connections 4096;
}4.更该系统的处理线程的最大数
ulimit -a #查看
ulimit -n 60000 #更改为60000
5. #重启服务并查看
systemctl restart nginx.service
ps -aux |grep nginx
1.统计cpu核数

2. 查看目前有的核数

3.修改 Nginx 的配置文件

4.重启服务和验证进程

7.网页压缩
1.Nginx的ngx_http_gzip_module压缩模块提供对文件内容压缩的功能;
2.允许Nginx服务器将输出内容在发送客户端之前进行压缩,以节约网站带宽,提升用户的访问体验,默认已经安装可在配置文件中加入相应的压缩功能参数对压缩性能进行优化。
1. #修改配置文件gzip on; #取消注释,开启gzip压缩功能gzip_min_length 1k; #最小压缩文件大小gzip_buffers 4 16k; #压缩缓冲区,大小为4个16k缓冲区gzip_http_version 1.1; #压缩版本(默认1.1,前端如果是squid2.5请使用1.0)gzip_comp_level 6; #压缩比率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; #压缩类型,表示哪些网页文档启用压缩功能
2. #重启服务
systemctl restart nginx.service
3. #网页查看
http://192.168.156.10/2.png



8.配置防盗链
1.在企业网站服务中,一般都要配置防盗链功能,以避免网站内容被非法盗用,造成经济损失,也避免了不必要的带宽浪费。
2.Nginx 的防盗链功能也非常强大,在默认情况下,只需要进行很简单的配置,即可实现防盗链处理。
1.配置web源主机(192.168.156.10 www.lhf.com)
(1)安装nginx服务并配置被盗链图片
#导入图片2.gif
准备一张图片 改名为2.gif#切换目录
cd /apps/nginx/html/#上传图片
rz -E#编辑主页文件
vim index.html
-------------------------------------------------------------------------
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title></head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required</p><p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p><p><em>Thank you for using nginx.</em></p>
<img src="2.gif"/> #插入添加此行-------------------------------------------------------
#检查和重启服务
nginx -t
systemctl restart nginx#验证
火狐输入
192.168.156.10




2.配置域名映射关系
#修改主机名和IP配置文件
vim /etc/hosts
--------------------------------------------------
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.156.10 www.lhf.com #添加此行#关闭防火墙并重启服务
systemctl stop firewalld.service
setenforce 0
systemctl restart nginx

3.配置盗链主机 (192.168.156.110 www.dao.com)
(1)安装apache服务并配置盗链主页
#安装apache服务
yum install httpd -y #配置盗链主页
vim /var/www/html/index.html
---------------------------------------------
<html>
<body>
<h1>盗链</h1>
<img src="http://www.lhf.com/2.gif"/> #图片链接地址通过浏览器访问http://www.lhf.com 所得图片地址
</body>
</html>
(2) 设置域名映射
vim /etc/hosts127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.156.10 www.lhf.com
192.168.156.110 www.dao.com


(3)重启服务并测试
#关闭防火墙并重启服务
systemctl stop firewalld.service
setenforce 0
systemctl restart httpd#在盗链主机(192.168.156.110 )的浏览器中输入盗链主机的域名
打开火狐输入
192.168.156.10 或 www.lhf.com
和
192.168.156.110 或 www.dao.com
验证是否被盗链



4.在web源主机(192.168.52.210 www.zhuo.com)中配置防盗链
cd /apps/nginx/html/ #切换目录
rz -E #上传图片

(2)配置防盗链
vim /apps/nginx/conf/nginx.conf (约49行开始插入
--------------------------------------------------------
http {
......server {......location ~* \.(jpg|gif|swf)$ {valid_referers none blocked *.lhf.com lhf.com;if ( $invalid_referer ) {rewrite ^/ http://www.lhf.com/3.png;}}
------------------------------------------------------------
~* \.(jpg|gif|swf)$ :这段正则表达式表示匹配不区分大小写,以.jpg 或.gif 或.swf 结尾的文件;valid_referers :设置信任的网站,可以正常使用图片;none:允许没有http_refer的请求访问资源(根据Referer的定义,它的作用是指示一个请求是从哪里链接过来的,如果直接在浏览器的地址栏中输入一个资源的URL地址,那么这种请求是不会包含 Referer 字段的),如 http://www.lhf.com/2.jpg
我们使用 http://www.lhf.com 访问显示的图片,可以理解成 http://www.zhuo.com/2.jfif 这个请求是从 http://www.lhf.com 这个链接过来的。blocked:允许不是http://开头的,不带协议的请求访问资源; *.lhf.com:只允许来自指定域名的请求访问资源,如 http://www.zhuo.comif语句:如果链接的来源域名不在valid_referers所列出的列表中,$invalid_referer为true,则执行后面的操作

(3)检查并重启服务
nginx -t
systemctl restart nginx

(4)验证防盗链是否有效
#在盗链主机(192.168.156.110 )的浏览器中输入盗链主机的域名
打开火狐输入
192.168.156.10 或 www.lhf.com
和
192.168.156.110 或 www.dao.com
验证是否被盗链


相关文章:
Nginx服务优化与防盗链
目录 1.隐藏nginx版本号 1.查看版本号 2.隐藏版本信息 2.修改用户与组 3.缓存时间 4.日志分割 5.连接超时 6.更改进程数 7.网页压缩 8.配置防盗链 1.配置web源主机(192.168.156.10 www.lhf.com) 2.配置域名映射关系 3.配置盗链主机 ࿰…...
npm与yarn常用命令
npm npm -v:查看 npm 版本npm init:初始化后会出现一个 Package.json 配置文件,可以在后面加上 -y,快速跳到问答界面npm install:会根据项目中的 package.json 文件自动给下载项目中所需的全部依赖npm insall 包含 --…...
【C++】C++11新特性——右值引用
文章目录一、左值引用、 右值引用1.1 左值与右值1.2 左值引用1.3 右值引用二、右值引用的意义三、移动语句3.1 移动构造3.2 移动赋值3.3 总结四、move问题五、完美转发5.1 万能引用与折叠5.2 完美转发std::forward一、左值引用、 右值引用 1.1 左值与右值 我们经常能听到左值…...
C#基础教程21 正则表达式
文章目录 简介正则表达式语法字符集元字符转义字符量词贪婪匹配和非贪婪匹配正则表达式类Regex类Match方法Matches方法简介 正则表达式是一种描述字符串模式的语言,它可以用来匹配、查找、替换字符串中的模式。在C#中,我们可以使用System.Text.RegularExpressions命名空间下的…...
聚观早报|谷歌发布最大视觉语言模型;王兴投资王慧文ChatGPT项目
今日要闻:谷歌发布全球最大视觉语言模型;马斯克预计Twitter下季度现金流转正;王兴投资王慧文ChatGPT项目;美国拟明年 11 月开展载人绕月飞行;慧与科技宣布收购Athonet谷歌发布全球最大视觉语言模型 近日,来…...
java Spring5 xml配置文件方式实现声明式事务
在java Spring5通过声明式事务(注解方式)完成一个简单的事务操作中 我们通过注解方式完成了一个事务操作 那么 下面 我还是讲一下 基于xml实现声明式事务的操作 其实在开发过程中 大家肯定都喜欢用注解 因为他方便 这篇文章中的xml方式 大家做个了解就好 还是 我们的这张表 记…...
常用存储芯片-笔记本上固态硬盘PTS11系列推荐
在存储领域中,除了存储颗粒之外,还有一种极其重要的芯片:存储控制芯片。存储控制芯片是CPU与存储器之间数据交换的中介,决定了存储器最大容量、存取速度等多个重要参数。特别是在AI、5G、自动驾驶时代,对于数据处理及存…...
【AI绘图学习笔记】奇异值分解(SVD)、主成分分析(PCA)
这节的内容需要一些线性代数基础知识,如果你没听懂本文在讲什么,强烈建议你学习【官方双语/合集】线性代数的本质 - 系列合集 文章目录奇异值分解线性变换特征值和特征向量的几何意义什么是奇异值分解?公式推导SVD推广到任意大小矩阵如何求SV…...
【设计模式】模板方法模式和门面模式
模板方法模式和门面模式模板方法模式代码示例门面模式代码示例门面模式的应用场景模板方法模式 模板方法模式非常简单,就是定义了一个固定的公共流程,整个流程有哪些步骤是事先定义好的,具体的步骤则交由子类去实现。属于行为型设计模式。 简…...
Kubernetes未来十年的四大发展趋势
作者:李翔 跟大家已经感受到的一样,Kubernetes已经成为了云计算领域最具统治力的平台,成为了云原生开发的绝对标准,而伴随Kubernetes诞生的CNCF (Cloud Native Computing Foundation) 也因此成为了业界影响力巨大的组织。在成为云…...
一、sql 基础知识、函数和子查询
MySQL 是一种流行的关系型数据库管理系统,使用 SQL 语言进行数据管理和操作。在 MySQL 中,常用的语句包括 SELECT 查询语句、WHERE 条件语句、算术表达式、函数、聚合函数、自定义函数、逻辑表达式、子查询和连接。这些语句可以帮助用户快速地进行数据查…...
产品射频认证笔记
文章目录1. 射频监管认证的目的:1.1 确保 RF 产品在其预期环境中按预期运行1.2 确保射频产品不会干扰其他电子或射频设备2. 射频认证地区规范3. FCC简介4. FCC认证需要准备的内容:5. 射频监管测量会话期间测量以下射频属性:6. 调整射频参数6.…...
做了个springboot接口参数解密的工具,我给它命名为万能钥匙(已上传maven中央仓库,附详细使用说明)
前言:之前工作中做过两个功能,就是之前写的这两篇博客,最近几天有个想法,给它做成一个springboot的start启动器,直接引入依赖,写好配置就能用了 springboot使用自定义注解实现接口参数解密,普通…...
【Flutter从入门到入坑】Flutter 知识体系
学习 Flutter 需要掌握哪些知识? 终端设备越来越碎片化,需要支持的操作系统越来越多,从研发效率和维护成本综合考虑,跨平台开发一定是未来大前端的趋势,我们应该拥抱变化。而 Flutter 提供了一套彻底的移动跨平台方案…...
顺序表的基本操作
目录 一.什么是顺序表 二.顺序表的基本操作 1.初始化 2.增容 3.尾插 4.头插 5.尾删 6.头删 7.指定位置插入 8.指定位置删除 9.打印 10.查找 11.销毁 一.什么是顺序表 顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采用数组…...
设计模式——创建型模型——单列模式(8种实现)
前言: 👏作者简介:我是笑霸final,一名热爱技术的在校学生。 📝个人主页:个人主页1 || 笑霸final的主页2 📕系列专栏:计算机基础专栏 📧如果文章知识点有错误的地方&#…...
【软考中级】软件设计师笔记
计算机系统的性能一般包括两个方面:一方面是它的可用性,也就是计算机系统能正常工作的时间,其指标可以是能够持续工作的时间长度,也可以是在一段时间内,能正常工作的时间所占的百分比 另一方面是处理能力,又…...
包教包会的ES6
自学参考:http://es6.ruanyifeng.com/ 一、ECMAScript 6 简介 ECMAScript 6.0(以下简称 ES6)是 JavaScript 语言的下一代标准,已经在 2015 年 6 月正式发布了。它的目标,是使得 JavaScript 语言可以用来编写复杂的大…...
python学习——【第四弹】
前言 上一篇文章 python学习——【第三弹】 中学习了python中的流程控制语句,这篇文章我们接着学习python中的序列。先给大家介绍不可变序列 字符串和可变序列 列表,下一篇文章接着补充元组,集合和字典。 序列 指的是一块可以存放多个值的…...
Web3中文|无聊猿Otherside元宇宙启动第二次旅行
3月9日消息,无聊猿Bored Ape Yacht Club母公司Yuga Labs公布了其Otherside元宇宙游戏平台第二次测试的最新细节。Yuga Labs公司称,“第二次旅行”将于3月25日举行,由四位Otherside团队长带领完成近两小时的游戏故事。本次旅行对Otherdeed NFT…...
eos低开视图查询,筛选空字符的数据,事件中的查询条件怎么写?
问题描述: eos低开视图查询,筛选空字符的数据,事件中的查询条件怎么写? 解决方案: 查询空字符串,可在查询条件中使op"empty",参考示例如下。 this.finalCondition.and.items.push({propertyName: "n…...
免死金牌: OpenClaw + keepalived
文章目录背景解决方案查看IP检测脚本keepalived 配置演练故障openclaw-gateway.service背景 问题来自 小龙虾自杀, 当我让 OpenClaw 更新一些配置时, 它执行了一条 openclaw gateway stop 命令, 导致 OpenClaw 服务停止, 然后我就干瞪眼了, 还在傻等, 它甚至一句分别的话都没有…...
2025届最火的十大AI写作工具实测分析
Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 在学术写作这个特定的场景之内,精确地挑选恰当的AI论文平台,能够极其…...
天梯赛L2-006 树的遍历
L2-006 树的遍历 给定一棵二叉树的后序遍历和中序遍历,请你输出其层序遍历的序列。这里假设键值都是互不相等的正整数。 输入格式: 输入第一行给出一个正整数N(≤30),是二叉树中结点的个数。第二行给出其后序遍历序…...
2026上海紧固件专业展6月24-26日国家会展中心(上海)举办
2026第十六届上海紧固件专业展(Fastener Expo Shanghai 2026)将于6月24日至26日在国家会展中心(上海)举办。本届展会围绕紧固件全产业链展开,涵盖紧固件成品、冷镦成型设备、模具耗材、检测包装、表面处理以及原材料供…...
终极解析器构建指南:Ohm从CSV解析到自定义语法实战
终极解析器构建指南:Ohm从CSV解析到自定义语法实战 【免费下载链接】ohm A library and language for building parsers, interpreters, compilers, etc. 项目地址: https://gitcode.com/gh_mirrors/oh/ohm Ohm是一个强大的解析器构建库和领域特定语言&#…...
终极指南:10个技巧快速解决iOS符号拦截失败问题
终极指南:10个技巧快速解决iOS符号拦截失败问题 【免费下载链接】fishhook A library that enables dynamically rebinding symbols in Mach-O binaries running on iOS. 项目地址: https://gitcode.com/gh_mirrors/fi/fishhook 如果你在使用fishhook进行iOS…...
5个实用技巧:掌握FastBle日志系统的完整调试指南
5个实用技巧:掌握FastBle日志系统的完整调试指南 【免费下载链接】FastBle Android Bluetooth Low Energy (BLE) Fast Development Framework. It uses simple ways to filter, scan, connect, read ,write, notify, readRssi, setMTU, and multiConnection. 项目…...
雯雯的后宫-造相Z-Image-瑜伽女孩部署避坑指南:xinference.log日志错误排查大全
雯雯的后宫-造相Z-Image-瑜伽女孩部署避坑指南:xinference.log日志错误排查大全 部署一个AI文生图模型,最让人头疼的往往不是写提示词,而是服务启动时那一串串让人摸不着头脑的日志。特别是当你满怀期待地部署“雯雯的后宫-造相Z-Image-瑜伽…...
三相三电平维也纳Vienna整流器DPWM调制仿真之旅
三相三电平维也纳Vienna整流器 DPWM调制仿真 Matlab2020a 双PI控制 锁相环控制 电容电压平衡控制 最大相钳位 过零畸变 零序分量注入实现最大相钳位消除过零畸变 基于载波调制实现 谐波畸变率对比分析 电压利用率对比分析 交流侧电压有效值 220V/50Hz 额定输出功率10kw 直…...
