• Apache服务器优化


    1、为什么要优化apache
    在用户访问比较大时,apache工作效率会变低,在不提升硬件配置的情况下,优化apahce服务,能够缓解或增加访问量。提升web站点的安全性,提升数据流量等。

    2、9种常用的优化方式
    1.保持连接:保持客户端和web服务器之间的会话连接,减少三次握手和四次挥手的次数。
    2.网页压缩:web服务器传输数据时,对数据进行压缩,节省流量。
    3.网页缓存时间:调整网页缓存时间的长短
    4.隐藏apache版本号:防止黑客通过版本号找到漏洞。
    5.防盗链:防止其他网站盗链本站点的图片或视频,减少CPU运算量。
    6.ab压力测试:测试服务器和apache服务的访问量,并发量等
    7.apache日志分析:查看apache的日志,分析访问状态,统计访问数据。
    8.apache日志分割:多个日志文件同时记录日志信息,大并发量访问时的日志写入。
    9.apache工作模式:调整工作模式,完成不同并发量的处理。

    保持会话

    客户端在访问过程中,会发送链接请求(三次握手)和断开请求(四次挥手),而且是每个页面访问会发送一次。大量的链接请求占用网络带宽和服务器的CPU运算。

    配置选项:
    httpd.conf文件中添加选项:

    keepalive  ON|OFF		是否打开保持连接功能。根据网站的并发请求量决定是否打开,高并发时打开,并发量不高时可选择关闭。
    keepalive  timeout		一次TCP连接多次HTTP请求之间的最大间隔时间,两次HTTP请求超过此时间连接将会断开。默认5秒
    MaxKeepAliveRequests	一次TCP连接能够传输的最大HTTP请求数量。默认100
    
    • 1
    • 2
    • 3

    vim /etc/httpd/conf/httpd.conf

    # 添加:
    keepalive on
    keepalivetimeout 60
    maxkeepaliverequests 300
    
    • 1
    • 2
    • 3
    • 4

    网页压缩

    对web服务器发送的数据使用gzip格式进行压缩后,传输给浏览器,能够加快网页加载的速度,节省带宽,有利于搜索引擎抓取。但是会占用一定的CPU运算量。

    Apache支持的压缩模块:
    mod_gzip: 类似gzip算法,压缩速度略慢,压缩比例高,CPU占用略高,适用于访问量比较低的服务器。
    mod_deflate:类似gzip算法,压缩速度略快,压缩比例低,CPU占用低,适用于访问量比较高的服务器。
    DEFLATE是同时使用了LZ77算法与哈夫曼编码(Huffman Coding)的一个无损数据压缩算法。
    安装开源apache时,输入配置选项 --enable-deflate 启用压缩算法。(启用deflate模块,注意必须安装依赖包“zlib-devel”) deflate:缩小
    AddOutputFilterByType DEFLATE text/html text/plain text/css text/xml text/javascript 对什么格式的内容启用压缩
    DeflateCompressionLevel 9 压缩级别为9,范围是1-9,数字大压缩率高
    SetOutputFilter DEFLATE 启用deflate压缩方式

    vim /etc/httpd/conf/httpd.conf

    # 添加:
    AddoutputFilterByType  DEFLATE  text/html  text/plain  text/css  text/xml text/javascript
    DeflateCompressionLevel  9
    SetOutputFilter  deflate
    
    • 1
    • 2
    • 3
    • 4

    apache页面缓存时间

    1.客户端能够对网页内容进行缓存的集中情况:
    1)服务器允许客户端进行页面缓存
    2)服务器站点是静态页面
    3)动态网站只能缓存结构,不能缓存数据库中的数据。
    4)图片,视频,flash等可以缓存,但不能缓存人机对话的内容(游戏类)。
    2.缓存的作用:
    1)能够加快客户端访问重复页面内容的速度,如刷新页面或返回主页,后退等操作。
    2)节省服务器的数据处理量和数据传输量。

    3.配置选项:
    vim /etc/httpd/conf/httpd.conf

    # 添加:
    <IfModule mod_expires.c>
      ExpiresActive On     						##启用页面缓存时间
      ExpiresDefault "access plus 60 seconds"  	##设置默认缓存1分钟  
    </IfModule>
    
    • 1
    • 2
    • 3
    • 4
    • 5

    4.源代码安装的apache需要在安装前配置模块

    --enable-expires 启用缓网页缓存过期时间模块(expires:到期,终止,有效期)
    启用mod_expires模块后,会自动生成页面头部信息中的Expires标签和CacheControl标签,从而降低客户端的访问频率和次数,达到减少不必要的流量和增加访问速度的目的。

    隐藏apache的版本号

    作用:防止黑客通过查询版本号,检测到响应的漏洞进行攻击。

    1.rpm安装的apache修改方式:

    vim /etc/httpd/conf/httpd.conf

    # 添加:
    ServerTokens Prod         ##显示最少的信息,默认是Full显示完整信息    tokens:象征            prod:元素积   signature:签名,部署
    ServerSignature Off  	  ##生成页面的页脚
    
    • 1
    • 2
    • 3

    2.源代码安装的apache修改方式:

    vim /usr/local/httpd/conf/httpd.conf

    # 添加:
    ServerTokens Prod         ##显示最少的信息,默认是Full显示完整信息
    ServerSignature Off  	  ##生成页面的页脚
    
    • 1
    • 2
    • 3

    书上的方法:
    方法二:如果是编译安装的 apache,我们可以做以下操作
    进入 Apache的源码目录下的include目录,编辑 ap_release.h这个文件如下变量,然后重新编译安装即可

     #detine AP_SERVER BASEVENDOR "Apache Software Foundation
     #define AP_SERVER_BASEPROJECT "Apache HTTP  server"
     #define AP_SERVER_BASEPRODUCT "Apache" 
     #define AP_SERVER_MAJORVERSION_NUMBER 2 
     #define AP_SERVER_MINORVERSION NUMBER 2 
     #define AP_SERVER_PATCHLEVEL_NUMBER 15
     #define AP_SERVER_DEVBUILD_BOOLEAN 0
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    可以根据自己喜好,修改或隐藏版本号与名字。

    防盗链

    作用:本地网站上传的图片被其他网站盗用,在大量用户访问的情况下,本地网站的CPU运算量会大幅度提升。防盗链是为了禁止其他网站链接图片。

    超链接:点击超链接后,页面会转到指定的位置。
    盗链:在页面中显示其他指定页面的内容,由其他服务器进行运算。
    配置选项:

    RewriteEngine ON           		#打开网页重写功能
    RewriteCond                     #设置匹配规则
    RewriteRule                     #设置跳转动作
    
    • 1
    • 2
    • 3

    rewrite 的规则:%{HTTP_REFERER} 浏览header中的链接字段,存放一个连接的URL,代表是从哪个链接访问所需的网页。

    !^	不以某个字段开头
    .*$	以任意字符结尾
    NC	不区分大小写
    R强制跳转
    
    • 1
    • 2
    • 3
    • 4

    规则匹配:如果相应变量的值匹配所设置的规则,则逐条往下处理。如果不匹配,则后面的规则不在继续匹配。

    vim  /etc/httpd/conf/httpd.conf
    在默认站点发布容器<Directory /var/www/html></Directory>中添加: 
    
    rewriteengine on
    	RewriteCond %{HTTP_REFERER} !^http://本地域名或IP地址/.*$  [NC]	   #格式:gg.cn            engine:引擎  cond:条件
    	RewriteCond %{HTTP_REFERER} !^http://本地域名或IP地址$  [NC]
    	RewriteCond %{HTTP_REFERER} !^http://本地完整域名或IP地址/.*$  [NC]	#格式:www.gg.cn
    	RewriteCond %{HTTP_REFERER} !^http://本地完整域名或IP地址$  [NC]
    	RewriteRule .*gif|jpg|png|swfgif|jpg|png|swf$ http://本地完整域名或IP地址/error.html  [R,NC]
    	
    	Require all granted(自带的)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    ab站点压力测试

    作用:对服务器的高并发量模式工作,或高数据流传输工作进行测试,保障服务器上线后的稳定性。

    使用Apache自带的ab命令进行优化效果的测试。

    # 语法:
    ab  -n 请求数总和  -c  并发用户数  网站网址
    ab -n 10000 -c 1000  http://192.168.10.2/index.html
    
    # 重要参数: 
     Time taken for tests		#表示所有这些请求被处理完成所花费的总时间
     Failed requests         	#表示失败的请求数量
     Requests per second 		#吞吐率。计算公式: Complete requests / Time taken for tests
     Transfer rate              #表示这些请求在单位时间内从服务器获取的数据长度》
     
    # 计算公式:
    Total trnasferred/ Time taken for tests,这个统计很好的说明服务器的处理能力达到极限时,其出口带宽的需求量。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    压力测试过程中,除ab以外,还会使用以下方法:
    1.使用黑客工具对端口并发链接进行测试,如DDOS测试
    2.使用多用户在线访问测试。如:将服务器挂在广域网后,找很多用户在线测试(公测)
    3.通过虚拟客户端,使用测试工具进行高并发量测试。
    4.找专业测试团队进行测试。

    日志分析

    作用:查看服务器的实时运行情况,比如哪些URL的访问请求数量最大+服务器每秒的请求数,制定正对性的优化方案。
    安装软件:awstats(日志分析,工具)

    安装awstats步骤:

    1.解压软件
    tar -zxvf awstats-7.3.tar.gz -C /usr/src
    
    2.复制软件到local目录
    cd /usr/src
    mv awstats-7.3/ /usr/local/awstats
    cd /usr/local/awstats/tools
    
    3.给脚本添加可执行权限
    chmod a+x awstats_configure.pl awstats_updateall.pl
    
    4.执行配置脚本
    ./awstats_configure.pl
    在以下标记方框的位置输入相关信息,
    ~输入web服务器的完整配置文件路径——“y”
    ~定义要创建的配置文件名(www.zhz666.com)
    ~定义配置文件路径(回车—回车—回车)
    
    5.在hosts文件中添加域名
    [root@localhost tools]# echo  "192.168.10.1  www.guiguedu.cn" >> /etc/hosts
    
    6.配置awstats配置文件,修改apache日志文路径
    [root@localhost tools]# vim /etc/awstats/awstats.www.guiguedu.cn.conf 
    修改:
    LogFile="/var/log/httpd/access_log"               50G
    
    7.修改apache配置文件,修改访问权限
    [root@localhost tools]# vim /etc/httpd/conf/httpd.conf
    修改最后几行:
    <Directory "/usr/local/awstats/wwwroot">
        Options None
        AllowOverride None
        Order allow,deny
        Allow from all
        require all granted             #关键操作
    </Directory>
    [root@localhost tools]# systemctl restart httpd
    
    8.设置awstats目录的属主
    [root@localhost tools]# chown -R apache:apache /usr/local/awstats/
    [root@localhost tools]# mkdir /var/lib/awstats
    [root@localhost tools]# chown apache:apache /var/lib/awstats/
    
    9.立刻更新日志记录【可省】
    [root@localhost tools]# /usr/local/awstats/tools/awstats_updateall.pl now
    
    10.创建计划任务,每分钟更新一次【可省】
    [root@localhost tools]# crontab -e
    添加:
    */1 * * * *    /usr/local/awstats/tools/awstats_updateall.pl  now  &> /dev/null
    
    11.访问awstats主页
    [root@localhost tools]# firefox http://www.guiguedu.cn/awstats/awstats.pl
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53

    日志分割

    作用:如果Apache的访问量特别大,对于写日志的过程来说,将变成一种负担,我们需要使用多台服务器或多个文件进行日志的记录。
    方法:
    使用Apache自带的日志轮循程序写入工具rotatelogs进行日志分隔。
    1、配置httpd.conf,定义日志名称

    vim  /etc/httpd/conf/httpd.conf
    修改:
    CustomLog "| /sbin/rotatelogs -l /var/log/httpd/access_%Y%m%d%H%M%S.log 2" combined
    解释:
    2秒切割一次日志文件(切割日志时间频率可以自行改变,根据PV来决定)       -l选项是小写的L表示local time(本地时间)
    
    • 1
    • 2
    • 3
    • 4
    • 5

    2、重启服务器
    3、客户端访问页面,查看日志文件

    ll /var/log/httpd/
    
    • 1

    合并日志: 可以将每个服务器每天的日志文件通过 rsync 下载到专门进行访问统计分析的服务器上进行合并。合并多个服务器的日志文件,例如: log1 log2 log3 并输出到 log_all 中的方法是:
    sort -m -t " " -k 4 -o log_all access_log1 access_log2 access_log3(这些名字要对应查看到的“日志文件”)

    # 解释:
    -m 		使用 merge 优化算法
    -t 		指定排序的分割符
    -k 4 	指定排序时行中多列时,排序的依据列为哪列,表示根据时间进行排序
    -o 		表示将排序结果存放到指定的文件中
    
    # 例:
    sort -m -t " " -k 4 -o access_all_log access_20200414095902.log access_20200414095904.log access_20200414095906.log access_20200414095908.log
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    apache工作模式优化

    修改工作模式:(删除#号的事情)

    vim /etc/httpd/conf.modules.d/00-mpm.conf

    # 修改:
    LoadModule mpm_worker_module modules/mod_mpm_worker.so                   worker:工作(多进程多线程)             module:模块         event:事件(worker模式的变种)
    # 或者
    LoadModule mpm_event_module modules/mod_mpm_event.so
    
    • 1
    • 2
    • 3
    • 4

    拓展:

    Linux httpd命令是Apache HTTP服务器程序。
    httpd为Apache HTTP服务器程序。直接执行程序可启动服务器的服务。

    # 语法
    httpd [-hlLStvVX][-c<httpd指令>][-C<httpd指令>][-d<服务器根目录>][-D<设定文件参数>][-f<设定文件>]
    
    # 参数说明:
    [root@localhost ~]# httpd -help
    -c<httpd指令> 在读取配置文件前,先执行选项中的指令。
    -C<httpd指令> 在读取配置文件后,再执行选项中的指令。
    -d<服务器根目录> 指定服务器的根目录。
    -D<设定文件参数> 指定要传入配置文件的参数。
    -f<设定文件> 指定配置文件。
    -h 显示帮助。
    -l 显示服务器编译时所包含的模块。
    -L 显示httpd指令的说明。
    -S 显示配置文件中的设定。
    -t 测试配置文件的语法是否正确。
    -v 显示版本信息。
    -V 显示版本信息以及建立环境。
    -X 以单一程序的方式来启动服务器。
    
    # 例:
    [root@localhost ~]# httpd -t             检查配置文件语法错误 
    AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using localhost.localdomain. Set the 'ServerName' directive globally to suppress this message
    Syntax OK
    [root@localhost ~]# httpd -l             显示编译模块
    Compiled in modules:
      core.c
      mod_so.c
      http_core.c
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28

    Never put off till tomorrow what you can do today…

  • 相关阅读:
    LeetCode 环形链表 II(C语言)
    Redis哨兵模式
    GO实现Redis:GO实现内存数据库(3)
    桌面云架构讲解(VDI、IDV、VOI/TCI、RDS)
    C++面试题(丝)-计算机网络部分(1)
    力扣-350.两个数组的交集||
    Oracle-Autoupgrade方式升级19c
    Day16--加入购物车-动态设置tabBar的数组徽标
    linux下的文件的压缩和解压缩
    Vue2-低版本编译兼容-基础语法-data-methods-双向数据绑定v-model
  • 原文地址:https://blog.csdn.net/qq_50573146/article/details/126883170