Nginx服务深入优化(2)——更改Nginx运行进程数、Nginx实现网页压缩、配置Nginx实现防盗链、FPM模块进行参数优化

一、Nginx深入优化

1.1、更改Nginx运行进程数

  • 在高并发场景,需要启动更多的Nginx进程以保证快速响应,以处理用户的请求,避免造成阻塞
  • 更改进程数的配置方法
    ■修改配置文件,修改进程配置参数
  • 修改配置文件的worker_processes参数
    ■一般设为CPU的个数或者核数
    ■在高并发情况下可设置为CPU个数或者核数的2倍
  • 增加进程数,可减少了系统的开销,提升了服务速度
  • 使用ps aux查看运行进程数的变化情况
  • 默认情况,Nginx的多个进程可能跑在一个CPU上,可以分配不同的进程给不同的CPU处理,充分利用硬件多核多CPU

1.1.1、更改Nginx运行进程数实验

  • 先查看可以给的进程数,然后修改配置文件的进程数
##  (CPU核数 + CPU个数) x 2  , 我这边虚拟机给的是双核双线程
[root@localhost nginx-1.15.9]# cat /proc/cpuinfo |grep -c "physical"  
8
[root@localhost nginx-1.15.9]# vi /usr/local/nginx/conf/nginx.conf
worker_processes  8;  ## 数字修改为8
== >>  wq  保存 
  • 检测语法有无错误,并刷新配置Nginx文件
[root@localhost nginx-1.15.9]# 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

[root@localhost nginx-1.15.9]# killall -s HUP nginx  ## 刷新nginx配置
  • 再次进行过滤,验证实验
[root@localhost nginx-1.15.9]# ps aux | grep nginx  
## 再过滤一次,这次是8个进程,验证了我们刚刚改的参数。
##最后一行 root 是我使用远程终端的进程

在这里插入图片描述

1.2、配置Nginx实现网页压缩

  • Nginx的ngx_http_gzip_module压缩模块提供对文件内容压缩的功能
  • 允许Nginx服务器将输出内容在发送客户端之前进行压缩,以节约网站带宽,提升用户的访问体验,默认已经安装
  • 可在配置文件中加入相应的压缩功能参数对压缩性能进行优化
  • 压缩功能的参数
    ■gzip on:开启gzip压缩输出
    ■gzip_min_length 1k:设置允许压缩的页面最小字节数
    ■gzip_buffers 4 16k:申请4个单位为16k的内存作为压缩结果流缓存,默认值是申请与原始数据大小相同的内存空间来存储gzip压缩结果
    ■gzip_http_version 1.0:设置识别http协议版本,默认是1.1,目前大部分浏览器已经支持gzip解压,但处理较慢,也比较消耗服务器CPU资源
    ■gzip_comp_level 2:指定gzip压缩比,1压缩比最小,处理速度最快;9压缩比最大,传输速度快,但处理速度最慢
    ■gzip_types text/plain:压缩类型,对哪些网页文档启用压缩功能
    ■gzip_vary on:让前端缓存服务器缓存经过gzip压缩的页面

1.2.1、Nginx实现网页压缩实验

  • 在浏览器输入 20.0.0.25 ,用 wireshark 进行抓包。我们先查看没有网页压缩之前的大小是612bytes

在这里插入图片描述

  • 开启网页压缩功能,并刷新Nginx配置文件
[root@localhost nginx-1.15.9]# vi /usr/local/nginx/conf/nginx.conf
## 找到 gzip on
gzip  on;   ##   #号去掉,开启网页压缩功能
gzip_buffers 4 64k;
gzip_http_version 1.1;
gzip_comp_level 2;
gzip_min_length 1k;
gzip_vary on;
gzip_types text/plain text/javascript application/x-javascript text/css text/xml application/xml application/xml+rss;
== > >  wq  保存
注释:
1.开启gizp 压缩
2.表示申请4个单位为16k的内存作为压缩结果流缓存,默认值是申请与原始数据大小相同的内存空间
3.用于设置识别http协议版本,默认是1.1
4.用来指定gzip压缩比,1压缩比最小,处理速度最快;9压缩比最大,传输速度快,处理速度慢
5.用于设置允许压缩的最小字节数;
6.选项可以让前端的缓存服务器缓存经过gzip压缩的页面
7.压缩类型,对那些网页文档启用压缩功能;
[root@localhost nginx-1.15.9]# killall -s HUP nginx  ##  刷新配置参数
  • 在浏览器输入 20.0.0.25 , 用 wireshark 进行抓包,压缩完之后网页为384 bytes。网页压缩成功!

在这里插入图片描述

1.3、配置Nginx实现防盗链

  • 在企业网站服务中,一般都要配置防盗链功能,以避免网站内容被非法盗用,造成经济损失
  • Nginx防盗链功能也非常强大。默认情况下,只需要进行简单的配置,即可实现防盗链处理

1.3.1、配置Nginx实现防盗链实验

  • 添加映射
C:\Windows\System32\drivers\etc  ## 进入这个目录
用记事本打开 hosts ,在最下面添加如下两行。(如果直接更改不生效,建议复制一份去桌面,在桌面改完后,在覆盖源文件)
### 在最下面添加如下两行
20.0.0.25 www.TX.top   ### 源主机
20.0.0.24 www.HH.top   ### 盗链主机
  • 真机测试是否可以 ping 通

在这里插入图片描述

  • 配置源主机
用xftp在20.0.0.25 IP的虚拟机的 /usr/local/nginx/html/ 里放一张图片,图片名叫 x.jpg
[root@localhost opt]# vi /usr/local/nginx/html/index.html  ##  在网页里面添加图片配置
<img src="./x.jpg"/>   ## 因为在当前目录下 所以用 ./x.jpg
== >> wq  保存
  • 验证下源主机图片是否放入成功

在这里插入图片描述

  • 现在做盗链主机
[root@localhost ~]# vi /usr/local/httpd/htdocs/index.html   ##进入修改默认页配置
<!DOCTYPE html>   ## 添加如下代码
<html>
<head>
<title>--盗图测试--</title>
</head>
<body><h1>盗图页面</h1>
<img src="http://www.TX.top/x.jpg" / >    ## x.jpg是本地图片
</body>
</html>
==> > wq  保存
[root@localhost ~]# vi /usr/local/httpd/conf/httpd.conf 
ServerName 80  ## 找到这句代码
AddDefaultCharset utf-8   ## 添加这句代码,让网页显示中文(不加中文在网页里显示乱码)
[root@localhost ~]# systemctl restart httpd  ## 重启 httpd
  • 测试:浏览器输入20.0.0.24,查看能不能正常盗链

在这里插入图片描述

  • 现在配置源主机的防盗链!
[root@localhost ~]# cd /usr/local/nginx/conf/
[root@localhost conf]# vi nginx.conf
 location ~ \.(gif|jpg|jepg|png|bmp|ico)$ {
            root   html;
            expires 1d;  ## 在这下面添加
            valid_referers none blocked *.TX.top TX.top;
            if ($invalid_referer) {
               rewrite ^/ https://ss1.bdstatic.com/70cF635562513&fm=26&gp=0.jpg;
                ## 这里在网上找一张图片,复制地址,放进去
               }
        }
[root@localhost conf]# killall -s HUP nginx  ## 重载配置
  • 测试:浏览器输入20.0.0.24,查看能不能防止盗链!!!

再次登录验证,发现图片改变,但是图片连接地址是没有改变的,防盗成功!
在这里插入图片描述

1.4、FPM模块进行参数优化

####################安装PHP环境#####
yum -y install \
libjpeg \
libjpeg-devel \
libpng libpng-devel \
freetype freetype-devel \
libxml2 \
libxml2-devel \
zlib zlib-devel \
curl curl-devel \
openssl openssl-devel


#######上传php-7.1.10.tar.bz2包到opt目录下#####
cd /opt
tar xjvf php-7.1.10.tar.bz2
cd php-7.1.10
./configure \
--prefix=/usr/local/php \
--with-apxs2=/usr/local/httpd/bin/apxs \
--with-mysql-sock=/usr/local/mysql/mysql.sock \
--with-mysqli \
--with-zlib \
--with-curl \
--with-gd \
--with-jpeg-dir \
--with-png-dir \
--with-freetype-dir \
--with-openssl \
--enable-mbstring \
--enable-xml \
--enable-session \
--enable-ftp \
--enable-pdo \
--enable-tokenizer \
--enable-zip


make -j3 && make install

cp php.ini-development /usr/local/php/lib/php.ini
vi /usr/local/php/lib/php.ini

mysqli.default_socket = /usr/local/mysql/mysql.sock
date.timezone = Asia/Shanghai

[root@localhost php-7.1.10]# /usr/local/php/bin/php -m //验证安装的模块

[root@localhost php-7.1.10]# vi /etc/httpd.conf //在合适位置新增

AddType application/x-httpd-php .php    ###添加
AddType application/x-httpd-php-source .phps   ###添加

<IfModule dir_module> 
    DirectoryIndex index.php index.html  ###找到这个添加
</IfModule>

[root@localhost php-7.1.10]# rm -f /usr/local/httpd/htdocs/index.html ###删除
[root@localhost php-7.1.10]#  vi /usr/local/httpd/htdocs/index.php  ###创建新的

<?php
phpinfo();
?>
[root@localhost php-7.1.10]# systemctl restart httpd.service
测试:20.0.0.6
#####FPM参数优化###
[root@localhost php-7.1.10]# cd /usr/local/php/etc/php-fpm.d
[root@localhost etc]# vi www.conf
pm=dynamic
pm.max_children=20
pm.start_servers=5
pm.min_spare_servers=2
pm.max_spare_servers=8
FPM启动时有5个进程,最小空闲2个进程,最大空闲8个进程,最多可以有20个进程存在。


一、pm.max_children多大合适?
  这个值原则上是越大越好, php-cgi的进程多了就会处理的很快, 排队的请求就会很少。
设置”max children”也需要根据服务器的性能进行设定。

计算方式如下:
  一般来说一台服务器正常情况下每一个php-cgi所耗费的内存在20M~30M左右, 因此我的”max_children”我设置成40个,
  20M*40=800M也就是说在峰值的时候所有PHP-CGI所耗内存在800M以内, 低于我的有效内存2Gb。
  而如果我的”max_children”设置的较小, 比如5-10个, 那么php-cgi就会“很累“, 处理速度也很慢, 等待的时间也较长,占用的CPU也很高。
  如果长时间没有得到处理的请求就会出现504 Gateway Time-out这个错误, 而正在处理的很累的那几个php-cgi如果遇到了问题就会出现502Bad gateway这个错误。
  max_children较好的设置方式根据req/s(吞吐率, 单位时间里服务器处理的最大请求数, 单位req/s) 来设置, 
  若程序是100D req/s的处理能力, 那么就设置100比较好, 这是动态来调整的。

本次内容就结束啦!
若有不足之处,请多多指教,敬请指出。

猜你喜欢

转载自blog.csdn.net/m0_46563938/article/details/108437533