• apache的一般优化


    开启输出压缩

    (1)编辑配置文件开启模块

    # vim conf/httpd.conf                              # 将以下三行取消注释
    
    LoadModule deflate_module modules/mod_deflate.so
    LoadModule headers_module modules/mod_headers.so
    LoadModule filter_module modules/mod_filter.so

    其中:

    mod_deflate是压缩模块,就是对要传输到客户端的代码进行gzip压缩;mod_headers模块的作用是告诉浏览器页面使用了gzip压缩,如果不开启mod_headers那么浏览器就会对gzip压缩过的页面进行下载,而无法正常显示。

    (2)压缩设置

    将以下配置添加到httpd.conf的最后一行,如果是云厂商的虚拟主机,可以将以下配置添加到伪静态文件.htaccess中

    添加完成以后,可以进行语法检查 # httpd -t

    <IfModule mod_deflate>
        SetOutputFilter DEFLATE    # 必须的,就像一个开关一样,告诉apache对传输到浏览器的内容进行压缩
    
        SetEnvIfNoCase Request_URI .(?:gif|jpe?g|png)$ no-gzip dont-vary # 设置不对后缀gif,jpg,jpeg,png的图片文件进行压缩
        SetEnvIfNoCase Request_URI .(?:exe|t?gz|zip|bz2|sit|rar)$ no-gzip dont-vary # 同上,就是设置不对exe,tgz,gz。。。的文件进行压缩
        SetEnvIfNoCase Request_URI .(?:pdf|mov|avi|mp3|mp4|rm)$ no-gzip dont-vary
    
        AddOutputFilterByType DEFLATE text/* #设置对文件是文本的内容进行压缩,例如text/html  text/css  text/plain等
        AddOutputFilterByType DEFLATE application/ms* application/vnd* application/postscript application/javascript application/x-javascript #这段代码你只需要了解application/javascript application/x-javascript这段就可以了,这段的意思是对javascript文件进行压缩
        AddOutputFilterByType DEFLATE application/x-httpd-php application/x-httpd-fastphp #这段是告诉apache对php类型的文件进行压缩
    
        BrowserMatch ^Mozilla/4 gzip-only-text/html # Netscape 4.x 有一些问题,所以只压缩文件类型是text/html的
        BrowserMatch ^Mozilla/4.0[678] no-gzip # Netscape 4.06-4.08 有更多的问题,所以不开启压缩
        BrowserMatch MSIE !no-gzip !gzip-only-text/html # IE浏览器会伪装成 Netscape ,但是事实上它没有问题
    </IfModule>

    启用缓存mod_expires

    这个是非常有用的优化,mod_expires可以减少20-30%左右的重复请求,让重复的用户对指定的页面请求结果都cache在本地,根本不向服务器发出请求。但要注意更新快的文件不要这么做。
    这个模块控制服务器应答时的Expires头内容和Cache-Control头的max-age指令。有效期(expirationdate)可以设置为相对于源文件的最后修改时刻或者客户端的访问时刻。

    测试未开启缓存的情况

    [root@localhost http-2.4.48]# curl -I 10.0.0.10/1.jpg
    HTTP/1.1 200 OK
    Date: Tue, 01 Jun 2021 08:41:59 GMT
    Server: Apache/2.4.48 (Unix)
    Last-Modified: Tue, 01 Jun 2021 08:41:59 GMT
    ETag: W/"10e66-5c42475562580"
    Accept-Ranges: bytes
    Content-Length: 69222
    Content-Type: image/jpeg

    开启缓存功能

    # vim conf/httpd.conf
    
    LoadModule expires_module modules/mod_expires.so   # 取消注释

    增加配置

    <IfModule mod_expires.c>
    ExpiresActive On
    ExpiresByType text/css "now plus 1 month"
    ExpiresByType application/x-javascript "now plus 5 day"
    ExpiresByType image/jpeg "access plus 1 month"
    ExpiresByType image/gif "access plus 1 month"
    ExpiresByType image/bmp "access plus 1 month"
    ExpiresByType image/x-icon "access plus 1 month"
    ExpiresByType image/png "access plus 1 minutes"
    ExpiresByType application/x-shockwave-flash "access plus 1 month"
    ExpiresDefault "now plus 0 minutes"
    </IfModule> 

    访问测试

    [root@localhost http-2.4.48]# curl -I 10.0.0.10/1.jpg
    HTTP/1.1 200 OK
    Date: Tue, 01 Jun 2021 08:42:20 GMT
    Server: Apache/2.4.48 (Unix)
    Last-Modified: Tue, 01 Jun 2021 08:42:20 GMT
    ETag: W/"10e66-5c42475562580"
    Accept-Ranges: bytes
    Content-Length: 69222
    Cache-Control: max-age=2592000
    Expires: Thu, 01 Jul 2021 08:42:20 GMT
    Content-Type: image/jpeg

     ExpiresDefault 和ExpiresByType的语法

    其中<base>是下列之一:
    • access
    • now(等价于'access ')
    • modification      
    
    plus关键字是可选的。<num>必须是整数,
    <type>是下列之一:
    • years //
    • months//
    • weeks//星期 
    • days/日 
    • hours/时 
    • minutes/分 
    • seconds/秒

    注意:

    如果你使用基于最后修改日期的设置,"Expires:"头将不会 被添加到那些并非来自于磁盘文件的内容。这是因为这些内容并不存在"最后修改时间"的属性。

     #GIF有效期为1个月(秒数)

    ExpiresByType image/gif A2592000 
    ExpiresByType image/jpeg A2592000 
    ExpiresByType image/png A2592000 
    ExpiresByType image/x-icon A2592000 
    ExpiresByType application/x-javascript A604800 
    ExpiresByType text/plain A604800

    HTML文档的有效期是最后修改时刻后的一星期 

    ExpiresByType text/html M604800 

    注意:

    以上"M"表示源文件的最后修改时刻,"A"表示客户端对源文件的访问时刻。后面的时间则以秒计算。

    Apache禁止目录遍历

    将主配置文件 httpd.conf 中 Options Indexes FollowSymLinks中的Indexes 去掉,就可以禁止 Apache 显示该目录结构。

    注意:

    Indexes 的作用就是当该网站目录下没有 index.html文件时,就会显示目录结构。

    Apache隐藏版本信息

    方法一:

    修改主配置httpd.conf文件,取消下面行的注释

    Include conf/extra/httpd-default.conf

    修改conf/extra/httpd-default.conf

    ServerTokens Prod
    
    ServerSignature Off

    重启apache后访问测试

    [root@localhost http-2.4.48]# curl -I 10.0.0.10/1.jpg
    HTTP/1.1 200 OK
    Date: Tue, 01 Jun 2021 10:25:19 GMT
    Server: Apache
    Last-Modified: Tue, 01 Jun 2021 10:25:19 GMT
    ETag: W/"10e66-5c42475562580"
    Accept-Ranges: bytes
    Content-Length: 69222
    Cache-Control: max-age=2592000
    Expires: Thu, 01 Jul 2021 10:25:19 GMT
    Content-Type: image/jpeg

    官方给出的配置说明(http://httpd.apache.org/docs/2.4/mod/core.html#serversignature)

    ServerTokens Full (or not specified)
    Server sends (e.g.): Server: Apache/2.4.2 (Unix) PHP/4.2.2 MyMod/1.2
    ServerTokens Prod[uctOnly]
    Server sends (e.g.): Server: Apache
    ServerTokens Major
    Server sends (e.g.): Server: Apache/2
    ServerTokens Minor
    Server sends (e.g.): Server: Apache/2.4
    ServerTokens Min[imal]
    Server sends (e.g.): Server: Apache/2.4.2
    ServerTokens OS
    Server sends (e.g.): Server: Apache/2.4.2 (Unix)

    如果你需要彻底将版本之类的信息进行改头换面,你就需要在编译之前做准备或者进行从新编译了。在重新编译时,修改源码包下include目录下的ap_release.h文件

    #define 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 4              #小版本号
    #define AP_SERVER_PATCHLEVEL_NUMBER 23              #补丁级别
    #define AP_SERVER_DEVBUILD_BOOLEAN  0  

    日志分割

    使用rotatelogs(apache自带的工具)每隔一天记录一个日志

    (1)编辑Apache的主配置文件,更改内容如下:
    注释掉如下两行:

    ErrorLog logs/error_log
    CustomLog logs/access_log common

    然后添加如下两行:

    ErrorLog "|/opt/softwares/http-2.4.23/bin/rotatelogs -l logs/error_%Y%m%d.log 86400"
    CustomLog "|/opt/softwares/http-2.4.23/bin/rotatelogs -l logs/access_%Y%m%d.log 86400" combined

    注意:其中86400为轮转的时间单位为秒

    (2.)重启Apache验证:查看logs目录下的日志文件

    # systemctl restart httpd
    
    [root@localhost http-2.4.48]# ll logs/
    total 28
    -rw-r--r--. 1 root root  255 May 31 06:46 access_20210531.log
    -rw-r--r--. 1 root root 2759 Jun  1  2021 access_log
    -rw-r--r--. 1 root root  818 May 31 06:42 error_20210531.log
    -rw-r--r--. 1 root root 8458 Jun  1  2021 error_log
    -rw-r--r--. 1 root root    6 May 31 06:42 httpd.pid

    apache配置禁止使用IP访问

    1、修改主配置文件httpd.conf,

    # Virtual hosts
    Include conf/extra/httpd-vhosts.conf

    2、修改conf/extra/httpd-vhosts.conf

    2.4.1版本之前

    <VirtualHost 10.*.*.*>
          ServerName 10.*.*.*
    
          ServerAlias 10.*.*.*
    
          <Location />
    
              Order Allow,Deny
    
              Deny from all
    
          </Location>
    
    </VirtualHost>
    
    #<VirtualHost 10.0.0.*>
    #
    #       DocumentRoot htdocs
    #       ServerName www.test.com
    #
    #</VirtualHost>

    2.4.1版本以后

    #禁止所有非法域名
    <VirtualHost *:80>
            ServerName 10.0.0.10
            ServerAlias *
            <Location />
                    Order Allow,Deny
                    Deny from all
            </Location>
    </VirtualHost>
    
    #允许访问的域名
    <VirtualHost *:80>
            DocumentRoot htdocs
            ServerName www.test.com
            ServerAlias www.test.com
            <Directory "htdocs">
                Options Indexes FollowSymLinks
                AllowOverride all
                Order allow,deny
                Allow from all
            </Directory>
            <IfModule mod_rewrite.c>
                    RewriteEngine On
                    RewriteRule ^(.*)-htm-(.*)$ .php?
                    RewriteRule ^(.*)/simple/([a-z0-9\_]+.html)$ /simple/index.php?
            </IfModule>
            #错误日志保存位置
            ErrorLog "logs/test.error.log"
            CustomLog "logs/test.access.log" combined
    </VirtualHost>

    这时使用域名可以访问,使用IP就无法访问了

    keepalive

    TCP连接建立后,每个资源获取完成后不会断开连接,继续进行其他资源请求的进行,同时为了避免大量的连接被占据,可以从数量和时间上两个维度进行限制

    1、配置参数

    KeepAlive On
    
    MaxKeepAliveRequests 100
    
    KeepAliveTimeout 5

    2、测试 使用Telnet测试访问web服务

    先关闭keepalive

    KeepAlive Off

    使用Telnet测试

    [root@localhost http-2.4.48]# telnet 10.0.0.10 80
    Trying 10.0.0.10...
    Connected to 10.0.0.10.
    Escape character is '^]'. 
    GET /index.html HTTP/1.1                          # 包括下面那一行 都是手动输入的,输入完按回车
    Host:10.0.0.10 
    
    HTTP/1.1 200 OK
    Date: Sun, 30 May 2021 14:02:44 GMT
    Server: Apache
    Last-Modified: Mon, 11 Jun 2007 18:53:14 GMT
    ETag: "2d-432a5e4a73a80"
    Accept-Ranges: bytes
    Content-Length: 45
    Cache-Control: max-age=0
    Expires: Sun, 30 May 2021 14:02:44 GMT
    Content-Type: text/html
    
    <html><body><h1>It works!</h1></body></html>
    Connection closed by foreign host.

    现象:服务器响应完之后直接关闭了连接

    开启keepalive

    KeepAlive On

    测试

    [root@localhost http-2.4.48]# telnet 10.0.0.10 80
    Trying 10.0.0.10...
    Connected to 10.0.0.10.
    Escape character is '^]'.
    GET /index.html HTTP/1.1
    Host:10.0.0.10
    
    HTTP/1.1 200 OK
    Date: Sun, 30 May 2021 14:02:59 GMT
    Server: Apache
    Last-Modified: Mon, 11 Jun 2007 18:53:14 GMT
    ETag: "2d-432a5e4a73a80"
    Accept-Ranges: bytes
    Content-Length: 45
    Cache-Control: max-age=0
    Expires: Sun, 30 May 2021 14:02:59 GMT
    Content-Type: text/html
    
    <html><body><h1>It works!</h1></body></html>
    a
    HTTP/1.1 400 Bad Request
    Date: Sun, 30 May 2021 14:03:03 GMT
    Server: Apache
    Content-Length: 226
    Connection: close
    Content-Type: text/html; charset=iso-8859-1
    
    <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
    <html><head>
    <title>400 Bad Request</title>
    </head><body>
    <h1>Bad Request</h1>
    <p>Your browser sent a request that this server could not understand.<br />
    </p>
    </body></html>
    Connection closed by foreign host.

    现象:服务器响应完成之后继续等待客户端的请求直到超时为止才断开

  • 相关阅读:
    排序算法之直接插入排序
    排序算法之快速排序
    进程内存空间
    python基础13 ---函数模块3(正则表达式)
    python基础12 ---函数模块2
    python基础11 ---函数模块1
    python基础10 ---匿名函数和递归
    python基础9 -----python内置函数2
    python基础8 -----迭代器和生成器
    python基础7 ---python函数
  • 原文地址:https://www.cnblogs.com/zh-dream/p/14858157.html
Copyright © 2020-2023  润新知