架构师都会,lamp下的nginx的优化(从入门到高手的第五步)

Posted 遙遙背影暖暖流星

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了架构师都会,lamp下的nginx的优化(从入门到高手的第五步)相关的知识,希望对你有一定的参考价值。

继上篇,已经架构号了LNMP,现在我们要对nginx从安全和日常管理的上进行优化,包括修改版本号,防盗链和日志分割等

一,隐藏版本号

1、查看自己的nginx 的版本

curl -I http://192.168.100.7
或者游览器中登录后,F12常看查看网络

在这里插入图片描述

2、开始修改

方法一:修改配置文件隐藏班版本号

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

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

在这里插入图片描述
nginx -t #检测语法
systemctl restart nginx.service
在这里插入图片描述

二、修改源码文件,起欺骗作用

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

#define nginx_version      1015009
#define NGINX_VERSION      "1.16.1"        #键本号修改为1.16.1
#define NGINX_VER          "apache/" NGINX_VERSION    #服务名改成apache

重新编译安装nginx

cd /opt/nginx-1.15.9/


./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module
   
make && make install

vim /usr/local/nginx/conf/nginx.conf #改回之前的配置

http {
    include       mime.types;
    default_type  application/octet-stream;
    server_tokens on;   #打开

systemctl restart nginx.service
curl -I http://192.168.100.7

在这里插入图片描述
起到欺骗作用,避免有人企图利用版本漏洞而加以破坏

二、修改用户和组

一般情况下,我们会创建的用户名的nginx的用户去管理nginx,并在./configure 的时候指定以及对关键目录设置权限和属主和属组,但这样约定成俗的做法可能会被一些利用,进而去针对。

所以这个时候可以对进行修改
vim /usr/local/nginx/conf/nginx.conf

user nginx nginx;   #将#去掉,nginx分别为用户和组,可以进行修改

三、配置nginx网页缓存时间

vim /usr/local/nginx/conf/nginx.conf #插入以下内容

 location ~.*\\.(jpg|jepg|gif|css|png|ico|html)?$ {     #图片识别

root html;         

expires 1d;     #缓存为1天

break;

}

cd /usr/local/nginx/html
上传图片到这个目录
vim index.html

 <h1>Welcome to nginx!</h1>
 <img src="sanshang.jpg"/>		#第15行插入识别图片 

systemctl restart nginx.service
登录192.168.100.7 或者192.168.100.7/sanshang.jpg
在这里插入图片描述

四、nginx 的日志切割

创建分隔的脚本
vim /opt/rizhifge.sh

#!/bin/bash
#Filename:fenge.sh``
d=$(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}/test.com-access.log-$d
kill -HUP $(cat $pid_path)
find $logs_path -mtime +30 | xargs rm -rf

date -s 20210625 #今天日期为24号,日志要生成前一天的,所以这里修改一下时间为明天的日期 (修改回来ntpdate cn.pool.ntp.org)
chmod +x rizhifge.sh
./rizhifge.sh
systemctl restart nginx.service
ls /var/log/nginx
在这里插入图片描述
定时计划

crontab -e
0 1 * * * /opt/rizhifge.sh

五、 配置nginx实现连接超时

避免一个用户长时间登录无操作
vim /usr/local/nginx/conf/nginx.conf

http {

    keepalive_timeout  100; 
    client_header_timeout 80;  #等待客户端发送请求头的超时时间 超时会发送408错误
    client_body_timeout 80;    #设置客户端发送体请求超时时间

  
     }

在这里插入图片描述

六、更改nginx 运行进程数

可以通过修改进程数来改变nginx的程序的性能

现在的进程数
在这里插入图片描述

●一般设为CPU的个数或者核数
●在高并发情况下可设置为CPU个数或者核数的2倍
●增加进程数,可减少了系统的开销,提升了服务速度
●使用ps aux查看运行进程数的变化情况
●默认情况,Nginx的多个进程可能跑在一个CPU上,可以分配不同的进程给不同的CPU处理,充分利用硬件多核多CPU

cpu核数为2的倍数;进程数为2的n次数,最多为cpu核数的两倍

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

worker_processes  2;
worker_cpu_affinity 0001 0010 0001 0010;  
详细说明
###2核cpu,开启2个进程
worker_processes  4;  #修改为核数相同或者2倍
worker_cpu_affinity 01 10 0100 1000;
#设置每个进程由不同cpu处理,进程数配为2时为000100100100、
PS:
01表示启用第一个CPU内核,10表示启用第二个CPU内核
worker_cpu_affinity 01 10;表示开启两个进程,第一个进程对应着第一个CPU内核,第二个进程对应着第二个CPU内核。

###2核cpu,开启4个进程

worker_processes     4;
worker_cpu_affinity 01 10 01 10;
PS:开启了四个进程,它们分别对应着开启2个CPU内核

###4个cpu,开启4个进程
worker_processes     4;
worker_cpu_affinity 0001 0010 0100 1000;

ps:0001表示启用第一个CPU内核,0010表示启用第二个CPU内核,依此类推

nginx -t
systemctl restart nginx.service
ps -aux |gerp nginx
在这里插入图片描述

两个进程,负载均衡

七、配置nginx 实现网页压缩功能

1、设置配置文件

vim /usr/local/nginx/conf/nginx.conf
添加以下内容

  gzip on;                  
     gzip_min_length 1k;     
     gzip_buffers 4 16k;     
     gzip_http_version 1.1;  
     gzip_comp_level 6;
     gzip_types text/plain application/x-javascript text/css image/jpg image/jpeg image/png image/gif application/xml text/javascript application/x-httpd-php application/javascript application/json;
     gzip_disable "MSIE [1-6]\\.";
     gzip_vary on;

gzip on; #开启gzip压缩功能
gzip_min_length 1k; #压缩阈值
gzip_buffers 4 16k; #buffer 大小为4个16k缓冲区大小
gzip_http_version 1.1; #压缩版本(默认不设置)
gzip_comp_level 6; #压缩比率,最小为1,处理速度快,传输速度慢,9最大压缩比,处理速度慢,传输速度快(建议5-6)
gzip_types text/plain application/x-javascript text/css image/jpg image/jpeg image/png image/gif application/xml text/javascript application/x-httpd-php application/javascript application/json;
gzip_disable “MSIE [1-6].”; #配置禁用gzip条件,支持正则,表示ie6以下不启用gzip
gzip_vary on; #支持前端缓存服务器存储压缩页面
在这里插入图片描述

2、验证

nginx -t
systemctl restart nginx.service
清除游览器的缓存,登录
在这里插入图片描述
压缩格式出现

八、对FPM模块进行参数优化

nginx的PHP解析功能实现如果是交由FPM处理的,为了提高PHP的处理速度,可对FPM模块进行参数的调整根据服务器的内存与服务负载,

一、调整FPM模块参数
启动fpm进程方式,通过pm参数指定

static:将产生固定数量的fpm进程
dynamic:将以动态的方式产生fpm进程

二、FPM优化参数
①Static的方式的参数
pm.max_children:指定启动的进程数量
②Dynamic方式的参数
pm.max_children:指定启动进程数的最大值
pm.start_servers:动态方式下初始的 fpm进程数
pm.min_spare_servers:动态方式下最小的fpm空闭进程数
pm.max_spare_servers:动态方式下最大的fpm空闭进程数

三、FPM优化参数调整示例
●优化原因:服务器为云服务器,运行了个人论坛,内存为1.5G,fpm进程数为20,内存消耗近1G,处理比较慢
●优化参数调整
FPM启动时有5个进程,最小空闲2个进程,最大空闲8个进程,
最多可以有20个进程存在

vi php-fpm.conf

 pid = run/php-fpm.pid
pm = dynamic
 pm.max_children=20
 pm.start_servers = 5
pm.min_spare_servers = 2
pm.max_spare_servers = 8

九、防盗链

先利用另外一台主机尝试盗链
服务端:linux 192.168.100.7
盗链端:linux192.168.100
客户端:win7 192.168.100.4

1、 三台主机设置域名映射

vim /etc/hosts

192.168.100.7 www.cat.com

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
(属性-安全-管理-每个用户的每个权限都打过即可顺利保存)

2,对盗链断进行设置

首先确保盗链端安装了nginx
192.168.100.6
vim /usr/local/nginx/html/index.html #盗取www.cat.com的域名

<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<img src="http://www.cat.com/sanshang.jpg"/>

注意图片名不要写错,否则识别不了

3,win7上访问盗链端

首先盗链端并无图片设置
在这里插入图片描述

在这里插入图片描述
如图到盗链成功

4、防盗链设置

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

 server {
        listen       80;
        server_name  www.cat.com;     #修改为www.cat.com

location ~*\\.(jpg|gif|swf)$ {
            valid_referers none blocked *.cat.com cat.com;			#只允许来源为本地的访问源进行访问
            if ( $invalid_referer ) {
               rewrite ^/ http://www.cat.com/error.jpg;      #选定图片
            }
        }

并将名为error.jpg图片上传至/usr/local/nginx/html/

systemctl restart nginx.service

以上是关于架构师都会,lamp下的nginx的优化(从入门到高手的第五步)的主要内容,如果未能解决你的问题,请参考以下文章

搞对数据库连接池,这次从100优化到3ms!阿里架构师都说好

lamp架构nginx并发优化平滑升级与回滚

lamp架构nginx并发优化平滑升级与回滚

lamp架构nginx并发优化平滑升级与回滚

上篇:技术架构的设计方法

Java架构师都有哪些要求