Nginx优化与防盗链

一、Nginx优化案例

1、隐藏版本号

方法一:

(1)修改配置文件 vim /usr/local/nginx/conf/nginx.conf

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

}

(2)先curl -I http://192.168.92.140查看之前的版本号是多少 (- 大写的i)

重启服务:systemctl restart nginx

再次查看: curl -I http://192.168.92.140  

1a0a8ea5861e46cc9a218eef37d04d44.png

add3358231104ba6a2da096282c7bb3f.png

230874797a554d899153a3acc13c8b63.png773acd4b915e45599d165657fc9141d2.png

 方法二、编译安装

vim /opt/nginx-1.22.0/src/core/nginx.h
#define NGINX_VERSION "what are you doing"               #修改版本号
#define NGINX_VER "nonono" NGINX_VERSION     #修改服务器类型
cd /opt/nginx-1.22.0/
./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module
make && make install
###################
http {
    include       mime.types;
    default_type  application/octet-stream;
    server_tokens on;   ##打开版本号
    vhost_traffic_status_zone;
}

875c88e6724040ddb05d8ff82f38f3a6.png

e9e9471d220c4bce9f00c39dfed4d324.png

 2、设置缓存时间

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天
    }
......
  }
}

a110e6a9095d4db5959c68ca2424f9bd.png

systemctl restart nginx    ##重启服务
cd /usr/local/nginx/html/

e50d79d2a4d048e48e80392829089b47.png

 放两张照片到此文件中583d5a920d1e418497bef6ec94334f00.png

打开浏览器,点击设置打开开发人员模式

​选择 网络 —> 选择 HTML、WS、其他​

​​访问 http://192.168.92.140/111.jpg ,查看响应头中包含 Cahce-Control:max-age=86400 表示缓存时间是 86400 秒。也就是缓存一天的时间,一天之内浏览器访问这个页面,都是用缓存中的数据,而不需要向 Nginx 服务器重新发出请求,减少了服务器的使用带宽。

cfa0049cdabc409ea910619e8c5aa01b.png

 3、日志切割

日志切割的目的:以天为单位截取日志,并以时间作为日志的文件名

(1)日志位置

http server的服务的日志路径为

/usr/local/nginx/logs

(2)编辑脚本

[root@zyf ~]# cd /usr/local/nginx/logs
[root@zyf logs]# vim nginx_log.sh

脚本内容如下

#!/bin/bash
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}/zyf-access.log-$day
kill -USR1 $(cat $pid_path)                      #重载日志文件
find $logs_path -mtime +30 -exec rm -rf {} \;    #删除30天以前的日志

赋予执行权限   chomd +x nginx_log.sh

运行脚本 ./nginx_log.sh

(3)验证结果

f211de6b0be04ac9a79d0a3bd1f459e8.png

7176c2f810714a7b9f27cc08b78f59f3.png 修改时间再次执行脚本ecd6d48e18324f438d66a899115eff4e.png

 4、连接超时

三个请求方式:请求行,请求头,请求体

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

vim /usr/local/nginx/conf/nginx.conf
http {
......
    keepalive_timeout 65 180;
    client_header_timeout 80;     #客户端向服务端发送一个完整的request header的超时时间
    client_body_timeout 80;       #客户端向服务端发送一个完整的request body的超时时间
    ......
)

keepalive_timeout: 指的是keepalive的超时时间。指定每个tcp连接最多可以保持多长时间,服务器将会在这个事件后关闭连接。Nginx的默认值为65s,有些浏览器最多保持60s,使用可以设定为60s。若将他设置为0,就禁止了keepalive连接。

第二个参数指定了响应头keep-alive:timeout=time值。这个头能够让一些浏览器主动关闭链接,这样服务器就不必去关闭连接了。没有这个参数,nginx不会发送keep-alive响应头。
739bd827af1944b488d8cf53a8edc6c8.png

 保存并重启服务     systemctl restart nginx

打开网页查看keep-Alive变成了180

450d6b659e764f91ba9e558032af2167.png

 5、更改进程数

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

cat /proc/cpuinfo | grep -c "physical id" #查看cpu核数
ps aux | grep nginx             #查看nginx主进程中包含几个子进程

87c7c6b86d8f4984ac27f3563fdcc766.png

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

c46221c077b644829003eaeb91a0e892.png1bb76c3391e144679a500422e14e2f5d.png

 6、配置网页压缩

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

[root@zyf ~]# vi /usr/local/nginx/conf/nginx.conf
 gzip  on; ###开启gzip压缩功能
    gzip_min_length 1k; ###压缩阈值(超过1k的文件进行压缩)
    gzip_buffers 4 16k; ###buffer(缓冲)大小为4个16k缓冲区大小
    gzip_http_version 1.1; ###压缩版本
    gzip_comp_level 6; ###压缩比率,最小为1,处理速度快,传输速度慢;最大为9,处理速度慢,传输速度快
    gzip_types text/plain application/x-javascript text/css image/jpg image/png image/gif application/xml text/javascript application/x-http-php application/javascript application/json; 
    gzip_vary on; ###选择支持vary header可以让前端的缓存服务器缓存经过gzip压缩的页面  
[root@zyf ~]# vi /usr/local/nginx/html/index.html ###插入图片
<img src=a.jpg / >
</body>
</html>
[root@zyf ~]# systemctl restart nginx

9d386c9367b64806b0f1bb319802577f.png

7ebc231d5d554ad8bae535ff32b84ee0.png

cd /usr/local/nginx/html
先将111.jpg文件传到/usr/local/nginx/html目录下
vim index.html
...... 
<img src="111.jpg"/>       #网页中插入图片
</body>
</html>

systemctl restart nginx

e76abb461296454aacfb65121a304134.png

f5b49ec099c848799357f2261749ced2.png

 验证

72452754a0a84fb698844822c43a1de6.png

二、盗链与防盗链 

1、配置防盗链

(1)盗链原理

34e4b1397d22488ba49b5db03189a61f.png

 (2)源服务器配置

cd  /usr/local/nginx/html
rz -E     #插入两张图片
ls        #查看图片
111.jpg  222.jpg  50x.html  error.png  index.html

0a8f465ed9e54444a37b1b0dd8cc810c.png

编辑页面index.html

<p><em>嘿</em></p>
<img src=111.jpg />   #插入图片格式
<img src=/>
</body>
</html>

39e774c2f288495aaa0a15324878d319.png

 编辑配置文件/etc/hosts

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.92.140 www.zyf.com
192.168.92.150 www.nzy.com

(3)配置盗链机

cd /usr/local/nginx/html
vim index.html
...... 
<img src="http://www.zyf.com/111.jpg"/>
</body>
</html>

echo "192.168.92.140 www.zyf.com" >> /etc/hosts 
echo "192.168.92.150 www.zzz.com" >> /etc/hosts

3a1ee7caf00c43f5ad69e060543b8765.png

(4)源主机防盗链设置   (注意!!!报错图片格式最好和之前插入页面的图片格式不同)

vim /usr/local/nginx/conf/nginx.conf
server
{
......
location ~* \.(gif|jpg|swf)$ {
             valid_referers none blocked *.zyf.com zyf.com;
             if ($invalid_referer) {
             rewrite ^/ http://www.zyf.com/error.png;     #盗链跳转到另一个界面
             }
    }
.......
}

4c957b17151c4f48ab53cf2e35711d08.png

验证

在192.168.92.150主机网页中搜索www.zzz.com 结果正确输出111.jpg

61794a6bcada4a1585da34f506cb1837.png

  用192.168.92.140主机网页搜索www.zyf.com 结果正确输出111.jpg

1651268aa23f495a8df58ca18d7a5ff8.png

用192.168.92.140(源主机)访问www.nzy.com显示出防盗提示错误页面

 三、fpm参数优化

cd /usr/local/php/etc/
cp php-fpm.conf.default php-fpm.conf
vim 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  #动态方式下最大空闲进程数
 
#启动php-fpm,不可用于重启
/usr/local/php/sbin/php-fpm  -c /usr/local/php/lib/php.ini
#执行第一个命令后,就可以使用下面这条命令查看pid号重启php-fpm
kill -USR2 `cat /usr/local/php/var/run/php-fpm.pid`
netstat -anpt | grep 9000

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值