当前位置: 首页 > news >正文

Nginx优化与防盗链

Nginx服务优化

一、隐藏Nginx版本号,避免安全漏洞泄漏

Nginx的版本号可能会暴露服务器的一些信息,因此有时我们需要隐藏它以提高安全性。

方法一:通过修改配置文件

1,编辑Nginx配置文件
使用vim或其他文本编辑器打开Nginx的配置文件:

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

2,关闭版本号显示

http {include       mime.types;default_type  application/octet-stream;server_tokens off;		 					#添加,关闭版本号......
}

3,重启Nginx服务
保存并退出编辑器后,重启Nginx服务以使更改生效:

systemctl restart nginx

4,验证更改
使用curl命令检查响应头是否已不再包含版本信息:

curl -I http://192.168.37.133
方法二:通过修改源码并重新编译安装

这种方法更为深入,适用于需要自定义版本号或服务器标识的情况。

1,编辑源码文件
打开Nginx的源码文件nginx.h:

vim /opt/nginx-1.12.0/src/core/nginx.h

修改以下两行以更改版本号和服务器类型:

#define NGINX_VERSION "1.1.1" // 修改为你想要的版本号
#define NGINX_VER "IIS/" NGINX_VERSION // 修改服务器类型,例如"IIS"

2,重新编译和安装Nginx
在源码目录中运行以下命令以重新配置、编译和安装Nginx:

cd /opt/nginx-1.12.0/
./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module
make && make install

3,启用版本号显示(可选)

如果你想在配置文件中再次启用版本号显示,可以在nginx.conf中设置:

server_tokens on;

4,重启Nginx服务
保存所有更改并重启Nginx服务:

systemctl restart nginx

5,测试
再次使用curl命令检查响应头:

curl -I http://192.168.37.133

注意:修改源码并重新编译安装是一个更为复杂的过程,通常只在需要深度定制Nginx时采用。对于大多数情况,简单地修改配置文件就足够了。

二、修改用户与组

为了提高[Nginx服务器的安全性,通常建议将Nginx运行在非root用户下。

vim /usr/local/nginx/conf/nginx.conf
user nginx nginx; 								#取消注释,修改用户为 nginx ,组为 nginxsystemctl restart nginx   #重启Nginx服务以使更改生效ps aux | grep nginx       #使用以下命令查看Nginx进程的用户与组
#主进程由root创建,子进程由指定的用户(这里是nginx)创建

三、缓存时间

当Nginx将网页数据返回给客户端后,可设置缓存的时间,以方便在日后进行相同内容的请求时直接返回,避免重复请求,加快了访问速度
一般针对静态网页设置,对动态网页不设置缓存时间

vim /usr/local/nginx/conf/nginx.conf
http {
......server {...... location / {root html;index index.html index.htm;}location ~ \.(gif|jpg|jepg|png|bmp|ico)$ { 		#加入新的 location,以图片作为缓存对象root html;expires 1d;							#指定缓存时间,1天}......}
}#重启服务
systemctl restart nginx#测试访问  在浏览器中访问一个设置了缓存的静态资源 例如:http://192.168.37.133/game.jpg然后查看响应头信息。你应该能看到类似以下的缓存控制指令:Cache-Control: max-age=86400#这表示资源已被缓存,且在接下来的86400秒(即1天)内,浏览器会直接从缓存中加载该资源,而不会重新向Nginx服务器发送请求,减少了服务器的使用带宽。#通过以上步骤,你可以轻松地修改Nginx的用户与组,并为静态资源设置合适的缓存时间,从而提高服务器的安全性和性能。

四、配置Nginx日志切割

为了管理Nginx日志文件的大小并防止日志文件过大,我们可以使用日志切割脚本定期将旧的日志文件移动到其他位置,并创建新的日志文件。以下是一个简单的日志切割脚本示例:

vim /opt/fenge.sh#!/bin/bash
# Filename: fenge.sh
day=$(date -d "-1 day" "+%Y%m%d")	# 获取前一天的日期						
logs_path="/var/log/nginx"     
pid_path="/usr/local/nginx/logs/nginx.pid"# 确保日志目录存在,如果不存在则创建
[ -d $logs_path ] || mkdir -p $logs_path 	# 移动并重命名前一天的访问日志文件
mv /usr/local/nginx/logs/access.log ${logs_path}/kgc.com-access.log-$day	# 发送USR1信号给Nginx主进程,通知它重新打开日志文件
kill -USR1 $(cat $pid_path)		#删除30天之前的日志文件
#find $logs_path -mtime +30 | xargs rm -rf 
find $logs_path -mtime +30 -exec rm -rf {} \;	#赋予脚本执行权限
chmod +x /opt/fenge.sh#手动运行脚本测试
/opt/fenge.sh#检查日志文件是否已正确切割和重命名
ls /var/log/nginx
ls /usr/local/nginx/logs/access.log #设置定时任务,每天凌晨1点自动运行日志切割脚本
crontab -e
0 1 * * * /opt/fenge.sh

Linux文件时间参数小知识

在Linux操作系统中,每个文件都有三个重要的时间参数:ctime、atime和mtime。

ctime (status time)
当文件的权限或属性被修改时,ctime会更新。它并不表示文件的创建时间,而是表示文件状态的最后更改时间。仅当文件的属性或权限发生变化时,ctime才会更新,而文件内容的更改不会影响ctime。

atime (access time)
每次访问文件(例如读取文件内容)时,atime都会更新。这有助于跟踪文件的访问频率和最近的使用情况。

mtime (modification time)
当文件的内容被修改时,mtime会更新。这是文件内容最后一次被更改的时间戳。与ctime不同,更改文件的权限或属性不会影响mtime。

五、配置Nginx连接保持的超时时间

HTTP有一个KeepAlive模式,它告诉web服务器在处理完一个请求后保持这个TCP连接的打开状态。若接收到来自同一客户端的其它请求,服务端会利用这个未被关闭的连接,而不需要再建立一个连接。
KeepAlive 在一段时间内保持打开状态,它们会在这段时间内占用资源。占用过多就会影响性能。

vim /usr/local/nginx/conf/nginx.conf#设置KeepAlive超时
http {
...... keepalive_timeout 65 180;      三次握手的超时时间client_header_timeout 80;       等待客户端发送请求头的超时时间会送408 错误client_body_timeout 80;          设置客户端发送请求体的超时时间
...... 
}systemctl restart nginx
------------------------------------------------------------------------------------------
#keepalive_timeout
指定KeepAlive的超时时间(timeout)。指定每个TCP连接最多可以保持多长时间,服务器将会在这个时间后关闭连接。 Nginx的默认值是65秒,有些浏览器最多只保持 60 秒,所以可以设定为 60 秒。若将它设置为0,就禁止了keepalive 连接。
第二个参数(可选的)180秒指定了在响应头Keep-Alive:timeout=time中的time值。这个头能够让一些浏览器在达到指定时间后主动关闭连接.没有这个参数,Nginx 不会发送 Keep-Alive 响应头。##client_header_timeout
客户端向服务端发送一个完整的 request header 的超时时间。如果客户端在指定时间内(80)没有发送一个完整的请求头,Nginx 返回 HTTP 408(Request Timed Out)。###client_body_timeout
指定客户端与服务端建立连接后发送 request body 的超时时间。如果客户端在指定时间内没有发送任何请求体内容,Nginx 返回 HTTP 408(Request Timed Out)。

六、更改Nginx进程数以优化高并发性能

在高并发场景下,为了保证服务器能够快速响应用户请求并避免阻塞,可能需要启动更多的Nginx工作进程。合理配置Nginx的工作进程数和CPU亲和性可以显著提升服务器的性能。

cat /proc/cpuinfo | grep -c "physical id"	#查看cpu物理核心数量
ps aux | grep nginx						#查看当前Nginx主进程中包含的子进程数量#根据服务器的CPU核数调整worker_processes参数
vim /usr/local/nginx/conf/nginx.conf
worker_processes  2;			 #修改为CPU核数相同或者2倍
worker_cpu_affinity 01 10  ;		
#设置每个进程由不同cpu处理,这样可以减少进程在不同核心间的切换,提高缓存命中率,从而提升性能。进程数配为4时0001 0010 0100 1000#保存并退出编辑器后,重启Nginx服务以使更改生效
systemctl restart nginx

七、配置网页压缩

Nginx的ngx_http_gzip_module压缩模块提供对文件内容压缩的功能
允许Nginx服务器将输出内容在发送客户端之前进行压缩,以节约网站带宽,提升用户的访问体验,默认已经安装
可在配置文件中加入相应的压缩功能参数对压缩性能进行优化

vim /usr/local/nginx/conf/nginx.conf#在http块中添加或修改以下配置
http {
...... gzip on;							#取消注释,开启gzip压缩功能gzip_min_length 1k;      		#最小压缩文件大小gzip_buffers 4 64k;      		#压缩缓冲区,大小为4个64k缓冲区gzip_http_version 1.1;   		#压缩版本(默认1.1,前端如果是squid2.5请使用1.0)gzip_comp_level 6;       		#压缩比率      1:压缩比最小,速度最快;9:压缩比最大,传输速度最快,但处理也最慢,也比较的消耗CPU资源 gzip_vary on;					#支持前端缓存服务器存储压缩页面gzip_disable "MSIE [1-6]\.";       # 禁用IE6及以下版本的gzip压缩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;		#压缩类型,表示哪些网页文档启用压缩功能
...... 
}cd /usr/local/nginx/html
先将game.jpg文件传到/usr/local/nginx/html目录下
vim index.html
...... 
<img src="game.jpg"/>				#网页中插入图片
</body>
</html>#保存并退出编辑器后,重启Nginx服务以应用更改
systemctl restart nginx

网页图片大小压缩

Nginx通过http_image_filter_module模块提供了图片处理功能,可以实时缩放图片等。

步骤:

1,安装依赖

安装gd-devel库,这是http_image_filter_module模块所依赖的:

yum install -y gd-devel
2,重新编译Nginx

进入Nginx源码目录,并添加http_image_filter_module模块,然后重新编译安装:

cd /opt/nginx-1.12.0/
./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module --with-http_image_filter_module
make && make install
3,配置图片压缩

在Nginx配置文件的server块中添加图片压缩规则:

location ~* \.(jpg|gif|png)$ {image_filter resize 200 200;  # 按等比例缩小图像至指定大小
}
4,测试配置
cd /usr/local/nginx/html
#先将game.jpg文件传到/usr/local/nginx/html目录下
vim index.html
...... 
<img src="game.jpg"/>#网页中插入图片
</body>
</html>
5,重启Nginx服务
systemctl restart nginx

在Linux系统中,打开火狐浏览器,右击点查看元素
选择 网络 —> 选择 HTML、WS、其他

访问 http://192.168.37.133 ,双击200响应消息查看响应头中包含 Content-Encoding: gzip

注意:
Nginx的Gzip压缩功能虽然好用,但是下面两类文件资源不太建议启用此压缩功能。

  • 图片/视频类型资源 原因:图片如jpg、png文件本身就会有压缩,所以就算开启gzip后,压缩前和压缩后大小没有多大区别,所以开启了反而会白白的浪费资源。
  • 大文件资源 原因:会消耗大量的cpu资源,且不一定有明显的效果。

八、配置防盗链

vim /usr/local/nginx/conf/nginx.conf#添加防盗链规则,在server块中针对图片文件类型(如jpg, gif, swf)添加配置
http {
......server {......location ~* \.(jpg|gif|swf)$ {	valid_referers none blocked *.cat.com; if ( $invalid_referer ) {rewrite ^/ http://www.cat.com/error.png;				rewrite 跳转#return 403;}} ......}
}
----------------------------------------------------------------------------------------------------------
~* \.(jpg|gif|swf)$ :这段正则表达式表示匹配不区分大小写,以.jpg 或.gif 或.swf 结尾的文件;
valid_referers :设置信任的网站,可以正常使用图片;
none:允许没有http_refer的请求访问资源
blocked:允许不是http://开头的,不带协议的请求访问资源; 
*.cat.com:只允许来自指定域名的请求访问资源,如 http://www.cat.com
if语句:如果链接的来源域名不在valid_referers所列出的列表中,$invalid_referer为true,则执行后面的操作,即进行重写或返回 403 页面。
----------------------------------------------------------------------------------------------------------
网页准备:
Web源主机(192.168.37.133)配置:
cd /usr/local/nginx/html
#将game.jpg、error.png文件传到/usr/local/nginx/html目录下
vim index.html
<body>
<html>
<img src="game.jpg"/>
</body>
</html>#更新/etc/hosts文件,添加域名映射
echo "192.168.37.133 www.cat.com" >> /etc/hosts 盗链网站主机(192.168.37.134):
cd /usr/local/nginx/html
vim index.html
<html>
<body>
<img src="http://www.cat.com/game.jpg"/>
</body>
</html>#更新/etc/hosts文件,添加域名映射
echo "192.168.37.134 www.dog.com" >> /etc/hosts #在盗图网站主机上进行浏览器验证
#访问http://www.dog.com,应该能看到原本应该显示的图片被替换成了error.png,这表明防盗链配置成功。
http://www.dtcms.com/a/589158.html

相关文章:

  • Vue-vuex 核心概念和 API
  • 分治归并算法第一弹
  • 【数据结构】哈夫曼树技术详解:原理、算法与应用
  • 贵阳网站备案在哪里网站红色
  • 个人网站公司网站区别经营区别数字货币怎么推广赚钱
  • 3GPP 各主要 Release(版本)及其发布时间和主要内容
  • RK3588同时硬解和GPU绘制16路1080P/通用其他RK系列板子/嵌入式监控系统/支持国产硬件和系统
  • BB ACS355变频器家装EMC电源滤波安装与使用指南
  • ARMV9.7 FEAT_SME2p3 视频编解码器新增指令扩展
  • 基础开发工具(下)
  • 一文详解分布式事务
  • HarmonyOS DataShareExtension深度解析:构建安全高效的数据共享架构
  • 团风做网站网站建站前期准备工作
  • .net 网站开发架构企业网站设置
  • 面试题 16.25. LRU 缓存
  • st表详解
  • 企业网站优化甲薇g71679做同等效果下拉词做网站白云
  • 9、webgl 基本概念 + 复合变换 + 平面内容复习
  • gRPC C++库架构与异步编程实践
  • 做网站如何收益发送wordpress
  • 人工智能备考——4部分总结
  • Vite.js 快速入门指南 (React + JavaScript 版)
  • 如何建微信商城网站wordpress手机模板
  • 基于springboot纺织品企业财务管理系统【带源码和文档】
  • CHAR、VARCHAR、TEXT 的差别与存储方式
  • QtMainWindow C++详解:构建桌面应用的核心框架
  • 红帽虚拟机,NG搭建网站练习
  • EntryAbility继承FlutterAbility应用入口深度解析
  • (3)项目启航:Qt实战项目之创建项目
  • 补充说明:Windows 完全可以开发 Qt 鸿蒙应用!(附专属适配方案)