nginx页面优化与防盗链

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 一、nginx页面优化
    • 1.版本号
      • 1.1 查看版本号
      • 1.2 修改版本号
        • 1.2.1 修改配置文件
        • 1.2.2 修改源码文件,重新编译安装
    • 2.nginx的日志分割
    • 3.nginx的页面压缩
      • 3.1 配置
      • 3.2 验证
    • 4.图片缓存
      • 4.1 配置
      • 4.2 浏览器页面访问验证
    • 5.连接超时
      • 5.1 配置
    • 6.nginx的并发设置
      • 6.1 配置
  • 二、防盗链
    • 1.配置
    • 2.验证


一、nginx页面优化

1.版本号

对版本号进行更改的目的:可以根据nginx的版本号进行破译,因此都会隐藏后端服务应用的真实版本号

1.1 查看版本号

#使用本地服务地址查询
curl -I 192.168.245.110
HTTP/1.1 200 OK
Server: nginx/1.12.2
Date: Sun, 25 Jun 2023 01:46:29 GMT
Content-Type: text/html
Content-Length: 612
Last-Modified: Wed, 21 Jun 2023 14:23:30 GMT
Connection: keep-alive
ETag: "649307e2-264"
Accept-Ranges: bytes
#使用nginx命令查询
nginx -v
nginx version: nginx/1.12.2

1.2 修改版本号

1.2.1 修改配置文件

#切换到nginx的配置文件目录下
cd /usr/local/nginx/
cd conf/
#复制配置文件做备份
cp nginx.conf nginx.conf.bak.2023.6.25
vim nginx.conf
#关闭版本号
在http中添加server_tokens off;

#重启服务
systemctl restart nginx.service

1.2.2 修改源码文件,重新编译安装

#切换到配置文件的目录
cd /opt/nginx-1.12.2/src/core/
#进入配置文件,将配置文件的真是版本号进行修改
vim nginx.h
#define NGINX_VERSION      "whd"

#重新编译安装
cd /opt/nginx-1.12.2/
#编译安装
./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module
make && make install
#修改配置文件
cd /usr/local/nginx/conf/
vim nginx.conf
#在源码包中重新定义了版本号,则打开版本号并无影响
在http中将off需改为on打开server_tokens on;

 systemctl restart nginx.service

2.nginx的日志分割

为什么做日志分割:nginx不带日志分割的工具,因此所有的日志分割都是以shell脚本的格式来实现日志的分割

 vim nginxlog.sh

#!/bin/bash
#获取当前日期 
d=$(date +%Y-%M-%d)
#定义存储目录 
dir="/usr/local/nginx/logs/"
#定义需要分割的日志源文件 
logs_file='/usr/local/nginx/logs/access.log'
logs_error='/usr/local/nginx/logs/error.log'
#定义nginx服务的pid文件 
pid_file='/usr/local/nginx/logs/nginx.pid'
if [ ! -d $dir ]
  then
  mkdir $dir
fi
#移动日志文件access error,重新命名
mv ${logs_file} ${dir}/access${d}.log
mv ${logs_error} ${dir}/error${d}.log
#发送信号,给nginx主程序,让nginx生成新的日志文件 
kill -USR1 $(cat ${pid_file})
#日志文件清理,把30天前的日志,直接清除 
find $dir -mtime +30 -exec rm -rf {} \;

给脚本执行权限、执行

chmod 777 nginxlog.sh 
./nginxlog.sh 
cd /usr/local/nginx/logs/
ls
access2023-14-25.log  access.log           error.log
access_.log           error2023-14-25.log  nginx.pid

在这里插入图片描述
创建定时任务可以每个月固定分割一次

crontab -e -u root
0 0 1 * * /opt/nginxlog.sh

3.nginx的页面压缩

压缩的目的:为了节约宽带,提高访问速度

由ngx_http_gzip_module压缩模块所提供的功能,默认是注释掉的,不压缩,需要人工指定配置

3.1 配置

cd /usr/local/nginx/conf/
vim nginx.conf
#找到gzip  on;取消注释并在下面添加
    gzip  on;
    #最小的压缩文件,小与1K就不再压缩了
    gzip_min_length 1k;
    #压缩的缓冲区,4个64K缓冲区
    gzip_buffers 4 64K;
    #压缩版本,默认1.1
    gzip_http_version 1.1;
    #压缩级别1-9,6不大不小,不快不慢,正好
    gzip_comp_level 6;
    #支持前段缓存服务器的压缩功能打开
    gzip_vary on;
    #支持压缩的类型
   gzip_types text/plain text/javascript application/x-javascript text/css text/xml application/xml application/xmltrss image/jpgmage/ipeg image/png image/gif application/x-httpd-php application/iavascriot application/json;

#检查配置文件、重启服务
nginx -t
systemctl restart nginx

3.2 验证

在这里插入图片描述

4.图片缓存

作用:避免重复访问,导致访问速度变慢,加快访问的时间,主要针对静态页面,动态不设置缓存时间

4.1 配置

vim nginx.conf
#在location ~ \.php$下面添加一个新的,location ~*支持正则匹配,\.转义符,以.gif|jpg|jepg|bmp|ico开头的都文件可以压缩
location ~* \.(gif|jpg|jepg|bmp|ico)$ {
#指定根目录的html,就是/usr/local/nginx/html,指定默认静态页面
             root html;
#设定图片缓存时间为1天
             expires 1d;
}


nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
systemctl restart nginx

4.2 浏览器页面访问验证

清理缓存,查看304就是缓存
在这里插入图片描述
再次清理缓存就是200,没有缓存
在这里插入图片描述
再次刷新又会变成304即是加载的缓存

图片缓存一天:

在这里插入图片描述

5.连接超时

http自带keepalive模式,keepalive为缓存记录时间,(web加大用户访问速度)

web服务器外理完一个请求之后,保持tcp许接,接受到同样的客户端的其他请求时,web服务器就会利用这个未关闭的连接,继续提供相应,不需要再新建连接了keepalive:在一段时间之内保持打开状态,他会占用资源,占用过多资源,影响整体性能。

连接保持,设置取恰当的范围,不可太长(占用资源),不可太短(第二次访问不快

5.1 配置

vim nginx.conf
#keepalive_timeout  65;的意思是指定的tcp连接最多只能保持65秒,在65秒之后,服务器就会关闭连接(nginx默认65秒。一般浏览器都是60秒,可以指定时间,一般60s,如果设置0,nginx就不会在发送包含keepalive的相应头)
#将65修改为60,60s之后关闭连接
keepalive_timeout  60;
#客户端向服务端发送一个完整的请求头的超时时间
client_header_timeout 60;
#客户端向服务端发送一个完整的请求体的超时时间,没有在60s内向web服务器请求发送任何内容,nginx会返回错误代码408——请求超时
client_body_timeout 60;

nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
systemctl restart nginx

6.nginx的并发设置

目的:有很多场景会涉及到高并发,高并发场景是需要进行优化的,需要启动更多的nginx进程,以保证快速响应,处理用户请求,避免阻塞,根据核心数计算:有几个cpu(查看cpu数可以使用命令:cat /proc/cpuinfo | grep processor | wc -l)

nginx工作的核心数和服务器内核之间要么一致,要么是核心数的2倍,如有16个内核,最多给8个,超过8个性能不在提升且会降低稳定性,8个是上限

6.1 配置

vim nginx.conf
#指定内核数,本服务器内核是4个,可给4个
worker_processes  4;
#指定工作的内核编号指定第一个和第二个,要么用第一个,要么用第二个(此处cpu是按二进制排列,第一个表示为0001,第二个为0010,第三个为0100,第四个为0000)
worker_cpu_affinity 01 10 100 0;


nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
systemctl restart nginx

二、防盗链

目的:防止别人盗用网站的图片,一旦使用会回复正在盗用图片,不可以用

1.配置

vim /usr/local/nginx/conf/nginx.conf
location ~ .*\.(gif|jpg|swf|png)$ {
#允许访问不加http直接地址,不加协议请求访问资源,此处*.whd.com whd.com设置信任的网站可以正常使用图片文件
                   valid_referers none blocked www.baidu.com;
#如不是受信任网站                
                   if ( $invalid_referer ) {
#直接返回403
                  return 403;
                }               
}

nginx -t
systemctl restart nginx

cd /usr/local/nginx/html

使用一张6.jpg图片传到当前目录下用于验证
在这里插入图片描述

2.验证

虽然在html中的文件进行了防盗配置,但是还是访问的时候会出来图片,并不是403报错,这是因为:这种形式的访问是直接请求服务器中默认html中的6.jpg文件,是没有头部的(只有二次以上请求才会有referer头部),并且我们在配置文件中添加了[none]这个参数,它的含义就是当我们在没有头部referer时,依然能访问到文件,所以我们配置的防盗链在这个时候是不起作用的。

将none参数去掉验证效果
在这里插入图片描述

systemctl restart nginx

再次访问就会有返回错误
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ENSP模拟器如何设置命令行和描述框的背景颜色及字体

ENSP模拟器如何设置命令行和描述框的背景颜色及字体 选择“菜单 > 工具 > 选项”, 在弹出界面中选择“字体设置”。 单击“字体”后的“选择”设置字体,单击“字体颜色”后的“选择”设置字颜色,单击“背景颜色”后的“选择”设置…

【数据结构】从树到二叉树

目录 ​编辑 一. 前言 二. 树的概念及结构----凉拌海带 2.1 什么是树 2.2 树的基本术语 2.3 树的表示 2.4 树在实际生活中的应用 二. 二叉树的概念及结构----扬州炒饭 2.1 什么是二叉树 2.2 二叉树两种特殊形式 2.3 二叉树的性质 2.4 二叉树的存储结构 三. 链式二叉树基本操…

I/O模型

目录 一、I/O基本概念同步和异步阻塞和非阻塞线程在运行过程中,可能由于以下几种原因进入阻塞状态:可能阻塞套接字的Linux Sockets API调用分为以下四种 二、五种I/O模型阻塞I/O模型非阻塞式I/O模型I/O多路复用模型信号驱动式I/O模型异步I/O模型 三、五种…

On the Properties of Neural Machine Translation: Encoder–DecoderApproaches

摘要 Neural machine translation : 神经机器翻译。 神经机器翻译模型经常包含编码器和解码器:an encoder and a decoder. 编码器: 从一个变长输入序列中提取固定长度的表示。a fixed-length representation. 解码器:从表示中…

C语言图书管理系统

一,开发环境 操作系统:windows10, windows11, linux, mac等。开发工具:Qt, vscode, visual studio等开发语言:c 二,功能需求 1. 图书信息管理: 这个功能的主要任务是保存和管理图书的所有信息。这应该包…

(超级详细)如何在Mac OS上的VScode中配置OpenGL环境并编译

文章目录 安装环境下载GLAD与GLFW一、下载GLAD二、下载GLFW 项目结构配置测试程序与项目的编译测试可执行文件HelloGL 安装环境 机器:macbook air 芯片: M1芯片(arm64) macOS:macOS Ventura 13.4 VScode version&#…

天台玻璃折叠门可实现室内外空间的无缝连接

天玻璃折叠门是指安装在天台上的可折叠开合的玻璃门,可用于将室外空间与室内空间进行隔离或连接。设计天台玻璃折叠门时需要注意以下几点: 1. 结构稳固性:选择坚固、稳定的材料和结构设计,确保门体在风力和其他外力作用下不易摇晃…

HTTP第18讲——HTTP的缓存控制

诞生背景 由于链路漫长,网络时延不可控,浏览器使用 HTTP 获取资源的成本较高。所以,非常有必要把“来之不易”的数据缓存起来,下次再请求的时候尽可能地复用。这样,就可以避免多次请求 - 应答的通信成本,节…

37.RocketMQ之Broker消息存储源码分析

highlight: arduino-light 消息存储文件 rocketMQ的消息持久化在我们在搭建集群时都特意指定的文件存储路径,进入指定的store目录下就可以看到。 下面介绍各文件含义 CommitLog 存储消息的元数据。produce发出的所有消息都会顺序存入到CommitLog文件当中。 CommitLog由多个文件…

哈达玛矩阵乘法

哈达玛矩阵乘法 作者: 赵晓鹏时间限制: 1S章节: 递归与分治 输入说明 : 见问题描述。 输出说明 : 见问题描述。 输入范例 : 1 4 -6 输出范例 : -2 10 #include <iostream> #include <vector> using namespace std; vector<int>res; void cal(int len…

SpringBoot2+Vue2实战(十六)vue集成视频播放组件

修改文件上传大小限制 servlet:multipart:max-file-size: 100MBmax-request-size: 100MB Video.vue <template><div style"padding: 10px"><el-card><div v-for"item in videos" :key"item.id"style"margin: 10px 0…

8266使用巴法云OTA

为了使用方便把OTA封装一下为以下类 #include "ESP8266HTTPUpdate.h"class OTA { private:ESP8266HTTPUpdate httpUpdate;// using HTTPUpdateStartCB std::function<void()>;void OnStartCB(){Serial.println("开始OTA升级");}// using HTTPUpdat…

OpenCV图像金字塔pyrDown下采样

#include <opencv2/opencv.hpp> #include <opencv2/imgproc/imgproc.hpp>using namespace cv;int main() {// Load the original imageMat srcImage

Jina AI 受邀出席 WAIC 2023「科技无障碍」论坛,与行业专家共话 AI 普惠未来

7 月 6 日&#xff0c;2023 世界人工智能大会&#xff08;WAIC&#xff09;在上海世博中心及世博展览馆开幕&#xff0c;并在浦东张江、徐汇西岸设分会场&#xff0c;同步在闵行等产业集聚区开展同期活动。本届大会由上海市人民政府和国家发改委、工信部、科技部、国家网信办、…

【群智能算法】猎人猎物优化算法 HPO算法【Matlab代码#48】

文章目录 【获取资源请见文章第4节&#xff1a;资源获取】1. 猎人猎物优化算法&#xff08;HPO&#xff09;2. 部分代码展示3. 仿真结果展示4. 资源获取说明 【获取资源请见文章第4节&#xff1a;资源获取】 1. 猎人猎物优化算法&#xff08;HPO&#xff09; 猎人猎物优化算法…

【小沐学C++】libcurl实现HTTP/HTTPS请求

文章目录 1、简介2、下载和编译2.1 下载2.2 编译2.3 使用 3、命令行测试3.1 获取文件头Headers3.2 请求内容Request Content3.3 响应内容Response Content3.4 GET请求3.5 POST请求3.6 其他 4、代码测试3.1 simple.c3.2 url2file.c3.3 simplepost.c3.4 resolve.c3.5 progressfun…

Java语言程序设计试卷6套

目录 Java语言程序设计试卷1 一、单项选择题 二、多项选择题 三、判断题 Java语言程序设计试卷2 一、单项选择题 二、多项选择题 三、判断题 Java语言程序设计试卷3 一、单项选择题 二、多项选择题 三、判断题 Java语言程序设计试卷4 一、单项选择题 二、多项选…

PROFINET转ETHERNET/IP网关西门子通讯协议profinet

大家好&#xff0c;今天我们来聊一款令人兴奋的产品——远创智控YC-PN-EIP&#xff01;它是一款自主研发的 PROFINET 从站功能的通讯网关&#xff0c;可以将 PROFINET网络和ETHERNET/IP 网络连接起来&#xff0c;实现数据传输和交换。但这只是它的基础功能&#xff0c;它还有哪…

HTTP与HTTPS

HTTP与HTTPS介绍 超文本传输协议HTTP协议被用于在Web浏览器和网站服务器之间传递信息&#xff0c;HTTP协议以明文方式发送内容&#xff0c;不提供任何方式的数据加密&#xff0c;如果攻击者截取了Web浏览器和网站服务器之间的传输报文&#xff0c;就可以直接读懂其中的信息&…

【面试题27】Redis中的connect和pconnect如何使用,有什么区别

文章目录 一、背景二、connect函数三、pconnect函数四、区别和使用场景五、总结 一、背景 本文已收录于PHP全栈系列专栏&#xff1a;PHP面试专区。 计划将全覆盖PHP开发领域所有的面试题&#xff0c;对标资深工程师/架构师序列&#xff0c;欢迎大家提前关注锁定。 Redis是一个开…