Nginx的优化和防盗链(面试高频!!!)

这篇具有很好参考价值的文章主要介绍了Nginx的优化和防盗链(面试高频!!!)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Nginx的优化和防盗链

全篇高能!!!!干货较多!!!!本篇含面试高频题:

修改配置文件时,先备份!!!以便回滚!!!
nginx页面优化
一、隐藏版本号:
方法一:修改配置文件

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

在http模块中,添加一个命令:

server_tokens off;

方法二:在源码包中修改(达到混淆入侵者的目的)

vim /opt/nginx-1.22.0/src/core/nginx.h
#define NGINX_VERSION "1.1.1" #修改版本号
 #define NGINX_VER "burun/"
  NGINX_VERSION

二、nginx的日志分割:
因为nginx不带日志分割工具,所以需要使用脚本形式来进行日志分割。
脚本文件

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/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 /usr/local/nginx/logs/access_2023-08-05.log
mv $logs_error ${dir}/error_${d}.log

#用kill发送信号给nginx主程序,生成一个新的日志文件

kill -USR1 $(cat ${pid_file})
#cat /usr/local/nginx/run/nginx.pid

#日志文件清理的命令,清理过期文件
find ${dir} -mtime +30 -exec rm -rf {} \;

三、nginx的页面压缩:
主要作用:节约带宽,提升用户的访问速度
注意:nginx压缩的功能是默认自带的,但是如果需要压缩细节,需要打开gzip的注释,然后进行配置。
修改配置文件:

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

Nginx的优化和防盗链(面试高频!!!),nginx,chrome,运维

gzip on;                       #取消注释,开启gzip的压缩功能
    gzip_min_length 1k;        #最小压缩文件的大小      
    gzip_buffers 4 64k;        #压缩缓冲区,大小为4个64K缓冲区,Nginx 会使用 4 个 64KB 大小的缓冲区来存储压缩后的数据。
    gzip_http_version 1.1;     #压缩版本,默认为1.1
    gzip_comp_level 6;         #压缩比率(压缩等级为1-96是中等等级,也是常用等级)Gzip 压缩级别的范围是 19,
	其中 1 表示压缩速度最快,但压缩比最低,9 表示压缩速度最慢,但压缩比最高。默认值为 1gzip_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;
 #压缩的类型,哪些文档启用压缩功能

四、nginx的图片缓存:
修改配置文件:

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

注意:不能加png格式,否则会陷入死循环!!
Nginx的优化和防盗链(面试高频!!!),nginx,chrome,运维

http {
.................
 location ~* \.(gif|jpg|jepg|bmp|ico)$ {
             root html;
             expires 1d;    #设置缓存时间为一天;         
         }
}

连接超时:
http1.1会有一个keepalive模式,告诉web服务器在处理完一个请求之后保持当前连接的tcp的状态,如果当前连接有新的请求,服务端就会利用这个没有关闭的连接,继续给客户端响应,不需要再建立一个新的连接。
keepalive 在一段时间只内保持打开状态,在这段时间之内还是会占用资源,占用过多会影响性能。
keepalive_timeout 65;#tcp连接最多可以保持65秒。
绝大多数企业一般会设置到60 -65
设置为0,就是禁用了keepalive功能。只要请求完成立刻关闭tcp连接。
长连接:
client_header_timeout 60;
客户端向服务端发送请求,会有一个request_header的超时时间。
如果客户端没有在60秒内发送一个完整的请求头(equest_header),nginx会返回一个408 (request timeout :请求超时)
client_body_timeout 60;
客户端没有向服务器在60s发送一个完整的请求体。nginx会返回一个408 (request timeout :请求超时)

vim /usr/local/nginx/conf/nginx.conf
http {
...... 
    keepalive_timeout 65 ;  #指定TCP链接最多可以保持65秒
    client_header_timeout 60;  #请求头
    client_body_timeout 60;    #请求体
...... 
}

五、nginx的并发设置:

在高并发的场景中,需要启动更多的nginx进程以保证响应速度,可以更快的处理用户的请求,避免造成阻塞。
1.根据cpu核心数来进行设置
查看cpu核心数:

cat /proc/cpuinfo | grep processor | wc -l
修改配置文件:
```csharp
vim /usr/local/nginx/conf/nginx.conf

设置工作进程数:
Nginx的优化和防盗链(面试高频!!!),nginx,chrome,运维

worker_processes  2;				#修改为核数相同或者2倍
worker_cpu_affinity 01 10;	

注意:在生产中worker一般设置为4,访问量不大1足够了,如果要扩展,最多8个!!,8个以上的work进程就不会提高性能了,反而会降低性能。
将work进程绑定cpu
work _cpu affinty  01 10#设置work进程绑定到指定的cpu命令,可以减少cpu切换带来的开销,确保work进程在一个独立的cpu和核心上运行
0110 是二进制数 cpu1 和cpu2 的意思
#注意:单个work进程可以不绑定cpu

如果并大量大将连接数改为10240就够用了(目前在企业中:最好的办法还是更改worker_connections 最大连接数)
Nginx的优化和防盗链(面试高频!!!),nginx,chrome,运维
并发量计算:worker_process 数 乘以 worker_connections 数
要想达到并发量值,还需要更改最大连接文件数:

1.临时:ulimit -n 65535 (linux最大只支持打开65535)
2.永久修改:vim /etc/security/limits.conf
65535 为Linux系统最大打开文件数

soft nproc 65535
hard nproc 65535
soft nofile 65535
hard nofile 65535
注意:设置保存后,需要重新ssh连接才会看到配置更改的变化。

TIME_WAIT:不是一个报错信息,是tcp连接状态中是一种状态,出现在tcp连接的四次挥手中。
当连接的一方发送fin报文,而且收到了对方的ack报文之后,就会进入time_wait
tcp处理等待的状态,是有一个持续时间,65秒,确保网络中的所有数据包都被完全处理完毕。
有两个作用:
1,确保可靠的关闭连接,如果立刻关闭连接,旧的数据包也会被处理,从而会干扰新的连接。
2.避免连接复用,time_wait时间太短,可能会导致旧的连接仍然在网络中,误认为是新连接,就会导致连接复用。
而且在连接的生命周期中,time_wait占用的资源是非常小的,而且对服务器整体性能的影响也是有限的。大量的短连接频繁创建和销毁,或者大并发连接时(负载均衡),time_wait连接会积累,服务器会出现大量的time_wait连接状态,在这种情况下需要进行优化处理。
在linux内核设置,进行优化。
查看系统的所有tcp连接状态:

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

tcp连接在系统中的状态:

closed:表示连接未活动或者关闭
listen:监听,等待连接
syn_recv:syn接收,服务端收到了来自客户端的syn(连接请求),正在等待确认。
syn_sent:syn发送,客户端已经向服务端发送syn请求,等待服务器确认。
ESTABLISHED:已经建立了tcp连接,正在传输数据。
fin_wait1:表示一端已经发送了连接关闭的请求,等待另一端确认。
fin_wait2:表示另一端已经确认了,等到发出端,确认关闭请求。
close_wait:表示一端已经关闭连接,但是应用程序还未关闭连接。
closing:正在关闭
time_wait:连接等待。
last_ack:表示应用程序已经发送了最后的确认,等待另一端进入closed状态。

修改内核文件:

vim /etc/sysctl.conf 
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1 
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_fin_timeout = 60
#net.ipv4.tcp_fin_timeout =30-65之间 一般45即可
sysctl -p 立即生效

六、配置防盗链

修改配置文件:

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

valid_referers:设置信任的网站,
none:允许没有http_refer的请求访问资源
Nginx的优化和防盗链(面试高频!!!),nginx,chrome,运维

http {
...........
server{
...........
location ~* \.(jpg|gif|swf)$ {            
         root  html;
         expires 1d;
         valid_referers none blocked *.kgc.com kgc.com;   
         if ( $invalid_referer ) {
           rewrite ^/ http://www.kgc.com/error.png;
           }
        }
............
}
...............
}

解释:

~* \.(jpg|gif|swf)$ :这段正则表达式表示匹配不区分大小写,以.jpg 或.gif 或.swf 结尾的文件;
valid_referers :设置信任的网站,可以正常使用图片;

none:允许没有http_refer的请求访问资源(根据Referer的定义,它的作用是指示一个请求是从哪里链接过来的,
如果直接在浏览器的地址栏中输入一个资源的URL地址,那么这种请求是不会包含 Referer 字段的),如 http://www.kgc.com/game.jpg
我们使用 http://www.kgc.com 访问显示的图片,可以理解成 http://www.kgc.com/game.jpg 这个请求是从 http://www.kgc.com 
这个链接过来的。

blocked:允许不是http://开头的,不带协议的请求访问资源; 
*.kgc.com:只允许来自指定域名的请求访问资源,如 http://www.kgc.com

if语句:如果链接的来源域名不在valid_referers所列出的列表中,$invalid_referer为true,则执行后面的操作,
即进行重写或返回 403 页面。

网页准备:

Web源主机(192.168.233.21)配置:
cd /usr/local/nginx/html
将game.jpg、error.png文件传到/usr/local/nginx/html目录下
vim index.html
...... 
<img src="game.jpg"/>
</body>
</html>

echo "192.168.233.21 www.kgc.com" >> /etc/hosts 
echo "192.168.233.22 www.benet.com" >> /etc/hosts 

盗链网站主机(192.168.233.22):
cd /usr/local/nginx/html
vim index.html
...... 
<img src="http://www.kgc.com/game.jpg"/>
</body>
</html>

echo "192.168.233.21 www.kgc.com" >> /etc/hosts 
echo "192.168.233.22 www.benet.com" >> /etc/hosts

在盗图网站主机上进行浏览器验证

http://www.benet.com

七、fpm参数优化
Nginx的PHP解析功能实现如果是交由FPM处理的,为了提高PHP的处理速度,可对FPM模块进行参数的调整。
根据服务器的内存与服务负载,调整FPM模块参数。文章来源地址https://www.toymoban.com/news/detail-631760.html

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

到了这里,关于Nginx的优化和防盗链(面试高频!!!)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Nginx优化与防盗链

    ​​​​​​​ 一、隐藏版本号 可以使用 Fiddler 工具抓取数据包,查看 Nginx版本,也可以在 终端中使用命令 curl -I http://192.168.31.131显示响应报文首部信   方法一:修改主配置文件方式   方法二:修改源码文件,重新编译安装   配置软件模块  编译安装 make make install 开启

    2023年04月27日
    浏览(21)
  • nginx页面优化与防盗链

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 对版本号进行更改的目的:可以根据nginx的版本号进行破译,因此都会隐藏后端服务应用的真实版本号 1.1 查看版本号 1.2 修改版本号 1.2.1 修改配置文件 1.2.2 修改源码文件,重新编译安装 为什么做日志分

    2024年02月11日
    浏览(38)
  • nginx的优化和防盗链

    可以使用 Fiddler 工具抓取数据包,查看 Nginx版本, 也可以在 CentOS 中使用命令 curl -I http://192.168.81.129 显示响应报文首部信息。 方法一: 当Nginx将网页数据返回给客户端后,可设置缓存的时间,以方便在日后进行相同内容的请求时直接返回,避免重复请求,加快了访问速度 一

    2024年02月07日
    浏览(25)
  • Nginx的优化,安全与防盗链

     在Nginx的ngx_http_gzip_module压缩模块提供对文件内容压缩的功能。进行相关的配置修改,就能实现Nginx页面的压缩,达到节约带宽,提升用户访问速度   重启服务,进行访问测试:    压缩已经生成 (accept- Encoding) 当Nginx将网页数据返回给客户端后,可设置缓存的时间,以方

    2024年02月02日
    浏览(27)
  • Linux NGINX 优化与防盗链

    可以使用 Fiddler 工具抓取数据包,查看 Nginx版本, 也可以在 CentOS 中使用命令 curl -I http://192.168.80.101 显示响应报文首部信息。 curl -I http://192.168.80.101 方法一:修改配置文件方式 修改nginx配置,关闭版本号显示  重启服务,查看版本信息    方法二:修改源码文件,重新编译

    2024年02月07日
    浏览(28)
  • Nginx服务优化措施、网页安全与配置防盗链

    目录 一.优化Nginx 二.隐藏/查看版本号 隐藏版本号方法一:修改配置文件,关闭版本号  隐藏版本号方法二:修改源码文件中的版本号,重新编译安装 三.修改用户与组 四.设置缓存时间 五.日志切割脚本 六.设置连接超时控制连接访问时间 七.开启多进程 八.配置网页压缩 九

    2024年02月07日
    浏览(32)
  • nginx上web服务的基本安全优化、服务性能优化、访问日志优化、目录资源优化和防盗链配置简介

    目录 一.基本安全优化 1.隐藏nginx软件版本信息 2.更改源码来隐藏软件名和版本 (1)修改第一个文件(核心头文件),在nginx安装目录下找到这个文件并修改 (2)第二个文件 (3)第三个文件,内置响应信息页面 (4)第四个文件 (5)重新编译安装并重启 3.更改nginx服务的默

    2024年02月13日
    浏览(34)
  • Nginx(动静分离、分配缓冲区、资源缓存、防盗链、资源压缩、IP黑白名单、大文件传输配置、跨域配置、高可用、性能优化)

    首先通过SpringBoot+Freemarker快速搭建一个WEB项目:springboot-web-nginx,然后在该项目中,创建一个IndexNginxController.java文件,逻辑如下: index.ftl页面 从响应中获取了port输出 nginx.conf配置文件修改 至此,所有的前提工作准备就绪,紧接着再启动Nginx,然后再启动两个web服务,第一个

    2024年02月09日
    浏览(29)
  • 【运维安全】运维界葵花宝典:Nginx配置与优化秘籍

    必要的原理介绍 ● Nginx 里有一个master进程和多个worker进程.master进程并不处理网络请求,主要负责调度工作进程: 加载配置,启动工作进程及非停升级.worker进程负责处理网络请求与响应. ● master进程主要用来管理worker进程,具体包括如下4个主要功能: 接收来自外界的信号 向各wo

    2024年02月21日
    浏览(35)
  • 【运维知识进阶篇】集群架构-Nginx性能优化

    Nginx花了好多篇文章介绍了,今天谈谈它的优化。我们从优化考虑的方面,压力测试工具ab,具体的优化点三个方面去介绍,话不多说,直接开始! 目录 优化考虑方面 压力测试工具 性能优化 一、影响性能的指标 二、系统性能优化 1、更改文件句柄 2、Time_wait状态重用 三、代

    2024年02月06日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包