nginx优化和防盗链

news2024/11/20 15:25:26

nginx优化

1.nginx隐藏版本号

因为是一个高性能,轻量级的工具吗,更新版本速度很快,功能很强大但是BUG很多,很容易被攻破,所以需要隐藏版本号来减少服务器被攻击的威胁。

隐藏版本号的第一步就是如何查看版本号

curl -I 本机IP

如何修改?

方法一:

http大模块修改

修改方式:

​​​​​​​server_tokensoff

方法二:修改源码文件,然后重写编译安装

vim nginx.h

然后编译安装: make && make install

最后进入 vim nginx.conf

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

重起服务即可

nginx日志分割

nginx没有自带的日志分隔功能,所以需要靠运维人员通过脚本实现日志分割

编写脚本:

按照时间来进行分隔,每天都生成一个新的日志
获取日期

d=$(date +%Y-%m-%d)

找到nginx日志的存储位置

dir="/usr/local/nginx/logs"

定义日志分隔
logs_file='/usr/local/nginx/logs/accsee.log'
logs_error='/usr/local/logs/error.log'

定义nginx的pid文件
pid_file='/usr/local/nginx/run/nginx.pid'

if [ ! -d "$dir" ]
then
  mkdir -p $dir
fi

移动日志并重命名

mv ${logs_file}   ${dir}/access_${d}.log

#mv /usr/local/nginx/logs/access.log    /use/local/nginx/logs/access_2.23-10-12.log

mv  ${logs_error}  ${dir}/error_${d}.log

发送信号给nginx的主进程,让nginx重新生成一个新的日志文件

kill  -USR1  $(cat  ${pid_file})

USER1 生成一个新的日志      cat  /usr/local/nginx/run/nginx.pid



日志清理  日志清理原则:业务日志一般保留30天,数据库日志保留2年,用户信息要加密且永久保存,而且高可用

若最近无重大事项,业务日志保留10天也可以,前提是申请批准



find $dir -mtime +30 -exec rm -rf {} \;
设置权限
chmod 777 /opt/nginxlog.sh

设置定时任务

0 1 * * * /opt/nginxlog.sh

3.nginx网页压缩

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

gzip  on;
开启压缩功

    gzip_min_length 1k;
如果文件大小是1k就不进行压缩处理

    gzip_comp_level 6;
压缩级别:压缩比率  1-9    1是速度快,压缩比最低,9是速度慢,压缩比最高,默认是1
    
    gzip_vary on;
前端的缓存也可以支持压缩
   
    gzip_types text/plain image/jpg test/css test/xml image/gif;
压缩类型

4.nginx图片的缓存时间

可以在日后访问时,不需要经常的向后台请求,加快访问速度

一般都是针对静态页面,动态页面一般不设置缓存时间

vim nginx.conf

 location ~* \.(gif|jpg|jepg|bmp|ico)$ {
        root html;
        expires 1d;

}

5.nginx连接超时

HTTP有一个KeepAlive模式,它告诉web服务器在处理完一个请求后保持这个TCP连接的打开状态。若接收到来自同一客户端的其它请求,服务端会利用这个未被关闭的连接,而不需要再建立一个连接。


KeepAlive 在一段时间内保持打开状态,它们会在这段时间内占用资源。占用过多就会影响性能。


在企业网站中,为了避免同一个客户长时间占用连接,造成资源浪费,可设置相应的连接超时参数,实现控制连接访问时间。可以修改配置文件 nginx.conf,设置 keepalive_timeout超时。

vim nginx.conf


 http {
 ...... 

     keepalive_timeout 65 180;       //设置连接超时时间    
     client_header_timeout 80;
客户端向服务端发送一个完整request header的超时间,如果客户端在80秒内没有发送一个完整的请求头,nginx将会返回408,request time out

     client_body_timeout 80;
客户端于服务器建立连接之后发送request body的超时时间
80秒内客户端没有发送任何内容,nginx 408 request time out
 ...... 
 }

6.nginx的并发设置

在高并发的场景下,需要nginx启用更多的进程来保证快速响应

根据cpu的核心数,可以调整nginx的工作进程数

查看cpu核数

cat /proc/cpuinfo | grep processor | wc -l

vim nginx.conf

#user  nobody;
worker_processes  1;

尽量不要超过8个,8个以上不会对性能提升,会适得其反,一般设置为cpu核数的一半

修改一下进程数和连接数。

worker_process 4;和 event里的 worker_connections 15000;里面的数字相乘就是一共进程数。

二者乘积为最大并发数

注意:别忘了修改limits.conf的文件限制

绑定cpu:

#user nobody;
       worker_processes 1;
       worker_cpu_affinity 0001 0010 0100 1000;
       把进程绑定到CPU上,减少CPU的切换,提高效率
}

TIME_WAIT大量出现,改如何优化

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

time-wait是tcp连接状态的一种状态,不是报错,出现在四次挥手之后

在time_wait这个状态下,tcp处于连接等待状态,等待有一个持续时间,http 1.1 会话保持

1.确保可靠的关闭连接

2.避免连接复用

他在连接正常关闭之后,一段时间之后,它会自动消失,而且占用的资源很少,对服务器影响是有限的。

如果太多,则进内核文件修改

net.ipv4_tcp_syncookies = 1
表示SYN等待队列溢出时,启用cookies处理syn队列

net.ipv4_tcp_tw_reuse = 1
time_wait 状态可以重用,一个连接就占用一个端口,time_wait把所有端口占满了,新的连接请求也不会拒绝。

net.ipv4_tcp_tw_recycle = 1
让time_wait 尽快回收

net.ipv4_tcp_fin_timeout = 60
所有time_wait 最大生命周期60s

nginx的内置变量:打印结果

$remote_addr 客户端IP地址

下载形式出现

location / {
            root   html;
            index  index.html index.htm;
            return 200 "ip:$remote_addr";
        }

\n后面可以追加多个

$remote_port #显示客户端的端口号

$url

#显示请求的url

/是nginx的家目录

$host

#显示请求的主机名

$request_method 显示请求方法

重要的变量配置


proxy_set_header X-Forwarded-for $remote_addr #代理服务器设置这个变量,客户端的真实ip要发送给后端,否则代理服务器地址会被拉入黑名单。

proxy_set_header X-Real-IP $remote_addr #客户端的真实ip,发送给后端,现在所有网站都会要求客户端请求时,加上真实ip。例如:微信,微博,B站,都会显示IP地址。
 

nginx设置防盗链

准备两台服务器

systemctl stop firewalld

setenforce 0

systemctl restart nginx

test1是主站

test2是副站

vim nginx.conf


server {
        listen       80;
        server_name  www.abc.com;

        #charset koi8-r;
        charset utf-8;

        #access_log  logs/host.access.log  main;

        location / {
            root   html;
            index  index.html index.htm;
        }
        location ~* \.(jpg|gif)$ {
            root html;
            valid_referers none blocked *.abc.com abc.com;
        #valid_referers:设置信任的网站,即 abc.com
        #none:允许没有http_refer的请求访问资源,请求的url里面可以不包含refer,www.abc.com就可以直接访问 www.abc.com/aaa.jpg
        #blocked:请求网站时,前面可以不带协议(http)。
            if ( $valid_referer ) {
               rewrite ^/ http://www.sbc.com/error.png'
}
             #如果连接资源是来自上面valid_referers定义的信任列表,$valid_referer变为true,执行重定向

systemctl restart nginx

vim index.html #写入内容

域名访问一定要做映射!!!

test2:

同样得做映射

访问即可

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

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

相关文章

蓝桥杯每日一题2023.10.15

数列求值 - 蓝桥云课 (lanqiao.cn) 题目描述 题目分析 我们发现如果一项一项相加会造成结果过大从而答案错误&#xff0c;所以我们每次只需要取后四位经行计算即可 #include<bits/stdc.h> using namespace std; int a[20190329]; int main() {a[1] 1, a[2] 1, a[3]…

Flutter 剪裁(Clip)

&#x1f525; ClipOval &#x1f525; 子组件为正方形时剪裁成内贴圆形&#xff1b;为矩形时&#xff0c;剪裁成内贴椭圆 裁剪纯色背景 ClipOval(child: Container(width: 300.w,height: 300.w,decoration: const BoxDecoration(color: Colors.red),),), 裁剪背景图片 裁剪前…

17.SpringBoot前后端分离项目之简要配置二

如何配置前端请求和后端响应&#xff08;2&#xff09; 登录接口 前端&#xff1a; 后端控制器&#xff1a; 在My3Controller RequestMapping("/login") public ResponseBody RestObject login(RequestBody UserUI userUI){System.out.println("login方法&…

Linux第六章-Vi和Vim编辑器

vi和vim的基本介绍 Linux系统会内置vi文本编辑器 vim具有程序编辑的能力&#xff0c;可以看做是vi的增强版本。 vi和vim的三种模式 正常模式 以vim打开一个档案就直接进入一般模式了&#xff08;这是默认的模式&#xff09;。在这个模式中&#xff0c;可以使用上下键来移动…

模拟实现字符串函数(5): strncpy

1.函数介绍 拷贝num个字符从源字符串到目标空间。 如果源字符串的长度小于num&#xff0c;则拷贝完源字符串之后&#xff0c;在目标的后边追加0&#xff0c;直到num个 strncpy与strcpy的作用是一样的&#xff0c;区别在于strncpy指定了复制字符的个数。 2.思路分析 这里多了…

管理系统搭建一般步骤(会话跟踪 路由导航守卫 响应拦截器)

1&#xff0c;vue-cli进行项目搭建 2&#xff0c;使用ELement-UI 3&#xff0c;使用vue组件路由 4&#xff0c;点击登录&#xff0c;向后端进行账号密码比对 三种情况&#xff1a; 密码有误 服务器忙 密码正确。 具体步骤&#xff1a; 首先写好前端一个大体框架&#xf…

深度强化学习第 1 章 机器学习基础

1.1线性模型 线性模型&#xff08;linear models&#xff09;是一类最简单的有监督机器学习模型&#xff0c;常被用于简单的机 器学习任务。可以将线性模型视为单层的神经网络。本节讨论线性回归、逻辑斯蒂回归&#xff08;logistic regression&#xff09;、 softmax 分类器等…

Windows 中环境变量的查看与设置

接触了LLM应用开发后&#xff0c;经常要用到环境变量的设置&#xff08;openAI apikey啥的&#xff09; 但是老忘记&#xff0c;今天来学习和总结一下 主要用到以下几种&#xff1a;使用 PowerShell、CMD 和 Python 来查看和设置环境变量 文章目录 1. PowerShell查看环境变量&a…

掌握深入挖掘数据本质的方法

文章目录 掌握深入挖掘数据本质的方法1. 确定数据类型2. 数据清洗3. 数据可视化4. 探索性数据分析5. 特征工程6. 机器学习算法7. 自然语言处理 &#x1f4d5;我是廖志伟&#xff0c;一名Java开发工程师、Java领域优质创作者、CSDN博客专家、51CTO专家博主、阿里云专家博主、清华…

C语言:冒泡排序

C语言 基础开发----目录 冒泡排序 1. 原理 对一个有n个数据的数组进行遍历&#xff0c;依次对相邻两个数据进行比较大小&#xff0c;若大的数据在前面则交换位置&#xff08;升序&#xff09;&#xff0c;完成一次遍历后数组中最大的数据到了数组的末尾位置&#xff0c;就象水…

六、RocketMQ发送事务消息

事务消息介绍 在一些对数据一致性有强需求的场景&#xff0c;可以用 Apache RocketMQ 事务消息来解决&#xff0c;从而保证上下游数据的一致性。 以电商交易场景为例&#xff0c;用户支付订单这一核心操作的同时会涉及到下游物流发货、积分变更、购物车状态清空等多个子系统的…

MySQL有时候命中索引有时候又不命中

索引失效的情况 -----可能 索引主要看where 、group by 、order by 1.组合索引不遵循最佳左前缀法制。最佳左前缀法制&#xff1a;如果索引了多列&#xff0c;要遵循最左前缀法则&#xff0c;指的是查询从索引的最左前列开始并且不跳过索引中的列。如组合索引为A B C 只有ABC,A…

【蓝桥】数树数

一、题目 1、题目描述 给定一个层数为 n n n 的满二叉树&#xff0c;每个点编号规则如下&#xff1a; 具体来说&#xff0c;二叉树从上往下数第 p p p 层&#xff0c;从左往右编号分别为&#xff1a;1,2,3,4&#xff0c;…, 2p-1。 给你一条从根节点开始的路径&#xff0…

Node.js初体验

Node.js简介 node.js的运行环境 1.V8引擎对js代码进行解析与执行 2.内置API&#xff1a;fs、path、http...等&#xff0c;提供了一些能力&#xff0c;能够使得js调用这些API去做一些后端的事情 流程&#xff1a;我们在node.js的运行环境中编写待执行的JavaScript代码&#…

Spring Cloud Gateway 使用 Redis 限流使用教程

从本文开始&#xff0c;笔者将总结 spring cloud 相关内容的教程 版本选择 为了适应 java8&#xff0c;笔者选择了下面的版本&#xff0c;后续会出 java17的以SpringBoot3.0.X为主的教程 SpringBoot 版本 2.6.5 SpringCloud 版本 2021.0.1 SpringCloudAlibaba 版本 2021.0.1.…

单目3D目标检测——MonoCon 模型训练 | 模型推理

本文分享 MonoCon 的模型训练、模型推理、可视化3D检测结果、以及可视化BEV效果。 模型原理&#xff0c;参考我这篇博客&#xff1a;【论文解读】单目3D目标检测 MonoCon&#xff08;AAAI2022&#xff09;_一颗小树x的博客-CSDN博客 源码地址&#xff1a;https://github.com/2…

在vs code中创建一个名为 “django_env“ 的虚拟环境报错?!以下或许方法可以解决

# vs code 终端窗口中运行&#xff1a; mkvirtualenv django_env # 拓展&#xff1a; mkvirtualenv django_env 是一个命令&#xff0c;用于创建一个名为 "django_env" 的虚拟环境。虚拟环境是一种用于隔离不同Python项目所需依赖的工具。通过创建虚拟环境&#x…

【分布式计算】九、容错性 Fault Tolerance

分布式系统应当有一定的容错性&#xff0c;发生故障时仍能运行 一些概念&#xff1a; 可用性Availability&#xff1a;系统是否准备好立即使用 可靠性Reliability&#xff1a;系统连续运行不发生故障 安全性&#xff1a;衡量安全故障的指标&#xff0c;没有严重事件发生 可维护…

zabbix内置宏、自动发现与注册

一、zabbix内置宏 1、概念&#xff1a; 在Zabbix中&#xff0c;内置宏是一种特殊的变量&#xff0c;通常用在 Trigger 名称和表达式中&#xff0c;引用有关监控对象的信息。 2、种类&#xff1a; {HOST.NAME} 主机名 {HOST.IP} 主机 IP 地址 {TRIGGER.DESCRIPTION} 触…