Linux--nginx服务优化与深入优化(隐藏版本号、修改用户与组、网页缓存与压缩、日志切割、连接超时、防盗链、fpm参数优化)

Linux--nginx服务优化与深入优化(隐藏版本号、修改用户与组、网页缓存与压缩、日志切割、连接超时、防盗链、fpm参数优化)

  • 一:隐藏版本号
    • 1.1:修改配置文件法
      • 1.1.1:源码编译安装nginx服务
      • 1.1.2:修改配置文件
      • 1.1.3:重启服务、访问网站使用curl -I 命令检测
    • 1.2:修改源码法
  • 二:修改nginx用户与组
    • 2.1:修改配置文件指定用户与组
  • 三:配置nginx的网页缓存时间
    • 3.1:配置方法
    • 3.2:用fiddler工具抓包验证
  • 四:nginx的日志切割
    • 4.1:编写脚本进行日志切割
    • 4.2:执行脚本验证
  • 五:配置nginx实现连接超时
    • 5.1:配置方法--修改配置文件
  • 六:设置nginx的网页压缩
    • 6.1:修改配置文件
    • 6.2:用filter抓包工具验证
  • 七:配置nginx防盗链
    • 7.1:盗链与防盗链
    • 7.2:配置防盗链
      • 7.2.1:实验环境
      • 7.2.2:server2配置盗链服务器模拟盗链
      • 7.2.3:server1上设置防盗链
  • 八:fpm参数优化
    • 8.1:FPM模块概述
    • 8.2:FPM参数优化讲解
    • 8.3:FPM参数优化配置

一:隐藏版本号

隐藏nginx版本号、避免安全漏洞泄露
nginx隐藏版本号的方法

  • 修改配置文件法
  • 修改源码法

1.1:修改配置文件法

1.1.1:源码编译安装nginx服务

#安装nginx环境所需的软件包
[root@promote ~]# yum install gcc gcc-c++ make pcre-devel zlib-devel -y
#创建运行用户和组
[root@promote ~]# useradd -M -s /sbin/nologin nginx
#把nginx压缩包上传到/opt目录  解压压缩包
[root@promote ~]# cd /opt
[root@promote opt]# ls
nginx-1.12.2.tar.gz  rh
[root@promote opt]# tar xzvf nginx-1.12.2.tar.gz 
#编译安装
[root@promote opt]# cd nginx-1.12.2/
[root@promote nginx-1.12.2]# ./configure \
> --prefix=/usr/local/nginx \
> --user=nginx \
> --group=nginx \
> --with-http_stub_status_module
[root@promote nginx-1.12.2]# make && make install
#优化执行路径
[root@promote nginx-1.12.2]# ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
#启动服务
[root@promote nginx-1.12.2]# iptables -F
[root@promote nginx-1.12.2]# setenforce 0
[root@promote nginx-1.12.2]# nginx 

1.1.2:修改配置文件

[root@promote nginx-1.12.2]# vim /usr/local/nginx/conf/nginx.conf

17 http {
 18     include       mime.types;
 19     default_type  application/octet-stream;
 20     server_tokens off;      #增加此行,表示关闭版本号

1.1.3:重启服务、访问网站使用curl -I 命令检测

[root@promote nginx-1.12.2]# killall -s QUIT nginx  
[root@promote nginx-1.12.2]# nginx
[root@promote nginx-1.12.2]# curl -I http://192.168.209.134
HTTP/1.1 200 OK
Server: nginx        ##此处隐藏了版本号信息
Date: Mon, 10 Aug 2020 12:00:34 GMT
Content-Type: text/html
Content-Length: 636
Last-Modified: Mon, 10 Aug 2020 07:34:13 GMT
Connection: keep-alive
ETag: "5f30f875-27c"
Accept-Ranges: bytes

1.2:修改源码法

nginx源码文件/opt/nginx-1.12.2/src/core/nginx.h包含版本信息,可以随意设计

[root@promote nginx-1.12.2]# ls
auto  CHANGES  CHANGES.ru  conf  configure  contrib  html  LICENSE  Makefile  man  objs  README  src
[root@promote nginx-1.12.2]# cd src/
[root@promote src]# ls
core  event  http  mail  misc  os  stream
[root@promote src]# cd core/
[root@promote core]# ls | grep nginx.h
nginx.h
[root@promote core]# vim nginx.h

在这里插入图片描述
修改完成后重新编译安装,启动服务,访问网站使用curl -I 命令检测

二:修改nginx用户与组

nginx运行时,进程需要有用户与组的支持,以实现对网站文件读取时进行访问控制
nginx默认使用nobody用户账号与组账号
修改的方法:

  • 编译安装时指定用户与组
  • 修改配置文件指定用户与组
    前面编译安装时已经指定了用户与组为nginx,不在描述

2.1:修改配置文件指定用户与组

[root@promote core]# vim /usr/local/nginx/conf/nginx.conf
 2 user  nginx;   #取消此行注释,把nobody改为nginx

三:配置nginx的网页缓存时间

当nginx将网页数据返回给客户端后,可设置缓存的时间,以方便在日后进行相同内容的请求时,直接返回,避免重复请求,加快访问速度。
一般针对静态网页设置,对动态网页不设置缓存时间。

3.1:配置方法

修改配置文件,在http段、或者server段、location段加入对特定内容的过期参数
以图片为例,修改配置文件

[root@promote ~]# vim /usr/local/nginx/conf/nginx.conf
......
location ~\.(gif|jpg|jpeg|png|bmp|ico)$ {
            root   html;
            expires 1d;      #缓存时间1天
        }
......

3.2:用fiddler工具抓包验证

首先在nginx站点的首页插入一张图片,然后Windows访问nginx网站
Linux--nginx服务优化与深入优化(隐藏版本号、修改用户与组、网页缓存与压缩、日志切割、连接超时、防盗链、fpm参数优化)_第1张图片

四:nginx的日志切割

  • 随着nginx的运行时间增加,日志也会增加,为了方便掌握nginx的运行状态,需要时刻关注nginx日志文件
  • 太大的日志文件监控很困难
  • 定期进行日志文件的切割
  • nginx自身不具备日志分割处理的功能,但可以通过nginx信号控制功能的脚本实现日志的自动切割
  • 通过Linux的计划任务周期性的进行日志切割

4.1:编写脚本进行日志切割

[root@promote ~]# cd /opt
[root@promote opt]# vim fenge.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)
#删除30天前的日志
find $logs_path -mtime +30 | xargs rm -rf

4.2:执行脚本验证

[root@promote opt]# chmod +x fenge.sh 
[root@promote opt]# ./fenge.sh 
[root@promote opt]# cd /var/log/nginx/
[root@promote nginx]# ls
test.com-access.log-20200810  ##日志文件切割成功

五:配置nginx实现连接超时

为避免同一客户端长时间占用连接,造成资源浪费,可设置相应的连接超时参数,实现控制连接访问时间
超时参数:

  • Keepalive_timeout
    设置连接保持超时时间
  • client_header_timeout
    指定等待客户端发送请求头的超时时间
  • client_body_timeout
    客户端请求体超时时间

5.1:配置方法–修改配置文件

nginx使用Keepalive_timeout来指定Keepalive的超时时间(timeout),指定每个tcp连接最多可以保持多长时间,nginx的默认值是65秒,有些游览器最多只支持60秒,若将它设置为0就禁止了keepalive连接。

[root@promote nginx]# vim /usr/local/nginx/conf/nginx.conf

http {
...
keepalive_timeout  65;
    client_header_timeout 40; #等待客户端发送请求头的超时时间,超时会发送408错误
    client_body_timeout 40; #设置客户端发送请求体的超时时间
...
}

六:设置nginx的网页压缩

nginx的压缩模块提供了对文件内容压缩的功能,允许nginx服务器将传输的内容发送到客户端之前进行压缩,以节约网站带宽,提升用户的访问体验。

6.1:修改配置文件

[root@promote nginx]# vim /usr/local/nginx/conf/nginx.conf
http {
...
    gzip  on;  #打开gzip压缩功能
    gzip_min_length 1k;  #用于设置允许压缩的页面最小字节数
    gzip_buffers 4 16k;  #用于申请4个单位为16k的内存作为压缩结果流缓存,默认值是申请与原始数据大小相同的内存空间来存储gzip压缩结果
    gzip_http_version 1.1;  #设置识别http协议版本号
    gzip_comp_level 6;   #设置压缩等级,最小为1,处理速度快,传输速度慢,最大为9,处理速度慢,传输速度快
    gzip_types text/plain application/x-javascript test/css image/jpeg image/png image/gif application/xml test/javascript application/x-httpd-php application/javascript application/json;  #压缩类型,对哪些网页文档启用压缩功能
    gzip_disable "MSIE [1-6]\.";  #配置禁用gzip条件,支持正则,表示ie6以下不启用gzip
    gzip_vary on;  #让前端的缓存服务器缓存经过gzip压缩的页面
...
}

6.2:用filter抓包工具验证

Linux--nginx服务优化与深入优化(隐藏版本号、修改用户与组、网页缓存与压缩、日志切割、连接超时、防盗链、fpm参数优化)_第2张图片

七:配置nginx防盗链

7.1:盗链与防盗链

盗链是指服务提供商自己不提供服务的内容,通过技术手段绕过其它有利益的最终用户界面(如广告)直接在自己的网站上向最终用户提供其它服务提供商的服务内容,骗取最终用户的浏览和点击率受益者不提供资源或提供很少的资源,而真正的服务提供商却得不到任何的收益

网站盗链会大量消耗被盗链网站的带宽,而真正的点击率也许会很小,严重损害了被盗链网站的利益
早期的盗链一般是一些比较小的网站盗取一些有实力的大网站的地址,盗链的目标比较有针对性
现如今,一些大型的网站也已经开始把盗链的目光锁定在了整个互联网上,窃取整个互联网上的其它机器的带宽
常见的盗链有以下几种:图片盗链、音频盗链、视频盗链、文件盗链
一般被访问浏览的页面并不是一次全部传送到客户端的
如果客户请求的是一个带有许多图片和其它信息的页面,那么最先的一个HTTP 请求被传送回来的是这个页面的HTML文本
客户端浏览器对这段文本解释执行后,发现其中还有其它文件,客户端浏览器会再发送一条或者更多HTTP请求
当这些请求被处理后其它文件才被传送到客户端,然后浏览器将这些文件放到页面的正确位置
一个完整的页面要经过发送多条HTTP 请求才能够被完整地显示
基于这样的机制,盗链就成为可能,服务提供商完全可以在自己的页面中嵌入别人的链接,显示在自己的页面上,以达到盗链的目的

WEB应用防火墙通过实现URL级别的访问控制,对客户端请求进行检测
如果发现图片、文件等资源信息的HTTP请求来自于其它网站,则阻止盗链请求,节省因盗用资源链接而消耗的带宽和性能

7.2:配置防盗链

7.2.1:实验环境

主机信息 主机功能
server1(192.168.209.134) 被盗链服务器
server2(192.168.209.142) 盗链服务器
客户端 访问验证

7.2.2:server2配置盗链服务器模拟盗链

  • 编译安装nginx,修改首页文件,插入盗链图片
[root@promote ~]# cd /usr/local/nginx/html/
[root@promote html]# vim index.html 
...
14 

Welcome to nginx!

15 插入此行 ...
  • 重启服务,客户端登录验证

Linux--nginx服务优化与深入优化(隐藏版本号、修改用户与组、网页缓存与压缩、日志切割、连接超时、防盗链、fpm参数优化)_第3张图片
图片盗取成功

7.2.3:server1上设置防盗链

  • 修改配置文件
[root@promote nginx]# vim /usr/local/nginx/conf/nginx.conf
...
location ~*\.(jpg|gif|swf)$ {
            valid_referers none blocked *.nxd.com nxd.com;
            if ( $invalid_referer ) {
              rewrite ^/ http://www.nxd.com/error.png;
            }
        }

...
  • 把错误图片上传到站点目录
[root@promote nginx]# cd /usr/local/nginx/html/
[root@promote html]# ls
50x.html  animal.jpg  index.html
[root@promote html]# rz -E
rz waiting to receive.
[root@promote html]# ls
50x.html  animal.jpg  error.png  index.html
  • 重启服务
[root@promote html]# killall -s QUIT nginx
[root@promote html]# nginx
  • 客户端登录验证
    Linux--nginx服务优化与深入优化(隐藏版本号、修改用户与组、网页缓存与压缩、日志切割、连接超时、防盗链、fpm参数优化)_第4张图片

八:fpm参数优化

8.1:FPM模块概述

Nginx的PHP解析功能实现如果是交由FPM处理的,为了提高PHP的处理速度,可对FPM模块进行参数的调整

FPM模块参数调整,要根据服务器的内存与服务负载进行调整

启动fpm进程方式

static:将产生固定数量的fpm进程

dynamic:将以动态的方式产生fpm进程

通过pm参数指定

8.2:FPM参数优化讲解

  • Static的方式的参数
    pm.max_children:指定启动的进程数量
  • Dynamic方式的参数
    pm.max_children:指定启动的进程数量最大的数量
    pm.start_servers:动态方式下初始的m进程数量
    pm.min_spare_servers:动态方式下最小的fpm空闭进程数
    pm.max_spare_servers:动态方式下最大的fpm空闭进程数

8.3:FPM参数优化配置

[root@localhost ~]# vim /usr/local/php/etc/php-fpm.conf
 17 pid = run/php-fpm.pid
 18 pm = dynamic
 19 pm.max_children=20
 20 pm.static_servers = 5
 21 pm.min_spare_servers = 2
 22 pm.max_spare_servers = 8

你可能感兴趣的:(企业平台架构)