Web服务器群集优化(隐藏版本号,缓存时间,日志切割,网页压缩,防盗链优化)

一:Nginx优化与防盗链实验

前言

最近整理了一下Nginx的优化,详细介绍,更改用户与组、配置网页缓存、日志切割、设置连接超时等;
在这里插入图片描述

实验过程

1.1:方法一:配置Nginx隐藏版本号

  • 直接修改
[root@localhost ~]# iptables -F
[root@localhost ~]# setenforce 0
[root@localhost ~]# yum install gcc gcc-c++ pcre pcre-devel zlib-devel -y
  • 解压缩
[root@localhost ~]# cd /opt
[root@localhost opt]# ls
rh
[root@localhost opt]# rz -E
rz waiting to receive.
[root@localhost opt]# tar zxvf nginx-1.12.2.tar.gz 
  • 创建管理用户
[root@localhost nginx-1.12.2]# useradd -M -s /sbin/nologin nginx
  • 编译及安装
[root@localhost nginx-1.12.2]# ./configure \
> --prefix=/usr/local/nginx \
> --user=nginx \
> --group=nginx \
> --with-http_stub_status_module
#编译
[root@localhost nginx-1.12.2]# make
[root@localhost nginx-1.12.2]# make install
  • 路径优化,便于系统管理
[root@localhost nginx-1.12.2]# ln -s /usr/local/nginx/sbin/nginx  /usr/local/bin/
  • 使用service控制
[root@localhost nginx-1.12.2]# vim /etc/init.d/nginx
#!/bin/bash
# chkconfig: - 99 20
# description: Nginx Service Control Script
PROG="/usr/local/nginx/sbin/nginx"
PIDF="/usr/local/nginx/logs/nginx.pid"
case "$1" in
  start)
   $PROG
   ;;
  stop)
   kill -s QUIT $(cat $PIDF)
   ;;
  restart)
   $0 stop
   $0 start
   ;;
  reload)
   kill -s HUP $(cat $PIDF)
   ;;
  *)
                echo "Usage: $0 {start|stop|restart|reload}"
                exit 1
esac
exit 0
#增加权限
[root@localhost nginx-1.12.2]# chmod +x /etc/init.d/nginx 
#重启服务
[root@localhost nginx-1.12.2]# service nginx start
#查看端口
[root@localhost nginx-1.12.2]# netstat -ntap | grep nginx
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      22235/nginx: master 
  • 客户机访问
    mark

  • 使用curl -l命令检测

[root@localhost nginx-1.12.2]# curl -I http://20.0.0.42
HTTP/1.1 200 OK
Server: nginx/1.12.2                        ##版本号
Date: Mon, 10 Aug 2020 07:15:28 GMT
Content-Type: text/html
Content-Length: 612
Last-Modified: Mon, 10 Aug 2020 07:07:32 GMT
Connection: keep-alive
ETag: "5f30f234-264"
Accept-Ranges: bytes
  • 修改配置文件

[root@localhost nginx-1.12.2]# cd /usr/local/nginx/conf/
[root@localhost conf]# ls
fastcgi.conf            koi-utf             nginx.conf           uwsgi_params
fastcgi.conf.default    koi-win             nginx.conf.default   uwsgi_params.default
fastcgi_params          mime.types          scgi_params          win-utf
fastcgi_params.default  mime.types.default  scgi_params.default
[root@localhost conf]# vim nginx.conf

mark

  • 重启服务
lhost conf]# curl -I http://20.0.0.42
HTTP/1.1 200 OK
Server: nginx                ##已经隐藏
Date: Mon, 10 Aug 2020 07:18:56 GMT
Content-Type: text/html
Content-Length: 612
Last-Modified: Mon, 10 Aug 2020 07:07:32 GMT
Connection: keep-alive
ETag: "5f30f234-264"
Accept-Ranges: bytes

1.2:方法二:修改源码

  • Nginx源码文件/usr/src/ nginx-1.12.2/src/ core/nginx. h包含了版本信息,可以随意设置
  • 重新编译安装,隐藏版本信息
  • define NGINX_VERSION “1.2.2″,修改版本号为1.2.2
[root@localhost ~]# iptables -F
[root@localhost ~]# setenforce 0
[root@localhost ~]# cd /opt
[root@localhost opt]# ls
rh
[root@localhost opt]# rz -E
rz waiting to receive.
[root@localhost opt]# ls
nginx-1.12.2.tar.gz  rh
[root@localhost opt]# yum install gcc gcc-c++ pcre pcre-devel zlib-devel -y
[root@localhost opt]# tar zxvf nginx-1.12.2.tar.gz 
[root@localhost nginx-1.12.2]# cd src/
[root@localhost src]# ls
core  event  http  mail  misc  os  stream
[root@localhost src]# cd core/
[root@localhost core]# vim nginx.h
[root@localhost core]# vim nginx.h

mark

  • 创建用户
[root@localhost core]# useradd -M -s /sbin/nologin nginx
  • 编译安装
[root@localhost core]# cd ../../
[root@localhost nginx-1.12.2]# ls
auto     CHANGES.ru  configure  html     man     src
CHANGES  conf        contrib    LICENSE  README
[root@localhost nginx-1.12.2]# ./configure \
> --prefix=/usr/local/nginx \
> --user=nginx \
> --group=nginx \
> --with-http_stub_status_module
#编译
[root@localhost nginx-1.12.2]# make
[root@localhost nginx-1.12.2]# make install
  • 创建软链接进行路径优化
[root@localhost nginx-1.12.2]# ln -s /usr/local/nginx/sbin/nginx  /usr/local/bin/
  • 开启服务
[root@localhost nginx-1.12.2]# nginx
[root@localhost nginx-1.12.2]# netstat -ntap | grep nginx
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      21887/nginx: master 
[root@localhost nginx-1.12.2]# curl -I http://20.0.0.42
HTTP/1.1 200 OK
Server: nginx/1.2.2                     ##已经隐藏修改成功
Date: Mon, 10 Aug 2020 07:28:53 GMT
Content-Type: text/html
Content-Length: 612
Last-Modified: Mon, 10 Aug 2020 07:26:43 GMT
Connection: keep-alive
ETag: "5f30f6b3-264"
Accept-Ranges: bytes

二:修改Nginx用户与组

  • 新建用户账号,如 nginx
  • 修改主配置文件user选项,指定用户账号
  • 重启 nginx服务,使配置生效
  • 使用 ps aux命令查看nginx的进程信息,验证运行用户账号改变效果
[root@localhost nginx-1.12.2]# cd /usr/local/nginx/conf/
[root@localhost conf]# id nobody
uid=99(nobody) gid=99(nobody) 组=99(nobody)
[root@localhost conf]# vim nginx.conf

mark

[root@localhost conf]# service nginx stop
[root@localhost conf]# service nginx start
[root@localhost conf]# ps aux | grep nginx
root      21957  0.0  0.0  20544   608 ?        Ss   15:48   0:00 nginx: master process /usr/local/nginx/sbin/nginx
nginx     21958  0.0  0.0  23072  1384 ?        S    15:48   0:00 nginx: worker process
root      21960  0.0  0.0 112724   988 pts/1    S+   15:48   0:00 grep --color=auto nginx

三:配置Nginx网页缓存时间

  • 当Nginx将网页数据返回给客户端后,可设置缓存时,以方便在日后进行相同的内容请求时直接放回,避免重复请求,加快了访问速度

  • 一般针对静态网页设置,对动态网页不设置缓存时间

设置方法

  • 修改Nginx的配置文件,在location段加入expires参数
[root@localhost conf]# vim nginx.conf

mark

  • 配置首页信息
[root@localhost conf]# cd ..
[root@localhost nginx]# cd html/
#移动一张图片进来
[root@localhost html]# rz -E
rz waiting to receive.
[root@localhost html]# ls
50x.html                              index.html
df3499798e4f5110479f1b4d5c2f2026.jpg
#编辑首页
[root@localhost html]# vim index.html 

mark

  • 重启服务
[root@localhost html]# service nginx stop
[root@localhost html]# service nginx start
  • 宿主机访站点

fiddler抓包查看,已经缓存成功

mark

四:实现Nginx的日志切割

  • 随着Nginx运行时间增加,日志也会增加。为了方便掌
    握Nginx运行状态,需要时刻关注Nginx日志文件

  • 太大的日志文件对监控是一一个大灾难
    定期进行日志文件的切割

  • Nginx自身不具备日志分割处理的功能,但可以通过

    Nginx信号控制功能的脚本实现日志的自动切割

  • 通过Linux的计划任务周期性地进行日志切割

4.1:日志分隔思路

  • 设置时间变量

  • 设置保存日志路径

  • 将目前的日志文件进行重命名

  • 重建新日志文件

  • 删除时间过长的日志文件

  • 设置cron任务,定期执行脚本自动进行日志分割

  • date -d:设置时间格式

[root@localhost html]# date
20200810日 星期一 17:33:31 CST
[root@localhost html]# date -d "-1 day" "+%Y%m%d"
20200809
[root@localhost html]# date -d "0 day" "+%Y%m%d"
20200810
[root@localhost html]# date -d "1 day" "+%Y%m%d"
20200811
[root@localhost html]# date -d "1 day"
20200811日 星期二 17:34:38 CST
  • 编写脚进行日志分割的思路
[root@localhost html]# cd /opt
[root@localhost opt]# ls
nginx-1.12.2  nginx-1.12.2.tar.gz  rh
[root@localhost opt]# vim shuai.sh
#编写以下内容

#!/bin/bash
#Filename:shuai.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}/tase.cpm-access.log-$d
#生成新日志
kill -USR1 $(cat $pid_path)
#删除30天前的日志
find $logs_path -mtime +30 | xargs rm -rf

#增加权限
[root@localhost opt]# chmod +x shuai.sh 
  • 运行脚本
[root@localhost nginx]# cd /opt/
[root@localhost opt]# ./shuai.sh 
[root@localhost opt]# ls /var/log/nginx/
tase.cpm-access.log-20200809                   #已经生成日志文件了
  • 定时任务
[root@localhost opt]# crontab -e
#每天一点定时任务
0 1 * * * /opt/shuai.sh
crontab: installing new crontab

五:配置Nginx实现连接超时

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

    Keepalive_timeout
    设置连接保持超时时间
    Client_header_timeout
    指定等待客户端发送请求头的超时时间
    Client_body_timeout
    设置请求体读超时时间
    
    • 修改配置
    [root@localhost opt]# cd /usr/local/nginx/conf/
    [root@localhost conf]# ls
    fastcgi.conf            nginx.conf
    fastcgi.conf.default    nginx.conf.default
    fastcgi_params          scgi_params
    fastcgi_params.default  scgi_params.default
    koi-utf                 uwsgi_params
    koi-win                 uwsgi_params.default
    mime.types              win-utf
    mime.types.default
    [root@localhost conf]# vim nginx.conf
    

    mark

第一个是客户端的超时时间,第二个是服务端的超时时间,参数放在http中以上就是进行超时时间的设置

六:nginx运行进程数

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

  • 可以使用 ps auxi命令查看Ngnx运行进程的个数

  • 更改进程数的配置方法

    修改配置文件,修改进程配置参数

  • 修改配置文件的 worker_ processes参数

    一般设为CPU的个数或者核数

    在高并发情况下可设置为CPU个数或者核数的2倍

  • 运行进程数多一些,响应访问请求时, Nginx就不会临时启动新的进程提供服务,减少了系统的开销,提升了服务速度

  • 使用 ps aux查看运行进程数的变化情况

  • 默认情况, Nginx的多个进程可能跑在一个cPU上,可以分配不同的进程给不同的CPU处理,充分利用硬件多核多CPU

  • 在一台4核物理服务器,可进行以下配置,将进程进行分配

    Worker_cpu_affinity 0001 0010 0100 1000 ‘//核心数的序列位置’

#查看cpu核心
[root@localhost conf]# cat /proc/cpuinfo | grep -c "physical"
8

mark

重启服务

[root@localhost conf]# service nginx stop
[root@localhost conf]# service nginx start
[root@localhost conf]# ps aux | grep nginx       #一个进程包含一个子进程
root      24803  0.0  0.0  20544   612 ?        Ss   18:59   0:00 nginx: master process /usr/local/nginx/sbin/nginx
nginx     24804  0.0  0.0  23072  1388 ?        S    18:59   0:00 nginx: worker process
nginx     24805  0.0  0.0  23072  1388 ?        S    18:59   0:00 nginx: worker process
nginx     24806  0.0  0.0  23072  1388 ?        S    18:59   0:00 nginx: worker process
nginx     24807  0.0  0.0  23072  1388 ?        S    18:59   0:00 nginx: worker process
root      24809  0.0  0.0 112724   988 pts/1    S+   18:59   0:00 grep --color=auto nginx

七:配置Nginx实现网页压缩功能

  • Nginx的ngx_htto_gzip_ module压缩模块提供对文件内容压缩的功能

  • 允许Nginx服务器将输出内容在发送客户端之前进行压缩,以节约网站带宽,提升用户的访问体验,默认已经安装

  • 可在配置文件中加入相应的压缩功能参数对压缩性能进行优化

  • 优化网页压缩设置

[root@localhost conf]# vim /usr/local/nginx/conf/nginx.conf
#搜索gzip on 第一行取消注释
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;
  • 重启服务
[root@localhost conf]# service nginx stop
[root@localhost conf]# service nginx start
  • 宿主机测试点击刷新

mark

八:防盗链优化

防盗链概述

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

使用三台主机模拟防盗链

服务端 20.0.0.43

[root@tom03 ~]# iptables -F
[root@tom03 ~]# setenforce 0
[root@tom03 ~]# yum install gcc gcc-c++  pcre pcre-devel zlib-devel -y
#创建用户
[root@tom03 ~]# useradd -M -s /sbin/nologin nginx
[root@tom03 ~]# cd /opt
[root@tom03 opt]# rz -E
rz waiting to receive.
[root@tom03 opt]# ls
awstats-7.6.tar.gz  nginx-1.12.2.tar.gz  rh
[root@tom03 opt]# tar zxvf nginx-1.12.2.tar.gz 
[root@localhost nginx-1.12.2]# ./configure \
> --prefix=/usr/local/nginx \
> --user=nginx \
> --group=nginx \
> --with-http_stub_status_module
#编译
[root@localhost nginx-1.12.2]# make
[root@localhost nginx-1.12.2]# make install

使用service控制

[root@tom03 nginx-1.12.2]# cd /etc/init.d/
[root@tom03 init.d]# vim nginx
#编写以下内容 
#!/bin/bash
# chkconfig: - 99 20
# description: Nginx Service Control Script
PROG="/usr/local/nginx/sbin/nginx"
PIDF="/usr/local/nginx/logs/nginx.pid"
case "$1" in
  start)
   $PROG
   ;;
  stop)
   kill -s QUIT $(cat $PIDF)
   ;;
  restart)
   $0 stop
   $0 start
   ;;
  reload)
   kill -s HUP $(cat $PIDF)
   ;;
  *)
                echo "Usage: $0 {start|stop|restart|reload}"
                exit 1
esac
exit 0
#增加权限
[root@tom03 init.d]# chmod +x nginx 
[root@tom03 init.d]# netstat -anpt | grep nginx
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      86849/nginx: master 
#路径优化,便于系统管理
[root@tom03 init.d]# ln -s /usr/local/nginx/sbin/nginx /usr/local/bin/
#验证
[root@tom03 init.d]# 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@tom03 init.d]# service nginx start
#查看端口
[root@tom03 init.d]# netstat -ntap | grep nginx
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      86913/nginx: master 

编辑首页文件

[root@tom03 nginx]# cd html/
[root@tom03 html]# ls
50x.html  index.html
#随便找一张图片进来
[root@tom03 html]# rz -E
rz waiting to receive.
[root@tom03 html]# ls
138171822818.jpg  50x.html  index.html
[root@tom03 html]# vim index.html 

mark

安装DNS服务

[root@tom03 html]# yum -y install bind
  • 配置区域文件
[root@tom03 html]# vim /etc/named.conf

mark

  • 配置区域
[root@tom03 html]# vim /etc/named.rfc1912.zones 

mark

  • 配置区域数据
[root@tom03 ~]# cd /var/named/
[root@tom03 named]# ls
abc.com.zone  dynamic   named.empty      named.loopback
data          named.ca  named.localhost  slaves
[root@tom03 named]# cp -p named.localhost abc.com.zone 
[root@tom03 named]# vim abc.com.zone

mark

客户机访问测试

mark

mark

九:下面设置盗链

  • 客户机IP 20.0.0.42

  • 安装apache

[root@localhost ~]# yum -y install httpd
  • 配置监听端口跟域名
[root@localhost ~]# vim /etc/httpd/conf/httpd.conf 

#开启本地监听断开   ipv6端口注释
Listen 20.0.0.42:80
#Listen 80
#搜索Server
ServerName www.ab.com:80
  • 配置站点信息
[root@localhost ~]# cd /var/www/html/
[root@localhost html]# ls
index.html
[root@localhost html]# vim index.html

<h1>this is ab web</h1>
<img src="http://www.abc.com/138171822818.jpg"/>
#域名指向
[root@localhost html]# echo "nameserver 20.0.0.43" > /etc/resolv.conf 
#重启服务
[root@localhost html]# systemctl start httpd
  • 客户机访问测试
    mark

  • 防盗链步骤

  • 客户端配置

[root@tom03 ~]# cd /usr/local/nginx/conf/
[root@tom03 conf]# vim nginx.conf
#添加以下内容

mark

  • 编辑站点目录
[root@tom03 html]# pwd
/usr/local/nginx/html
[root@tom03 nginx]# cd html/
[root@tom03 html]# ls
138171822818.jpg  50x.html  index.html
#复制一张图片进来
[root@tom03 html]# rz -E
rz waiting to receive.
[root@tom03 html]# ls
138171822818.jpg  1389753641370.jpg  50x.html  index.html
  • 配置防盗图片指向
[root@tom03 html]# vim /usr/local/nginx/conf/nginx.conf

在这里插入图片描述

  • 重启服务
[root@tom03 html]# service nginx stop
[root@tom03 html]# service nginx start
  • 宿主机再次访问,访问前把浏览器缓存清空一下
    mark

十:对FPM模块进行参数优化

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

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

10.1:启动fpm进程方式

  • static:将产生固定数量的fpm进程
  • dynamic:将以动态的方式产生fpm进程
  • 通过pm参数指定

10.2:FPM优化参数讲解

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

最小空闲进程数是在不着急的时候最少的进程数

主要看设置的空闲占用率

10.3:FPM优化参数调整示例

  • 优化原因:服务器为云服务器,运行了个人论坛,内存为1.5G,fpm进程数为20,内存消耗近1G,处理比较慢
  • 优化参数调整
    • FPM启动时有5个进程,最小空闲2个进程,最大空闲8个进程,最多可以有20个进程的存在
[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

servers:动态方式下初始的fpm进程数量

  • pm.min_spare_servers:动态方式下最小的fpm空闲进程数
  • pm.max_spare_servers:动态方式下最大的fpm空闲进程数

最小空闲进程数是在不着急的时候最少的进程数

主要看设置的空闲占用率

10.4:FPM优化参数调整示例

  • 优化原因:服务器为云服务器,运行了个人论坛,内存为1.5G,fpm进程数为20,内存消耗近1G,处理比较慢
  • 优化参数调整
    • FPM启动时有5个进程,最小空闲2个进程,最大空闲8个进程,最多可以有20个进程的存在
[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

处理比较慢

  • 优化参数调整
    • FPM启动时有5个进程,最小空闲2个进程,最大空闲8个进程,最多可以有20个进程的存在
[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

servers:动态方式下初始的fpm进程数量

  • pm.min_spare_servers:动态方式下最小的fpm空闲进程数
  • pm.max_spare_servers:动态方式下最大的fpm空闲进程数

最小空闲进程数是在不着急的时候最少的进程数

主要看设置的空闲占用率

10.4:FPM优化参数调整示例

  • 优化原因:服务器为云服务器,运行了个人论坛,内存为1.5G,fpm进程数为20,内存消耗近1G,处理比较慢
  • 优化参数调整
    • FPM启动时有5个进程,最小空闲2个进程,最大空闲8个进程,最多可以有20个进程的存在
[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

本章结束,感谢观看

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值