[Linux] nginx防盗链与优化

news2024/11/30 10:49:37

一、Nginx的页面优化

1.1 Nginx的网页压缩 

在Nginx的ngx_http_gzip_module压缩模块提供对文件内容压缩的功能。进行相关的配置修改,就能实现Nginx页面的压缩,达到节约带宽,提升用户访问速度

 vim /usr/local/nginx/conf/nginx.conf
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 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;  #压缩类型,表示哪些网页文档启用压缩功能
}

  重启服务,进行访问测试: 

  1.2  配置Nginx的图片缓存 

Nginx在向客户端返回网页数据时,可以设置缓存时间,以便以后有相同内容的请求时直接返回。 一般来说,它是为静态网页设置的,而没有为动态网页设置缓存时间。

 vim /usr/local/nginx/conf/nginx.conf
http {
.................
 location ~* \.(png|gif|jpg|jepg|bmp|ico|mp3|mp4)$ {  #匹配任意以以下格式为结尾的文件
             root html;
             expires 30m;       #缓存时间设置为30分钟   
         }
}

重启服务,测试访问:  

 1.3  Nginx的连接超时设置 

HTTP有一个keepalive模式,它告诉web服务器在处理请求后保持TCP连接打开。如果收到来自同一客户端的其他请求,则服务器利用未关闭的连接而不建立另一个连接。

Keepalives保持开放一段时间,并在此期间消耗资源。服用太多会影响性能。

在企业网站上,可以通过设置相应的连接超时参数来控制连接访问时间,避免同一客户长时间占用连接造成资源浪费。您可以更改配置文件nginx.conf,设置keepalive_timeout超时。

vim /usr/local/nginx/conf/nginx.conf
 http {
 ...... 
     keepalive_timeout 60 180;       //设置连接超时时间    
     client_header_timeout 80;
     client_body_timeout 80;
 ...... 
 }

 指定KeepAlive的超时(超时)。如果指定每个TCP连接可以持续的最长时间,则服务器在此时间之后关闭连接。

Nginx的默认值是65秒,有些浏览器最多只持有60秒,所以可以设置为60秒。如果设置为0,则保持活动状态连接将被禁用。

第二个参数(可选)指定响应标头中keep-Alive:timeout=t ime的时间值。此标头允许您在某些浏览器中主动关闭连接,以便服务器不必关闭连接。没有这个参数,Nginx不会发送Keep-Alive响应头。

 重启服务,访问测试:

 1.4 Nginx的并发设置

 在高并发场景,需要启动更多的Nginx进程以保证快速响应,以处理用户的请求,避免造成阻塞。

 查看cpu的核心数,根据核心数来设置工作进程数

 #查看cpu核数
 cat /proc/cpuinfo |grep processor|wc -l
 或
 cat /proc/cpuinfo |grep -c processor
 或
 cat /proc/cpuinfo | grep -c "physical id"
 [root@CXK html]#ps aux | grep nginx

 修改工作进程核心数 :

vim /usr/local/nginx/conf/nginx.conf
 worker_processes  2;        #修改为与CPU核数相同或者auto
 worker_cpu_affinity 01 10;  #设置每个进程由不同cpu处理,进程数配为4时0001 0010 0100 1000
 ​

测试结果: 

二、Nginx安全 

2.1 查看版本号

   方式一:curl模拟访问获取
curl -I 192.168.136.100

   方式二:浏览器访问查看  

2.2 隐藏版本号  

方法一:修改配置文件,关闭版本号 
 vim /usr/local/nginx/conf/nginx.conf
 http {
     include       mime.types;
     default_type  application/octet-stream;
     server_tokens off;      #添加这一行,关闭版本号
     ......
 }
 

 测试结果:

方法二:修改源码文件中的版本号,重新编译安装 
cp nginx.h nginx.h.bak
vim /opt/nginx-1.24.0/src/core/nginx.h
#define NGINX_VERSION "1.2.3.4" 					#修改版本号
#define NGINX_VER "apache/" NGINX_VERSION 			#修改服务器类型

修改完配置后切换到Nginx软件包中,进行重新编译安装 :

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

 

 再次修改主配置文件,打开版本号显示 :

vim /usr/local/nginx/conf/nginx.conf
 http {
     include       mime.types;
     default_type  application/octet-stream;
     server_tokens on;
     ......
 }
 

   重启服务,进行测试:

 

 三、Nginx的日志分割

  1.编写日志分割脚本 
cd /opt
vim cutlogs.sh
 
 
#!/bin/bash
 
#nginx 分割日志脚本
#用变量day获取前天日期的时间记录
day=$(date -d "-1 day" "+%Y%m%d")
#获取日志的目录
logs_path="/var/log/nginx"
#获取运行时nginx的进程号
pid_path="/usr/local/nginx/logs/nginx.pid"
#二元表达式,如果前面不成立则执行后面的式子
#前面判断该目录是否存在,后面则表示不存在则自动创建该目录
[ -d $logs_path ] || mkdir -p $logs_path
#将生成的日志按照date生成的时间格式改名并移动到指定的路径中保存
mv /usr/local/nginx/logs/access.log ${logs_path}/access.log-$day
#重新生成一个新的日志
kill -USR1 $(cat $pid_path)
#日志文件清理,将30天前的日志进行清除
find $logs_path -mtime +30 -delete
 2. 执行脚本进行测试

3. 将日志脚本添加至计划性任务 
crontab -e

四、Nginx防盗链 

4.1 Nginx防盗链的设置 

1.修改主配配置文件,添加防盗链设置
 vim /usr/local/nginx/conf/nginx.conf
http {
...........
server{
...........
location ~* \.(jpg|gif|swf|png)$ {
         root  html;
         expires 1d;                 
         valid_referers none blocked *.cxk.com cxk.com;   #设置信任的网站,可以正常使用图片;#*.test.com:只允许来自指定域名的请求访问资源 ;#blocked: 允许不是http://开头的,不带协议的请求访问资源
                        #none: 允许没有http refer的请求访问资源 (根据Referer的定义,它的作用是指示-请求是从哪里链接过来的,如果直接在浏览器的地址栏中输入一个资源的URL地址,那么这种请求是不会包含 Referer 字段的)
         if ( $invalid_referer ) {   
           rewrite ^/ http://www.cxk.com/error.jpg;
           }
        }
............
}
...............
}

2.在 /var/local/nginx/html 下放置好error.png  

3.进行盗链测试 

  盗链主机html网页设置: 

 4.第三方用户访问盗链主机:

访问前设置:

1.关闭防火墙工具firewalld和selinux

2.将域名对应的IP添加到  /etc/hosts 中 

 五、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-fpm
 netstat -anpt | grep 9000

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

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

相关文章

【trino权威指南】使用trino详解:trino client安装、查询sql、DBeaver连接trino、java通过JDBC连接trino

文章目录 一. Trino CLI1. 安装client2. 使用client执行sql 二. JDBC driver 连接Trino1. 通过DBeaver用户界面连接2. JDBC Driver in java2.1. 环境配置2.2. 注册和配置driver2.3. 连接参数2.4. 查询例子 一. Trino CLI 1. 安装client Trino CLI提供了一个基于终端的交互式s…

Linux权限命令详解

Linux权限命令详解 文章目录 Linux权限命令详解一、什么是权限?二、权限的本质三、Linux中的用户四、linux中文件的权限4.1 文件访问者的分类(人)4.2 文件类型和访问权限(事物属性) 五、快速掌握修改权限的做法【第一种…

【刷题篇】动态规划(六)

文章目录 1、最大子数组和2、环形子数组的最大和3、乘积最大子数组4、乘积为正数的最长子数组长度5、 等差数列划分6、最长湍流子数组 1、最大子数组和 给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素)&…

Cache替换算法

目录 一. 随机算法(RAND)二. 先进先出算法(FIFO)三. 近期最少使用算法(LRU)四. 最不经常使用算法(LFU) 要解决的问题: Cache很小,主存很大。如果cache满了怎么办? \quad 也要关注各种算法的英文缩写 \quad 一. 随机算法(RAND) \quad 随机算法―一实现简…

Qt优秀开源项目之十九:跨平台记事本Notes

官网:https://www.get-notes.com github:https://github.com/nuttyartist/notes 一.特性 1.完全基于Qt和C 2.完全开源和跨平台(Linux、macOS、Windows) 3.运行速度快,界面美如画 4.支持Markdown 5.支持使用嵌套文件夹…

C# 任务并行类库Parallel调用示例

写在前面 Task Parallel Library 是微软.NET框架基础类库(BCL)中的一个,主要目的是为了简化并行编程,可以实现在不同的处理器上并行处理不同任务,以提升运行效率。Parallel常用的方法有For/ForEach/Invoke三个静态方法…

Ubuntu安装向日葵【远程控制】

文章目录 引言下载向日葵安装向日葵运行向日葵卸载向日葵参考资料 引言 向日葵是一款非常好用的远程控制软件。这一篇博文介绍了如何在 Ubuntu Linux系统 中安装贝瑞向日葵。🏃💥💥💥❗️ 下载向日葵 向日葵官网: https://sunl…

Springboot自定义start首发预告

Springboot自定义start首发预告 基于Springboot的自定义start , 减少项目建设重复工作, 如 依赖 , 出入参包装 , 日志打印 , mybatis基本配置等等等. 优点 模块化 可插拔 易于维护和升级 定制化 社区支持(后期支持) 发布时间 预告: 2023-12-10 预计发布: 2024-1-1 , 元旦首…

鸿蒙应用开发ArkTS基础组件的使用

语雀知识库地址:语雀HarmonyOS知识库 飞书知识库地址:飞书HarmonyOS知识库 本文示例代码地址:Gitee 仓库地址 嗨,各位好呀,我是小白 上一篇文章我为大家介绍了如何使用 ArkTS 开发鸿蒙应用,对 HarmonyOS 项…

【IDEA】解决mac版IDEA,进行单元测试时控制台不能输入问题

我的IDEA版本 编辑VM配置 //增加如下配置,重启IDEA -Deditable.java.test.consoletrue测试效果

2023最新最全【Wireshark 】 安装教程(附安装包)

简介 wireshark是非常流行的网络封包分析工具,功能十分强大。可以截取各种网络封包,显示网络封包的详细信息。使用wireshark的人必须了解网络协议,否则就看不懂wireshark了。 为了安全考虑,wireshark只能查看封包,而…

【React Hooks】useReducer()

useReducer 的三个参数是可选的,默认就是initialState,如果在调用的时候传递第三个参数那么他就会改变为你传递的参数,实际开发不建议这样写。会增加代码的不可读性。 使用方法: 必须将 useReducer 的第一个参数(函数…

代码随想录算法训练营第四十天|139.单词拆分,多重背包,背包问题

139. 单词拆分 - 力扣(LeetCode) 给你一个字符串 s 和一个字符串列表 wordDict 作为字典。请你判断是否可以利用字典中出现的单词拼接出 s 。 注意:不要求字典中出现的单词全部都使用,并且字典中的单词可以重复使用。 示例 1&a…

ES6原生音乐播放器(有接口)

视频展示 ES6音乐播放器 项目介绍 GutHub地址:GitHub - baozixiangqianchong/ES6_MusicPlayer: 音乐播放器 ES6_MusicPlayer 是基于JavaScriptES6Ajax等通过原生构建的项目。能够充分锻炼JS能力。 本项目有主页、详情页、歌单页面三部分组成 ├── assets&…

【Hive】启动beeline连接hive

1、解决报错2、在datagrip上连接hive 1、解决报错 刚开始一直报错&#xff1a;启动不起来 hive-site.xml需要配置hiveserver2相关的 在hive-site.xml文件中添加如下配置信息 <!-- 指定hiveserver2连接的host --> <property><name>hive.server2.thrift.bin…

力扣思维题/经典面试题——下一个排序

https://leetcode.cn/problems/next-permutation/description/ 字节面试题&#xff0c;非常经典的逻辑思维题 1、找到第一个下降点&#xff0c;说明这个点可以变得稍微大一点以至于让整个排列变得更加大 为什么&#xff0c;仔细想想&#xff0c;后面都是倒序了怎么都不可能变得…

fijkplayer flutter 直播流播放

fijkplayer flutter 直播流播放 fijkplayer 是 ijkplayer 的 Flutter 封装&#xff0c; 是一款支持 android 和 iOS 的 Flutter 媒体播放器插件&#xff0c; 由 ijkplayer 底层驱动。 通过纹理&#xff08;Texture&#xff09;接入播放器视频渲染到 Flutter 中。 前言 目前使用…

class072 最长递增子序列问题与扩展【算法】

class072 最长递增子序列问题与扩展【算法】 code1 300. 最长递增子序列 // 最长递增子序列和最长不下降子序列 // 给定一个整数数组nums // 找到其中最长严格递增子序列长度、最长不下降子序列长度 // 测试链接 : https://leetcode.cn/problems/longest-increasing-subsequen…

Java 简易版 UDP 多人聊天室

服务端 import java.io.*; import java.net.*; import java.util.ArrayList; public class Server{public static ServerSocket server_socket;public static ArrayList<Socket> socketListnew ArrayList<Socket>(); public static void main(String []args){try{…

分集水器在中央空调系统中的应用,工作原理压力选型参数尺寸

​ 1&#xff1a;中央空调分集水器设备介绍 分集水器是由分水器和集水器组合而成的水流量分配和会集装置。分水器是将一路进水通过一个容器分为几路输出的设备&#xff0c;而集水器则是将多路进水通过一个容器一路输出的设备。其管理若干的支路管道&#xff0c;分别包括回水支路…