CHAPTER 3 Web Server - httpd配置(二)

3.1 httpd配置

3.1.1 基于用户的访问控制

认证质询:

WWW-Authenticate:响应码为401,拒绝客户端请求,并说明要求客户端提供帐号及密码

认证:

Authorization:客户端用户填入帐号和密码后在此发送请求报文;认证通过时,则服务器发送响应的资源

认证方式:

basic:明文
digest:消息摘要认证

安全域:

需要用户认证后方能访问的路径;应该通过名称对其进行标示,仪表告知用户认证的原因

用户的帐号和密码存放在何处?

虚拟帐号:仅用于访问某服务时用到的认证标示
存储:文本文件(httpd-tools/htpasswd加密工具),SQL数据库,ldap目录存储

添加用户:
使用专用命令完成此类文件的创建及用户管理,格式

htpasswd [options] /path/to/dir username passwd 
        -c 自动创建此处制定文件,仅应该在此文件不存在时使用
        -m:md5格式加密
        -s:sha格式加密
        -D:删除指定用户
        -b:在命令行中一并输入用户名和密码而不是根据提示输入密码
        -p:明文密码

默认md5加密 -m

htpasswd -b -c /tmp/test.users tom 123456
创建用户tom,密码1234567,并创建密码文件test.users

添加组:

[root@k8s-node-02 apache]# cat /usr/local/apache/conf/users.group
testgrp: tom jason		#每一行定义一个组,组中的用户用空格分开

配置文件:
httpd支持自定义配置文件,即不必把所有配置文件都写入主配置文件

user/group:进程安全上下文,一个进程是否能访问某个文件,取决于2者:

1.运行这个进程的用户身份,
2.文件的属主属组

指定以那个用户的身份运行httpd服务进程

       /etc/httpd/httpd.conf        
        user apache
        group apache

配置文件中指定user为apache
Suexec:访问服务器其他非apache用户权限,只是一个解决方案,并不安全

3.1.2 basic认证配置示例

基于用户搭建

1. 添加用户
[root@k8s-node-02 conf]# htpasswd -c -b ./users.passwd tom 123456
Adding password for user tom
[root@k8s-node-02 conf]# cat users.passwd
tom:$apr1$oyXRu1eD$PFtacQ2r/ioGiwZ9yJ4k8/
2. 添加网页文件
[root@k8s-node-02 apache]# cat htdocs/doc/d.html
<h1>hello python!</h1>
3. 定义安全域
<Directory "/usr/local/apache/htdocs/doc/">
        Options None
        AllowOverride None
        AuthType Basic
        AuthName "input account and passwd"
        AuthUserFile "/usr/local/apache/conf/users.passwd"
        #Require valid-user
        Require user tom

</Directory>

允许帐号文件中的所有用户登陆访问;
Require valid-user

4. 修改父目录权限

如果仅添加控制块并不能起作用,因为父目录的权限是允许全部访问,而子目录继承父目录权限。所以还应该把父目录权限进行修改,账号密码才能起作用

DocumentRoot "/usr/local/apache/htdocs"
<Directory "/usr/local/apache/htdocs">
...
    Options Indexes FollowSymLinks
...
    AllowOverride None
...
    Require all denied
    Require user tom
</Directory>
5. 访问效果

在这里插入图片描述

在这里插入图片描述

6. 在配置文件中定义一个".htaccess"隐藏文件
[root@k8s-node-02 apache]# cat htdocs/doc/.htaccess
AuthType Basic
AuthName "Welecon to Login"
AuthUserFile "/usr/local/apache/conf/users.passwd"
Require user jason tom

此处我们允许jason和tom用户访问,若允许账号验证文件的所有用户均有权限访问可直接写"Require valid-user"即可。
为什么".htaccess"文件客户端看不到呢?

<Files ".ht*">
    Require all denied
</Files>
7. 添加组

基于组帐号进行认证

<Directory "">
    Options None
    AllowOverride None
    AuthType Basic
    AuthName "String"(提示用户为什么认证)
    AuthUserFile "/PATH/TO/DIR"(/tmp/test.users)
    AuthGroupFIle "/paht/to/group_file"
    Require group groupname1 grpname2...
</Directory>

配置

[root@k8s-node-02 apache]# cat /usr/local/apache/conf/users.group	#添加组
testgrp: tom jason
...
<Directory "/usr/local/apache/htdocs/doc/">
        Options None
        AllowOverride None
        AuthType Basic
        AuthName "please input account and passwd"
        AuthUserFile "/usr/local/apache/conf/users.passwd"
        AuthGroupFile "/usr/local/apache/conf/users.group"			#配置组文件路径
        #Require valid-user
        #Require user tom
        Require group testgrp										#设置组权限
</Directory>

3.1.3 虚拟主机

站点标识:socket

  • IP相同,端口不同;
  • IP不同,端口均为默认
  • IP和端口相同,FQDN不同
1. 构建方案

创建虚拟主机有三种实现方案:

  • 基于IP:
    为每个虚拟主机准备至少一个ip
  • 基于端口:
    为每个虚拟主机使用至少一个独立port
  • 基于FQDN:
    为每个虚拟主机使用至少一个FQDN

注意:http2.2 一般虚拟主机不要与中心主机户混用,要使用虚拟主机,先禁用main主机
禁用方法:注释中心主机的DocumentRoot指令即可

2. 基于IP的虚拟主机示例

① 在本机添加三个IP,并制作网页

ip address add 192.168.0.10/24 dev ens33
ip address add 192.168.0.11/24 dev ens33
ip address add 192.168.0.12/24 dev ens33
mkdir /www;cd /www;mkdir {10..12};
echo 'welcome 10.com' > 10/index.html
echo 'welcome 10.com' > 11/index.html
echo 'welcome 10.com' > 12/index.html

② 修改主配置文件,取消对virtual host的配置文件路径注释

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

③ 编辑conf/extra/httpd-vhosts.conf

[root@k8s-node-02 conf]# cat extra/httpd-vhosts.conf
<VirtualHost 192.168.0.10:80>
    ServerName "www.10.com"			#域名
    DocumentRoot "/www/10/htdocs"	#文档路径
    <Directory "/www/10/htdocs">	#授权
        Options None
        Require all granted
    </Directory>
</VirtualHost>

<VirtualHost 192.168.0.11:80>
    ServerName www.11.com
    DocumentRoot "/www/11/htdocs"
    <Directory "/www/11/htdocs">
          Options None
          Require all granted
    </Directory>

</VirtualHost>

<VirtualHost 192.168.0.12:80>
    ServerName www.12.com
    DocumentRoot "/www/12/htdocs"
    <Directory "/www/12/htdocs">
         Options None
         Require all granted
    </Directory>

</VirtualHost>

④ 检查语法并重启httpd

httpd -t
systemctl restart httpd

⑤ 测试

[root@k8s-node-02 conf]# curl 192.168.0.10
welcome 10.com
[root@k8s-node-02 conf]# curl 192.168.0.11
welcome 11.com
[root@k8s-node-02 conf]# curl 192.168.0.12
welcome 12.com
3. 基于端口的虚拟主机

添加监听端口:Listen 8082

[root@k8s-node-02 extra]# cat httpd-vhosts.conf
Listen 8082
Listen 8083
<VirtualHost *:80>
    ServerName "www.10.com"
    DocumentRoot "/www/10/htdocs"
    <Directory "/www/10/htdocs">
        Options None
        Require all granted
    </Directory>
    ErrorLog "logs/www.10.com-error_log"
    CustomLog "logs/www.10.com_log" common
</VirtualHost>
<VirtualHost *:8082>
    ServerName www.11.com
    DocumentRoot "/www/11/htdocs"
    <Directory "/www/11/htdocs">
          Options None
          Require all granted
    </Directory>

</VirtualHost>
<VirtualHost *:8083>
    ServerName www.12.com
    DocumentRoot "/www/12/htdocs"
    <Directory "/www/12/htdocs">
         Options None
         Require all granted
    </Directory>

</VirtualHost>

笔者基于端口配置不好用,鼓捣半天也没解决,先躺着,回头再来解决。

4. 基于FQDN的虚拟主机

修改ServerName,配置/etc/hosts

[root@k8s-node-02 extra]# cat httpd-vhosts.conf
<VirtualHost 192.168.0.10:80>
    ServerName "www.10.com"
    DocumentRoot "/www/10/htdocs"
    <Directory "/www/10/htdocs">
        Options None
        Require all granted
    </Directory>
    ErrorLog "logs/www.10.com-error_log"
    CustomLog "logs/www.10.com_log" common
</VirtualHost>
<VirtualHost 192.168.0.10:80>
    ServerName www.11.com
    DocumentRoot "/www/11/htdocs"
    <Directory "/www/11/htdocs">
          Options None
          Require all granted
    </Directory>

</VirtualHost>
<VirtualHost 192.168.0.10:80>
    ServerName www.12.com
    DocumentRoot "/www/12/htdocs"
    <Directory "/www/12/htdocs">
         Options None
         Require all granted
    </Directory>

</VirtualHost>
[root@k8s-node-02 extra]# cat /etc/hosts
192.168.0.10 www.10.com
192.168.0.10 www.11.com
192.168.0.10 www.12.com
[root@k8s-node-02 extra]# curl www.10.com
welcome 10.com
[root@k8s-node-02 extra]# curl www.11.com
welcome 11.com
[root@k8s-node-02 extra]# curl www.12.com
welcome 12.com
5. 开启status功能

1.加载mod_status.so模块

①编辑httpd.conf文件vim /usr/local/apache/conf/httpd.conf
②查看行 LoadModuls status_module modules/mod_status.so 前是否有注释符号#,如果有则去掉,如果没有则直接进行下一步操作。

2.加载status模块的配置文件

①编辑httpd.conf文件vim /usr/local/apache/conf/httpd.conf
②查看行 Include conf/extra/httpd-info.conf 前是否有注释符号#,如果有则去掉,如果没有则直接进行下一步操作。

3.开启详细状态功能

①编辑httpd-info.conf文件vim /usr/local/apache/conf/extra/httpd-info.conf
②查看行 ExtendedStatus On 前是否有注释符号#,如果有则去掉,如果没有则直接进行下一步操作。

设置完这些,重启apache服务后我们就可以通过域名/server-status查看apache允许状态了,接下来我们来配置针对status页面做认证

关于httpd-info.conf配置内容
① http2.2

            <Location /server-status>
                SetHandler server-status
                Order allow,deny
                Allow from 172.16
            </Location>

② http2.4

            <Location /server-status>
                SetHandler server-status
                Require ip 172.16
            </Location>

3.2 httpd的功能特性:

3.2.1 CGI:Common gateway interface

CGI脚本由服务器调用, 基于浏览器的数据输入. 其工作原理如下:

1 一个URL指向一个CGI脚本. 一个CGI脚本的URL能如普通的URL一样出现,区别于.htm/.html静态URL,CGI的URL是动态URL。如http://xxxx.com/cgiurl
2 服务器CGI接收浏览器的请求, 按照那个URL指向对应的脚本文件(注意文件的位置和扩展名),执行CGI脚本.
3 CGI脚本执行基于输入数据的操作,包括查询数据库、计算数值或调用系统中其他程序.
4 CGI脚本产生某种Web服务器能理解的输出结果.
5 服务器接收来自脚本的输出并且把它传回浏览器,让用户了解处理结果

3.2.2 ScriptAlias 指令,配置脚本执行目录

将URL映射到文件系统位置,并将目标指定为CGI脚本。例:Script Alias "cgi-bin" "/usr/local/apache/cgi-bin/" 表示访问 ​ ​http://www.itwish.cn/cgi-bin/test​​ 时,目录映射地址为/usr/local/apache/cgi-bin/test

语法1:ScriptAlias [URL-path] file-path|directory-path

# 定义/cgi-bin/ 目录映射到 /web/cgi-bin/ 目录 ,1)功能等同于2) ,注意结尾的"/"
1)
ScriptAlias "/cgi-bin/" "/web/cgi-bin/"       
2)
Alias "/cgi-bin/" "/web/cgi-bin/"
<Location "/cgi-bin">
    SetHandler cgi-script
    Options +ExecCGI
</Location>

主配置文件:

[root@VM httpd]# vi httpd.conf    # 调整配置文件
<IfModule mpm_prefork_module>
        LoadModule cgi_module modules/mod_cgi.so	#根据不同工作模式,打开不同的cgi模块
</IfModule>

<IfModule alias_module>
    #
    ScriptAlias /cgi-bin/ "/usr/local/apache/cgi-bin/"      
    # 定义目录/cgi-bin/ 目录映射到 /usr/local/apache/cgi-bin/ 目录 
</IfModule>
 
<Directory "/usr/local/apache/cgi-bin">    # 定义目录属性 
    AllowOverride none
    Options none
    Require all granted
</Directory>

创建测试脚本

[root@VM cgi-bin]# vi   test1      # 在cgi-bin目录中创建test1 bash 脚本 
#!/bin/bash
cat << EOF
Content-Type: text/html
                            # 注意改行为空行 
<pre>
<h1>The hostname is `hostname`. </h1>     # 显示主机名 ,使用bash命令 hostname 实现 
The time is `date`.                    # 显示当前访问日期 ,使用bash命令 date 实现
</pre>
                            # 改行为空行 
EOF
    
[root@VM cgi-bin]# vi test2           # 在cgi-bin目录中创建test2   perl 脚本 
#!/usr/bin/perl
print "content-type: text/html","\n\n";
print "<HTML>","\n";
print "<HEAD>","\n";
print "<TITLE>Perl</TITLE>","\n";
print "</HEAD>","\n";
print "<BODY>","\n";
print "<H1>Hello World</H1>","\n";
print "</BODY>","\n";
print "</HTML>","\n";
 
[root@VM ]# chmod o+x /usr/local/apache/cgi-bin/{test1,test2}     # 注意 ,一定要给与脚本执行权限  
 
[root@VM cgi-bin]# curl http://192.168.71.253/cgi-bin/test1            # 测试 test1 脚本执行状况
<pre>
<h1>The hostname is VM. </h1>
The time is Wed Aug 15 19:26:56 CST 2018.
</pre>
 
[root@k8s-node-02 apache]# curl http://192.168.71.253/cgi-bin/test2	#  测试test2  perl脚本执行状况
<HTML>
<HEAD>
<TITLE>Perl</TITLE>
</HEAD>
<BODY>
<H1>Hello World</H1>
</BODY>
</HTML>

在这里插入图片描述

3.2.3 使用mod_deflate模块压缩页面优化传输速率

使用场景:

1.节约带宽
2.压缩适合于压缩的资源

        SetOutputFilter DEFLATE 设置过滤器

        AddOutputFIlterByType DEFLATE text/html
        ...
        
        
        DeflateCompressionLevel 9    压缩比
        
        BrowserMatch ^Mozilla/4 gizp-only-text/html

        BrowserMatch ^Mozilla/4\.0[678] no-gzip

3.2.4 https(http over ssl),使用mod_ssl支持https

ssl会话简化流程:

  1. 客户端发送可供选择的加密方式,并向服务器请求证书
  2. 服务器端发送证书以及选定的加密方式给客户端
  3. 客户端取得证书并进行证书验证
    如果信任给其发证书CA:
    a,验证证书来源的合法性,用CA的公钥解密证书上的数字签名
    b,验证证书内容的合法性;完整性
    c,检查证书的有效期限
    d,检查证书是否被吊销
    e,证书中拥有者的名字,与访问的目标主机要一致
  4. 客户端生成临时会话密钥(对称密钥),并使用服务器的公钥加密此数据发送给服务器,完成密钥交换
  5. 服务器用此密钥加密用户请求的资源,响应客户端

注意:ssl会话是基于ip地址创建;所以单ip的主机上,仅可以使用一个https虚拟主机

            yum install mod_ssl

术语:PKI CA CRL X.509(V1,v2,v3)
配置httpd支持https:

  1. 为服务器申请数字证书
    测试:通过私建CA发证书

a,创建私有ca
b,在服务器创建证书签署请求
c,ca签证

  1. 配置httpd支持使用ssl,及使用证书
    配置文件:/etc/httpd/conf.d/ssl.conf

DocumentRoot
ServerName
SSLCertificateFile
SSLCertificateKeyFile

  1. 测试基于https访问相应的主机
openssl s_client [-connect host:port][-cert filename][-CApath directroy][-CAfile filename]

3.3 常用命令、工具

3.3.1 常用命令

部分命令仅限yum安装使用

yum install httpd –y				#安装httpd
yum info httpd						#查看httpd安装包信息
yum list all http*					
rpm -ql httpd-tools
yum repolist
yum clean all
yum install httpd-manual
httpd -t 							#httpd语法测试
配置文件:/etc/httpd/conf
log:/var/log/httpd
网页文件:/var/www/html,默认根
ss -ntl : port 80
默认页:/etc/httpd/conf.d/welcome.conf
loadmodule
httpd -M |grep mpm
httpd.worker -M切换模式
httpd -l 列出模块

3.3.2 常用工具

http 2.4命令行客户端工具

  1. curl命令
    curl - transfer a URL
	curl [options] [URL...]
    options:
        -A:-A, --user-agent STRING模拟自己是什么用户代理的 *
        --basic使用http基本认证
        --tcp-nodelay使用TCP_NODELAY
        -e/--referer<url>:上一跳 * 
        --cacert<file> ca证书(ssl)
        --compressed要求返回是压缩格式 *
        -H/--header<line>自定义首部信息传递给服务器
        -I/--head 只显示响应报文首部信息
        --limit-rate<rate>设置传输速率
        -u/--user[:password]设置服务器的用户密码
        -0(零)/--http1.0 使用http1.0
  1. elinks:
        elinks [options] url
            -dump 一次显示,直接结束,不进入交互模式
  1. httpd自带的工具等

htpasswd
apachectl
rotatelogs:日志滚动工具dd
suexec:访问某些有特殊权限配置的资源时,临时切换至指定用户运行
ab:apache bench

  1. httpd的压力测试工具

ab,webbench,http_load,selge
jmeter loadrunner
tcpcopy

  1. 网站指标:

css:级别样式表
pv:page view,一次页面访问,一个页面有10个资源,100W次的资源请求,=10W次页面访问
uv:user view,独立的用户浏览量,
ip:ip地址 ,每个ip地址访问量,小于uv

3.4 调优

3.4.1 粗略计算连接数

连接数理论上是越大越好,但是得根据硬件,服务器的CPU,内存,带宽等因素

查看当前的apache连接数:

[root@k8s-node-02 apache]# ps aux|grep -v grep|grep httpd|wc -l
7

计算httpd每个进程占用内存的平均数:

#开启CGI
[root@k8s-node-02 apache]# ps aux|grep -v grep| awk '/httpd/{sum+=$6;n++};END{print sum/n}'
2169
#关闭CGI
[root@k8s-node-02 apache]# ps aux|grep -v grep| awk '/httpd/{sum+=$6;n++};END{print sum/n}'
1701.71

这个只是做个参考。计算后要减去服务器系统本身所需要的资源。
比如内存2G,减去500M留给服务器,还有1.5G,那么可得到最大连接数:在700左右。
1.5*1024*1024/2169=725
如果关闭CGI
1.5*1024*1024/1701=924

根据情况修改后的httpd.conf的prefork的配置后为:

<IfModule prefork.c>
StartServers 5
MinSpareServers 5
MaxSpareServers 10
ServerLimit 700
MaxClients 650
MaxRequestsPerChild 1000
</IfModule>

这里重点介绍下ServerLimit,必须放到MaxClients前,值要大于MaxClients。

3.4.2 性能调优,模块启用/关闭

  1. 启用压缩
    LoadModule deflate_module modules/mod_deflate.so
  2. 启用重写
    LoadModule rewrite_module modules/mod_rewrite.so
  3. 启用默认扩展,支持在这里进行修改httpd主要配置
    Include conf/extra/httpd-default.conf
  4. 提供文件描述符缓存支持,从而提高Apache性能
    LoadModule file_cache_module modules/mod_file_cache.so
  5. 启用基于URI键的内容动态缓冲内存或磁盘.
    LoadModule cache_module modules/mod_cache.so
  6. 启用基于磁盘的缓冲管理器
    LoadModule cache_disk_module modules/mod_cache_disk.so
  7. 基于内存的缓冲管理器
    LoadModule socache_memcache_module modules/mod_socache_memcache.so
  8. 屏蔽所有不必要的模块

#LoadModule authn_file_module modules/mod_authn_file.so
#LoadModule authn_dbm_module modules/mod_authn_dbm.so
#LoadModule authn_anon_module modules/mod_authn_anon.so
#LoadModule authn_dbd_module modules/mod_authn_dbd.so
#LoadModule authn_socache_module modules/mod_authn_socache.so
#LoadModule authn_core_module modules/mod_authn_core.so
#LoadModule authz_host_module modules/mod_authz_host.so
#LoadModule authz_groupfile_module modules/mod_authz_groupfile.so
#LoadModule authz_user_module modules/mod_authz_user.so
#LoadModule authz_dbm_module modules/mod_authz_dbm.so
#LoadModule authz_owner_module modules/mod_authz_owner.so
#LoadModule authz_dbd_module modules/mod_authz_dbd.so
LoadModule authz_core_module modules/mod_authz_core.so
LoadModule access_compat_module modules/mod_access_compat.so
#LoadModule auth_basic_module modules/mod_auth_basic.so
#LoadModule auth_form_module modules/mod_auth_form.so
#LoadModule auth_digest_module modules/mod_auth_digest.so

  1. 已经过时屏蔽
    #LoadModule autoindex_module modules/mod_autoindex.so
  2. 用于定义缺省文档index.php、index.jsp等
    LoadModule dir_module modules/mod_dir.so
  3. 用于定义记录文件格式
    LoadModule log_config_module modules/mod_log_config.so
  4. 定义文件类型的关联
    LoadModule mime_module modules/mod_mime.so
  5. 减少10%左右的重复请求
    LoadModule expires_module modules/mod_expires.so
  6. 允许apache修改或清除传递到cgi或ssi页面的环境变量
    LoadModule env_module modules/mod_env.so
  7. 根据客户端请求头字段设置环境变量,如果不需要则屏蔽掉
    #LoadModule setenvif_module modules/mod_setenvif.so
  8. 生成描述服务器状态的页面
    #LoadModule status_module modules/mod_status.so
  9. 别名
    LoadModule alias_module modules/mod_alias.so
  10. url地址重写模块
    LoadModule rewrite_module modules/mod_rewrite.so
  11. jk_mod 负载均衡调度模块
    LoadModulejk_module modules/mod_jk.so
  12. 过滤模块,使用缓存必须启用过滤模块
    LoadModule filter_module modules/mod_filter.so
  13. 关闭服务器版本信息
    LoadModule version_module modules/mod_version.so
  14. 自动修正用户输入的url错误
    LoadModule speling_module modules/mod_speling.so

3.4.3 缓存设置

apache涉及的缓存模块有mod_cache、mod_disk_cache、mod_file_cache、mod_mem_cache。如果要使用缓存必须启用这四个缓存模块。
同时修改缓存设置后,必须重启apache,刷新缓存,否则用户访问页面不是最新页面。

mod_cache、mod_disk_cache、mod_mem_cache、mod_file_cache关系

  • apache缓存分为硬盘缓存和内存缓存
  • mod_disk_cache mod_mem_cache 都依赖于mod_cache
  • mod_file_cache是结合mod_cache使用,可以用于指定几个频繁访问,但是变化不大的文件

配置硬盘缓存和内存缓存的缓存配置

<IfModule mod_cache.c>  
   #设置缓存过期时间,默认一小时  
   CacheDefaultExpire 3600  
   #设置缓存最大失效时间,默认最大一天  
   CacheMaxExpire 86400 CacheLastModifiedFactor 0.1 CacheIgnoreHeaders Set-Cookie CacheIgnoreCacheControl Off <IfModule mod_disk_cache.c>  
   #启用缓存,并设定硬盘缓存目录(url路径)  
   CacheEnable disk /  
   #设定apache访问用户的缓存路径,需要进行授权配置,如linux设置为777  
   CacheRoot /home/apache/cache  
   #缓存目录深度  
   CacheDirLevels 5  
   #缓存目录名称字符串长度  
   CacheDirLength 5  
   #缓存文件最大值  
    CacheMaxFileSize 1048576  
   #缓存文件最小值   
   CacheMinFileSize 10 </IfModule> <IfModule mod_mem_cache.c>  
   #缓存路径  
   CacheEnable mem /  

   #缓存对象最大个数  
   MCacheMaxObjectCount 20000  

   #单个缓存对象最大大小  
   MCacheMaxObjectSize 1048576  

   #单个缓存对象最小大小   
   MCacheMinObjectSize 10  

   #在缓冲区最多能够放置多少的将要被缓存对象的尺寸  
   MCacheMaxStreamingBuffer 65536  

   #清除缓存所使用的算法,默认是 GDSF,还有一个是LRU  
   MCacheRemovalAlgorithm GDSF  

   #缓存数据最多能使用的内存  
   MCacheSize 131072 </IfModule> </IfModule>

文件缓存的应用
1、缓存文件:如果你的网站有几个文件的访问非常频繁而又不经常变动,则可以在 Apache 启动的时候就把它们的内容缓存到内存中(当然要启用内存缓存系统),使用的是 mod_file_cache 模块,有多个文件可以用空格格开,具体如下:

<IfModule mod_file_cache.c>  
     MMapFile /var/html/js/jquery.js  
</IfModule>  

2、缓存句柄:

<IfModule mod_file_cache.c>  
  CacheFile /usr/local/apache2/htdocs/index.html  
</IfModule>

3.4.4 压缩配置

apache通过mod_deflate模块实现页面压缩,要想进行页面压缩必须启用以下两个模块

LoadModule deflate_module modules/mod_deflate.so
LoadModule filter_module modules/mod_filter.so

页面压缩模块配置

<ifmodule mod_deflate.c>  
#设定压缩率,压缩率1 -9, 6是建议值,不能太高,消耗过多的内存,影响服务器性能  
DeflateCompressionLevel 6  

AddOutputFilterByType DEFLATE text/plain  
AddOutputFilterByType DEFLATE text/html  
AddOutputFilterByType DEFLATE text/php  
AddOutputFilterByType DEFLATE text/xml  
AddOutputFilterByType DEFLATE text/css  
AddOutputFilterByType DEFLATE text/javascript  
AddOutputFilterByType DEFLATE application/xhtml+xml  
AddOutputFilterByType DEFLATE application/xml  
AddOutputFilterByType DEFLATE application/rss+xml  
AddOutputFilterByType DEFLATE application/atom_xml  
AddOutputFilterByType DEFLATE application/x-javascript  
AddOutputFilterByType DEFLATE application/x-httpd-php  
AddOutputFilterByType DEFLATE application/x-httpd-fastphp  
AddOutputFilterByType DEFLATE application/x-httpd-eruby  
AddOutputFilterByType DEFLATE image/svg+xml  
AddOutputFilterByType DEFLATE application/javascript  

#插入过滤器  
SetOutputFilter DEFLATE  

#排除不需要压缩的文件  
SetEnvIfNoCase Request_URI \.(?:exe|t?gz|zip|bz2|sit|rar)$ no-gzip dont-vary  
SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$ no-gzip don’t-vary  
SetEnvIfNoCase Request_URI \.pdf$ no-gzip dont-vary  
SetEnvIfNoCase Request_URI \.avi$ no-gzip dont-vary  
SetEnvIfNoCase Request_URI \.mov$ no-gzip dont-vary  
SetEnvIfNoCase Request_URI \.mp3$ no-gzip dont-vary  
SetEnvIfNoCase Request_URI \.mp4$ no-gzip dont-vary  
SetEnvIfNoCase Request_URI \.rm$ no-gzip dont-vary  
</ifmodule>

3.4.5 KeepAlive

在HTTP 1.0中和Apache服务器的一次连接只能发出一次HTTP请求,而KeepAlive参数支持HTTP 1.1版本的一次连接,多次传输功能,这样就可以在一次连接中发出多个HTTP请求。从而避免对于同一个客户端需要打开不同的连接。很多请求通过同一个 TCP连接来发送,可以节约网络和系统资源。

keepAlive启用场景

如果有较多的js,css,图片访问,则需要开启长链接
如果内存较少,大量的动态页面请求,文件访问,则关闭长链接,节省内存,提高apache访问的稳定性
如果内存充足,cpu较好,服务器性能优越,则是否开启长链接对访问性能都不会产生影响

keepAlive配置

在Apache的配置文件httpd.conf中,设置:
1、Timeout 60 默认为60s修改为30s
2、KeepAlive on 设置为on状态
4、KeepAliveTimeout 默认为5s,如果值设置过高,由于每个进程都要保持一定时间对应该用户,而无法应付其他用户请求访问,从而导致服务器性能下降。
5、MaxKeepAliveRequests 100 如果设置为0表示无限制,建议最好设置一个值

把MaxKeepAliveRequests设置的尽量大,可以在一次连接中进行更多的HTTP请求。但在我们的测试中还发现,把 MaxKeepAliveRequests设置成1000,则评测的客户端容易出现“Send requesttimed out”的错误,所以具体数值还要根据自己的情形来设置。

3.5 附录(模块功能)

模块介绍:Apache 各个模块功能 基本(B)模块默认包含,必须明确禁用;扩展(E)/实验(X)模块默认不包含,必须明确启用。

模块名称状态简要描述
mod_actions(B)基于媒体类型或请求方法,为执行CGI脚本而提供
mod_alias(B)提供从文件系统的不同部分到文档树的映射和URL重定向
mod_asis(B)发送自己包含HTTP头内容的文件
mod_auth_basic(B)使用基本认证
mod_authn_default(B)在未正确配置认证模块的情况下简单拒绝一切认证信息
mod_authn_file(B)使用纯文本文件为认证提供支持
mod_authz_default(B)在未正确配置授权支持模块的情况下简单拒绝一切授权请求
mod_authz_groupfile(B)使用纯文本文件为组提供授权支持
mod_authz_host(B)供基于主机名、IP地址、请求特征的访问控制
mod_authz_user(B)基于每个用户提供授权支持
mod_autoindex(B)自动对目录中的内容生成列表,类似于"ls"或"dir"命令
mod_cgi(B)在非线程型MPM(prefork)上提供对CGI脚本执行的支持
mod_cgid(B)在线程型MPM(worker)上用一个外部CGI守护进程执行CGI脚本
mod_dir(B)指定目录索引文件以及为目录提供"尾斜杠"重定向
mod_env(B)允许Apache修改或清除传送到CGI脚本和SSI页面的环境变量
mod_filter(B)根据上下文实际情况对输出过滤器进行动态配置
mod_imagemap(B)处理服务器端图像映射
mod_include(B)实现服务端包含文档(SSI)处理
mod_isapi(B)仅限于在Windows平台上实现ISAPI扩展
mod_log_config(B)允许记录日志和定制日志文件格式
mod_mime(B)根据文件扩展名决定应答的行为(处理器/过滤器)和内容(MIME类型/语言/字符集/编码)
mod_negotiation(B)提供内容协商支持
mod_nw_ssl(B)仅限于在NetWare平台上实现SSL加密支持
mod_setenvif(B)根据客户端请求头字段设置环境变量
mod_status(B)生成描述服务器状态的Web页面
mod_userdir(B)允许用户从自己的主目录中提供页面(使用"/~username")
mod_auth_digest(X)使用MD5摘要认证(更安全,但是只有最新的浏览器才支持)
mod_authn_alias(E)基于实际认证支持者创建扩展的认证支持者,并为它起一个别名以便于引用
mod_authn_anon(E)提供匿名用户认证支持
mod_authn_dbd(E)使用SQL数据库为认证提供支持
mod_authn_dbm(E)使用DBM数据库为认证提供支持
mod_authnz_ldap(E)允许使用一个LDAP目录存储用户名和密码数据库来执行基本认证和授权
mod_authz_dbm(E)使用DBM数据库文件为组提供授权支持
mod_authz_owner(E)基于文件的所有者进行授权
mod_cache(E)基于URI键的内容动态缓冲(内存或磁盘)
mod_cern_meta(E)允许Apache使用CERN
mod_charset_lite(X)允许对页面进行字符集转换
mod_dav(E)允许Apache提供DAV协议支持
mod_dav_fs(E)为mod_dav访问服务器上的文件系统提供支持
mod_dav_lock(E)为mod_dav锁定服务器上的文件提供支持
mod_dbd(E)管理SQL数据库连接,为需要数据库功能的模块提供支持
mod_deflate(E)压缩发送给客户端的内容
mod_disk_cache(E)基于磁盘的缓冲管理器
mod_dumpio(E)将所有I/O操作转储到错误日志中
mod_echo(X)一个很简单的协议演示模块
mod_example(X)一个很简单的Apache模块API演示模块
mod_expires(E)允许通过配置文件控制HTTP的"Expires:"和"Cache-Control:"头内容
mod_ext_filter(E)使用外部程序作为过滤器
mod_file_cache(X)提供文件描述符缓存支持,从而提高Apache性能
mod_headers(E)允许通过配置文件控制任意的HTTP请求和应答头信息
mod_ident(E)实现RFC1413规定的ident查找
mod_info(E)生成Apache配置情况的Web页面
mod_ldap(E)为其它LDAP模块提供LDAP连接池和结果缓冲服务
mod_log_forensic(E)实现"对比日志",即在请求被处理之前和处理完成之后进行两次记录
mod_logio(E)对每个请求的输入/输出字节数以及HTTP头进行日志记录
mod_mem_cache(E)基于内存的缓冲管理器
mod_mime_magic(E)通过读取部分文件内容自动猜测文件的MIME类型
mod_proxy(E)提供HTTP/1.1的代理/网关功能支持
mod_proxy_ajp(E)mod_proxy的扩展,提供Apache
mod_proxy_balancer(E)mod_proxy的扩展,提供负载平衡支持
mod_proxy_connect(E)mod_proxy的扩展,提供对处理HTTP
mod_proxy_ftp(E)mod_proxy的FTP支持模块
mod_proxy_http(E)mod_proxy的HTTP支持模块
mod_rewrite(E)一个基于一定规则的实时重写URL请求的引擎
mod_so(E)允许运行时加载DSO模块
mod_speling(E)自动纠正URL中的拼写错误
mod_ssl(E)使用安全套接字层(SSL)和传输层安全(TLS)协议实现高强度加密传输
mod_suexec(E)使用与调用web服务器的用户不同的用户身份来运行CGI和SSI程序
mod_unique_id(E)为每个请求生成唯一的标识以便跟踪
mod_usertrack(E)使用Session跟踪用户(会发送很多Cookie),以记录用户的点击流
mod_version(E)提供基于版本的配置段支持
mod_vhost_alias(E)提供大批量虚拟主机的动态配置支持
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值