ssplyh 发表于 2018-11-22 11:32:09

Apache之配置详解

Apache基本配置:
  1)设置监听地址和端口:

  语法:Listen PORT
  例子:
  Listen 80   #表示监听在本机所有接口的80端口上
  Listen 172.16.100.1:8080#表示只监听在172.16.100.1接口的8080端口上
  注意:
  Listen指令可以重复使用
  如果apache需要使用多个端口,则必须写多行Listen选项
  配置文件语法测试:
      #service httpd configtest    //实际是调用httpd -t
      #httpd -t
      #service httpd restart      //重启服务  注意:大多数配置修改后,使用service httpd reload即能生效;
  而修改了监听地址和端口则需要重启服务。
  

  2)配置服务器HTTP响应头:
  语法:ServerTokens Major|Minor|Minimal|ProductOnly|OS|Full
  默认值:ServerTokens Full
  说明:此指令控制了Server回送给客户端的响应头域是否包含关于服务器OS类型和编译进的模块描述信息。
  详细说明:
指令回送格式ServerTokens ProductOnly服务器会发送:Server:Apache ServerTokens Major服务器会发送:Server:Apache/2ServerTokens Minor 服务器会发送:Server:Apache/2.0 ServerTokens Minimal服务器会发送:Server:Apache/2.0.41ServerTokens OS服务器会发送:Server: Apache/2.0.41 (Unix)ServerTokens Full服务器会发送:Server: Apache/2.0.41 (Unix) PHP/4.2.2 MyMod/1.2   注意:此设置将作用于整个服务器,而且不能在虚拟主机的管理层次上予以启用或禁用。
  

  3)设置httpd工作目录:

  语法:ServerRoot "/path/to/somewhere"
  默认值:ServerRoot "/etc/httpd"
  说明:此指令用于指定守护进程httpd的运行目录,httpd在启动之后将自动将进程的当前目录改变为这个目录。
  注意:路径最后不要带"/"
  

  4)设置PidFile路径:
  语法:PidFilepath/to/somewhere
  默认值:PidFile run/httpd.pid
  注意:这里使用的是相对路径;
  相对于httpd的工作目录;
  /etc/httpd/run这个目录是链接到/var/run/httpd目录
  

  5)设置链接超时:
  语法:Timeout 数字(单位为秒)
  默认值:Timeout 60
  6)设置保持连接:
  语法:keepAlive {on|off}               //是否启用长连接
  MaxKeepAliveRequests数字       //设置每个连接的最大请求资源数
  KeepAliveTimeout数字(单位为秒) //两次请求的最大间隔时间
     默认值:
  KeepAlive Off
  MaxKeepAliveRequests 100
  KeepAliveTimeout 15
  注意:对动态内容的服务器建议关闭keepalive
  keepAlive配置的合理使用:
在 Apache 服务器中,KeepAlive 是一个布尔值,On 代表打开,Off 代表关闭,这个指令在其他众多的 HTTPD 服务器中都是存在的。
  KeepAlive 配置指令决定当处理完用户发起的 HTTP 请求后是否立即关闭 TCP 连接,如果 KeepAlive 设置为 On,那么用户完成一次访问后,不会立即断开连接,如果还有请求,那么会继续在这一次 TCP 连接中完成,而不用重复建立新的 TCP 连接和关闭 TCP 连接,可以提高用户访问速度。
  那么我们考虑3种情况:
   1。用户浏览一个网页时,除了网页本身外,还引用了多个 javascript. 文件,多个 css 文件,多个图片文件,并且这些文件都在同一个 HTTP 服务器上。
  2。用户浏览一个网页时,除了网页本身外,还引用一个 javascript. 文件,一个图片文件。
  3。 用户浏览的是一个动态网页,由程序即时生成内容,并且不引用其他内容。
  对于上面3中情况,我认为:1 最适合打开 KeepAlive ,2 随意,3 最适合关闭 KeepAlive
  下面我来分析一下原因。
  在 Apache 中,打开和关闭 KeepAlive 功能,服务器端会有什么异同呢?
  先看看理论分析。
  打开 KeepAlive 后,意味着每次用户完成全部访问后,都要保持一定时间后才关闭会关闭 TCP 连接,那么在关闭连接之前,必然会有一个 Apache 进程对应于该用户而不能处理其他用户,假设 KeepAlive 的超时时间为 10 秒种,服务器每秒处理 50 个独立用户访问,那么系统中 Apache 的总进程数就是 10 * 50 = 500 个,如果一个进程占用 4M 内存,那么总共会消耗 2G 内存,所以可以看出,在这种配置中,相当消耗内存,但好处是系统只处理了 50次 TCP 的握手和关闭操作。
  如果关闭 KeepAlive,如果还是每秒50个用户访问,如果用户每次连续的请求数为3个,那么 Apache 的总进程数就是 50 * 3 = 150 个,如果还是每个进程占用 4M 内存,那么总的内存消耗为 600M,这种配置能节省大量内存,但是,系统处理了 150 次 TCP 的握手和关闭的操作,因此又会多消耗一些 CPU 资源。
  在看看实践的观察。
  我在一组大量处理动态网页内容的服 务器中,起初打开 KeepAlive 功能,经常观察到用户访问量大时Apache进程数也非常多,系统频繁使用交换内存,系统不稳定,有时负载会出现较大波动。关闭了 KeepAlive 功能后,看到明显的变化是: Apache 的进程数减少了,空闲内存增加了,用于文件系统Cache的内存也增加了,CPU 的开销增加了,但是服务更稳定了,系统负载也比较稳定,很少有负载大范围波动的情况,负载有一定程度的降低;变化不明显的是:访问量较少的时候,系统平均 负载没有明显变化。

  总结一下:
  在内存非常充足的服务器上,不管是否关闭 KeepAlive 功能,服务器性能不会有明显变化;
  如果服务器内存较少,或者服务器有非常大量的文件系统访问时,或者主要处理动态网页服务,关闭 KeepAlive 后可以节省很多内存,而节省出来的内存用于文件系统Cache,可以提高文件系统访问的性能,并且系统会更加稳定。

   补充:
  关于是否应该关闭 KeepAlive 选项,我觉得可以基于下面的一个公式来判断。
  在理想的网络连接状况下, 系统的 Apache 进程数和内存使用可以用如下公式表达:
HttpdProcessNumber = KeepAliveTimeout * TotalRequestPerSecond / Average(KeepAliveRequests)
HttpdUsedMemory = HttpdProcessNumber * MemoryPerHttpdProcess
  换成中文:
总Apache进程数 = KeepAliveTimeout * 每秒种HTTP请求数 / 平均KeepAlive请求
Apache占用内存 = 总Apache进程数 * 平均每进程占用内存数
  需要特别说明的是:
  [平均KeepAlive请求] 数,是指每个用户连接上服务器后,持续发出的 HTTP 请求数。当 KeepAliveTimeout 等 0 或者 KeepAlive 关闭时,KeepAliveTimeout 不参与乘的运算从上面的公式看,如果 [每秒用户请求] 多, 的值大,[平均KeepAlive请求] 的值小,都会造成 多和 [内存] 多,但是当 [平均KeepAlive请求] 的值越大时, 和 [内存] 都是趋向于减少的。
  基于上面的公式,我们就可以推算出当 平均KeepAlive请求 /web/host1/index.html
  # echo "Host2" >/web/host2/index.html
  5,客户端测试
  # elinks http://172.16.100.1
  # elinks http://172.16.100.1:8080
  4)基于IP的虚拟主机:
  1,添加辅助地址
              # ifconfig eth0:0 172.16.100.2
  2,添加虚拟主机记录
  
  ServerNamewww.a.com
  DocumentRoot "/web/host1"
  
  
  ServerNamewww.b.org
  DocumentRoot "/web/host2"
  
  3,关闭主服务器
           #DocumentRoot "/var/www/html"
  5)基于域名的虚拟主机:
  httpd-2.2: NameVirtualHost 需要启用;
  httpd-2.4以后不需要这个指令。
  1, 清空辅助地址
  #ifconfig eth0:0 down
  2, 启用NameVirtualHost
  NameVirtualHost 172.16.100.1:80 //监听地址和端口 必须与虚拟主机设置中的保持一致
  3, 添加虚拟主机记录
     
  ServerNamewww.a.com
  DocumentRoot "/web/host1"
  
  
  ServerNamewww.b.org
  DocumentRoot "/web/host2"
  
  4, 添加主机解析记录
  # echo "172.16.100.1 www.a.com" >>/etc/hosts
  # echo "172.16.100.1 www.b.org" >>/etc/hosts
  5, 测试
  # elinks -dump http://www.a.com   //-dump 表示不进入交互模式 直接查看网页内容
  # elinks -dump http://www.b.org
  6)动态虚拟主机:
  —基于IP地址的动态虚拟主机
a.给服务器绑定多个IP地址
b.修改httpd.conf
   #vihttpd.conf
.........
   virtualdocumentrootip    可变化的路径
........
注:可变化的路径就是路径中包含了变量,常用的变量格式如下:
    %N
表示客户机输入的IP地址(域名)的从左向右的第N部分,其中%0代表整个IP地址(域名)
%-N表示客户机输入的IP地址(域名)的从右到左的第N部分
    %+N表示客户机输入的IP地址(域名)的从左边第N部分到结尾
%-N+表示客户机输入的IP地址(域名)的从右边第N部分到开头
如:www.abc.com, %0=www.abc.com,%2=abc, %-1=com%, %2+=abc.com
%-2+=www.abc
例如:virtualdocumentrootip   
/web/%0
c.重启服务
  
—基于域名的动态虚拟主机
a.申请多个域名指向服务器
b.修改httpd.conf
#vi
httpd.conf
   ...........
virtualdocumentroot    可变化的路径
...........
c.重启服务
注:配置基于域名虚拟主机时必须将usecanonicalname设为off
  

  7)混合使用:
  1,添加虚拟主机记录
           
  ServerNamewww.a.com
  DocumentRoot "/web/host1"
  
  
  ServerNamewww.b.org
  DocumentRoot "/web/host2"
  
  
  ServerNamewww.c.net
  DocumentRoot "/web/host3"
  
           
  ServerNamewww.d.gov
  DocumentRoot "/web/host4"
  
  2,启用监听8080端口
            Listen 172.16.100.2:8080
  3,配置辅助地址
  # ifconfig eth0:0 172.16.100.2
  4,创建主页面
           # mkdir /web/host{3,4}
           # echo "Host3" >/web/host3/index.html
  # echo "Host4" >/web/host4/index.html
  

配置用户认证和主机访问控制:
  1)主机访问控制:
  作用:限制访问站点资源的客户端来源,即设置允许或拒绝访问服务器资源的来源主机。
  配置指令:
  Order allow,deny|deny,allow
  Allow fromall|IP地址|网络号       //定义允许列表
  Deny fromall|IP地址|网络号       //定义拒绝列表
  指令说明:Order指令是用来定义allow和deny哪一个为默认法则;
  写在后面的为默认法则;
  写在前面的指令,没有显示定义的,即受后面指令控制。
  例子:
  Order allow,deny
  Allow from 172.16.0.0/16    //仅允许这个网段内的客户端访问
  

  Order deny,allow
  Deny from 172.16.0.0/16   //仅拒绝这个网段内的客户端访问
  

  Order allow,deny
  Allow from 172.16.0.0/16
  Deny from 172.16.100.7      //最长匹配原则 172.16.100.7是被拒绝的
  注意:这些命令可放directory/files/location容器中,也可以放在.htaccess文件
  

  2)用户认证:
  用户认证的分类:
  基本用户认证
  摘要用户认证
  --基于文本文件的用户认证配置指令:
  AuthType   basic|digset   //指定用户认证的类型
  AuthName   "字符串"         //配置用户认证的提示信息
  AuthUserfile文件路径      //配置存放用户口令信息的文件路径
  Requireuser   用户名      //指定可以访问站点资源的用户名
  Requiregroup用户组名    //指定可以访问站点资源的组名
  Requirevalid-user         //配置允许所有经过身份验证的用户都能访问资源
  Authgroupfile   文件路径    //配置存放用户组信息的文件路径
  Satisfyall|any         //配置主机访问控制和用户认证之间的相互关系
  当一个目录同时使用主机访问控制和用户认证两种规则时,
  Satisfy值为All时,表示必须同时满足两个规则才能访问;
  Satisfy值为Any时,表示任意一个规则满足都可以访问。
  注意:这些命令可放directory/files/location容器中,也可以放在.htaccess文件
  ---为客户端访问创建web用户:
             # htpasswd -c -m /etc/httpd/conf/.htpass jerry
               -c表示创建认证文件
               -m指定认证文件
             # cat /etc/httpd/conf/.htpass
             # htpasswd -m/etc/httpd/conf/.htpass tom
                //如果认证文件已经存在则不需要-c选项,否则会覆盖之前的文件  例子:
  1,创建用户
  # htpasswd -c -m /etc/httpd/conf/.htpass jerry
  2,设置用户认证
  
              Options None
              AllowOverrideAuthConfig
              AuthName "Realm"
              AuthType Basic         //有基本认证和摘要认证
              AuthUserFile /path/to/passwords   //指定认证文件路径
              Require jerry tom      //指明哪些用户可以访问valid-user表示所有用户
              
  

  注意:保证apache的启动用户对用户信息文件具有读权限
  

  3)apache 2.4中使用的新方法:
  基于IP的访问控制:
  语法格式:
  Require ip IPADDR
  Require not ip IPADDR
  IP地址格式:          IP
  NETWORK/NETMASK
  NETWORK/LENGTH
     NET
   例如:定义172.16.0.0网段有以下三种方式:
  172.16.0.0/255.255.0.0- 172.16.0.0/16- 172.16
  基于主机名的访问控制:
  语法格式:
  Require host HOSTNAME
  Require not host HOSTNAME
  主机名部分:
  可以是主机名
  也可以是域名
  例如:
  www.abc.com
  .abc.com
  

  基于用户的访问控制:
  语法格式:
  Require user USERNAME
  Require group GRPNAME
  

  特殊约定:
  允许所有主机访问:
  Require all granted
  
  拒绝所有主机访问:
  Require all deny
  

配置虚拟目录和URL重定向:
  1)配置虚拟目录:

  --认识虚拟目录:
  就是在站点中建立一个链接指向某个物理路径,可用于发布站点主目录以外资源或缩短物理路径。
  --虚拟目录配置指令:
  AliasURL-path物理路径
  作用:映射URL到文件系统的特定区域
  AliasMatch正则表达式物理路径
  作用:使用正则表达式映射URL到文件系统特定区域
  --注意:以上配置命令可以在主服务器或虚拟主机中配置
  --例子:
  Alias /images/ "/www/static/images/"
  

  2)配置URL重定向:

  --认识URL重定向:
  修改客户端请求的URL,并将修改后的URL返回给客户端,由客户端重新请求修改后的URL。
  --URL重定向配置指令:
  redirect [状态] URL-pathURL
  作用:发送一个外部重定向使客户端重定向到一个不同的URL
  RedirectMatch正则表达式URL
  作用:基于正则表达式匹配对当前的URL发送一个外部重定向
  --注意:以配置命令可以放在主服务器、虚拟主机、directory或.htaccess中
  --例子:
  RedirectMatch ^/(.*)$ http://www.new.com/$1
  

配置个人站点:
  userdir模块:
  # httpd -D DUMP_MODULES | grep user
  模块功能:
  可以实现当前主机上可以正常登录系统的每一个用户都可以拥有自己独立的个人站点。
  配置指令:
  
   UserDir disabled         //禁用user功能注释这行表示启用这个功能
   UserDir public_html       //设置user的主目录
  
  创建用户个人主页:
  # useradd jerry
  # su - jerry
  # mkdir public_html
  # echo "jerry home" >public_html/index.html
           # exit
           # setfacl -m u:apache:x /home/jerry/
  //必须apache启动用户有权限进入这个目录,并且能读取里面的文件
  

查看服务器状态:
  server-status模块:
  # httpd -D DUMP_MODULES |grep status
  先确定该模块是否已经加载:

  LoadModule status_module modules/mod_status.so
  添加容器:
  
  SetHandler server-status   //处理器
  #AllowOverride AuthConfig    //没有使用Order allow,deny 基于IP的访问控制 需要这行
  AuthName "Status"
  AuthType Basic
  AuthUserFile/etc/httpd/conf/.statuspass
  
  创建访问用户:
  # htpasswd -c -m /etc/httpd/conf/.statuspassstatus
  输出更为详细信息:
  ExtendedStatus On   //开启status扩展内容输出的信息更为详细

  server-status的输出说明:

  

Apache Server Status for 192.168.1.109服务器的配置地址Server Version:服务器软件版本Server Built: Apr 3 2014 23:56:16服务器的安装日期
Current Time:服务器当前时间Restart Time服务器上次重启的时间Parent Server Generation: 2apache在正常运行后,apache的父进程会重读配置文件,如果配置文件有改动那么就强制所有apache的子进程重启,Parent Server Generation就是记录这个重启次数的Server uptime: 8 secondsapache的持续运行时间3 requests currently being processed, 5 idle workers当前任务运行状况,正在处理的请求是3个,空闲的活动是5个  Scoreboard Key的含义:
  

-
等待连结中。S启动中R正在读取要求W正在送出回应K处于保持联机的状态D正在查找 DNSC
正在关闭连结L正在写入记录文件G进入正常结束程序中I
处理闲置.尚无此程序  

配置代理与负载均衡:
  1)正向代理:
  配置正向代理很简单,此处我们配置vhost来实现代理, 只需要在浏览器的Proxy选项里加入你的Apache配置的vHost主机即可。
  开启代理模块:
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_connect_module modules/mod_proxy_connect.so
LoadModule proxy_ftp_module modules/mod_proxy_ftp.so
LoadModule proxy_http_module modules/mod_proxy_http.so  引入vhost文件:
Include conf/extra/httpd-vhosts.conf  如果你想监听别的端口, 修改Listen参数:
Listen 80
Listen 8087
Listen 8088  将想监听的端口全都写上,相应的, 在vhost文件里写上:
NameVirtualHost *:80
NameVirtualHost *:8087
NameVirtualHost *:8088  NameVirtualHost表示vhost匹配的请求的ip和端口那些会取扫描vhost
  

  虚拟主机配置:

    DocumentRoot "D:/www/test"
    ServerName www.test.com
   
      Options FollowSymLinks
      AllowOverride All
      Order allow,deny
      Allow from all   
   
    #正向代理设置
    ProxyRequests On       #开启正向代理
    ProxyVia On            
      
      Order deny,allow
      Deny from all
      Allow from 127.0.0.1   
      
  配置解释:
  VirtualHost 后面的参数表示的是该VHost的IP/域名/和端口, 你可以写 :
  (1)IP:PORT, 例如 , 访问的时候通过IP访问
      (2) Domain, 例如 , 访问的时候通过域名访问, 也可以指定里面的ServerName来指定域名
        (3) *, 表示匹配所有对Apache监听主机的请求, 只要是apache监听到的请求都可以匹配该虚拟主机
     此处表示的就是监听所有80端口的请求, 但是由于ServerName里写了www.test.com, 所以这个vhost匹配的是www.test.com:80,
  现在看正向代理设置那一段:

[*]  ProxyRequests On:开启Apache正向代理
[*]  ProxyVia On:控制位于代理服务器链中的代理请求的流向
引用Apache2.2官方文档中对ProxyVia的解释如下:
  

  1,如果设置为默认值Off ,将不会采取特殊的处理。如果一个请求或应答包含"Via:"头,将不进行任何修改而直接通过。
  2,如果设置为On每个请求和应答都会对应当前主机得到一个"Via:"头。
  3,如果设置为Full ,每个产生的"Via:"头中都会额外加入Apache服务器的版本,以"Via:"注释域出现。
  4,如果设置为Block ,每个代理请求中的所有"Via:"头行都将被删除。且不会产生新的"Via:"头。

[*]  ...:用来控制谁可以访问你的代理
  


   Order deny,allow
   Deny from all
   Allow from 127.0.0.15
  客户端设置(以FireFox为例):
  


  测试:

  访问 www.sina.com,观察HTTP请求Response:

  可以看到,Via:www.test.com,正向代理成功了。
  

  2)反向代理:
  1,同样需要开启代理模块
  2,配置:

    DocumentRoot "/www/test"
    ServerName www.test.com
   
      Options FollowSymLinks
      AllowOverride All
      Order allow,deny
      Allow from all
   
    #反向代理设置
    ProxyRequests Off   #关闭正向代理 也就是启用反向代理
    ProxyPass /proxy http://www.proxypass.com/proxy
    ProxyPa***everse /proxy http://www.proxypass.com/proxy


    DocumentRoot "/www/proxypass"
    ServerName www.proxypass.com
            
         Options FollowSymLinks      
         AllowOverride All      
         Order allow,deny         
         Allow from all
   
  3,解释:
  通过在同一台主机上实现模拟反向代理的效果。

[*]  ProxyPass /proxy http://www.proxypass.com/proxy : 将 www.test.com/proxy 域下的所有请求转发给 www.proxypass.com/proxy 代理,例如 www.test.com/proxy/login.php 会交给 www.proxypass.com/proxy/login.php 代理
[*]  ProxyPa***everse /proxy http://www.proxypass.com/proxy :
  



[*]  www.proxypass.com/proxy/login.php 中有如下代码:
  

  www.proxypass.com/proxy/result.php 中有如下代码:
  

  

  4,测试效果:
  

  访问 www.test.com/proxy/login.php

[*]  Apache将请求交给 www.proxypass.com/proxy/login.php 代理,HTTP请求如图:
  



  可以发现其实Request中的请求还是 www.test.com 的,但是它确实是由 www.proxypass.com 来处理的

[*]  proxypass.com/proxy/login.php 重定向到 proxypass.com/proxy/result.php
  页面显示:
  

            in proxypass.com  HTTP请求如图:
  


  也可以看到请求依然是 www.test.com/proxy/result.php
  5,总结反向代理相关指令:
  ProxyRequests Off
开启反向代理SetEnv force-proxy-request-1.0 1强制使用HTTP/1.0 如果后端应用程序服务器不支持HTTP/1.1SetEnv proxy-nokeepalive 1关闭长连接 如果后端应用程序服务器不支持长连接proxypass 将一个远端服务器映射到本地服务器的URL空间中proxypa***everse
调整由反向代理服务器发送的HTTP回应头中的UR  

  3)负载均衡:
  1,加载负载均衡模块:
  LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
  2,相关配置:
  将Apache作为LoadBalance前置机分别有三种不同的部署方式,分别是:
  1,轮询均衡策略的配置
  进入Apache的conf目录,打开httpd.conf文件,在文件的末尾加入:
  ProxyPass / balancer://proxy/         #注意这里以"/"结尾
  
  BalancerMember http://192.168.6.37:6888/
  BalancerMember http://192.168.6.38:6888/
  
  

  我们来观察上述的参数“ProxyPass / balancer://proxy/”,其中,“ProxyPass”是配置虚拟服务器的命令,“/”代表发送Web请求的URL前缀,如:http://myserver/或者http://myserver/aaa,这些URL都将符合上述过滤条件;“balancer://proxy/”表示要配置负载均衡,proxy代表负载均衡名;BalancerMember 及其后面的URL表示要配置的后台服务器,其中URL为后台服务器请求时的URL。以上面的配置为例,实现负载均衡的原理如下:
  

  假设Apache接收到http://localhost/aaa请求,由于该请求满足ProxyPass条件(其URL前缀为“/”),该请求会被分发到后台某一个BalancerMember,譬如,该请求可能会转发到 http://192.168.6.37:6888/aaa进行处理。当第二个满足条件的URL请求过来时,该请求可能会被分发到另外一台BalancerMember,譬如,可能会转发到http://192.168.6.38:6888/。如此循环反复,便实现了负载均衡的机制。
  

  2,按权重分配均衡策略的配置
  ProxyPass / balancer://proxy/         #注意这里以"/"结尾
  
  BalancerMember http://192.168.6.37:6888/loadfactor=3
  BalancerMember http://192.168.6.38:6888/loadfactor=1
  
  

  参数”loadfactor”表示后台服务器负载到由Apache发送请求的权值,该值默认为1,可以将该值设置为1到100之间的任何值。以上面的配置为例,介绍如何实现按权重分配的负载均衡,现假设Apache收到http://myserver/aaa 4次这样的请求,该请求分别被负载到后台服务器,则有3次连续的这样请求被负载到BalancerMember为http://192.168.6.37:6888的服务器,有1次这样的请求被负载BalancerMember为http://192.168.6.38:6888后台服务器。实现了按照权重连续分配的均衡策略。
  

  3,权重请求响应负载均衡策略的配置
  ProxyPass / balancer://proxy/ lbmethod=bytraffic#注意这里以"/"结尾
  
  BalancerMember http://192.168.6.37:6888/loadfactor=3
  BalancerMember http://192.168.6.38:6888/loadfactor=1
  
  

  参数“lbmethod=bytraffic”表示后台服务器负载请求和响应的字节数,处理字节数的多少是以权值的方式来表示的。“loadfactor”表示后台服务器处理负载请求和响应字节数的权值,该值默认为1,可以将该值设置在1到100的任何值。根据以上配置是这么进行均衡负载的,假设Apache接收到http://myserver/aaa请求,将请求转发给后台服务器,如果BalancerMember为http://192.168.6.37:6888后台服务器负载到这个请求,那么它处理请求和响应的字节数是BalancerMember为http://192.168.6.38:6888 服务器的3倍(回想(2)均衡配置,(2)是以请求数作为权重负载均衡的,(3)是以流量为权重负载均衡的,这是最大的区别)。
  

  注:每次修改httpd.conf,用apachectl –k restart重新启动Apache。
  

配置带宽和并发连接数限制:
  1)配置带宽:
  mod_bandwidth可以对IP的并发数进行控制,也可以对下载流量进行控制,也可以对某个目录的流量进行控制。
     1,下载地址:http://bwmod.sourceforge.net/
  2,安装bw_mod:
  如果没有apxs工具,可以安装httpd-devel包。
  # yum install httpd-devel -y
  # tar-xzvf   mod_bw
  # cd mod_bw
  # apxs -i -a -c mod_bw.c
  3,配置带宽限制:
  
  ServerNamewww.a.com
  DocumentRoot "/web/host1"
  BandwidthModule On    //
  ForceBandWidthModule On
  Bandwidth all 1024000
  MinBandwidth all 50000
  LargeFileLimit * 500 50000
  MaxConnection all 6
  CustomLog "/var/log/httpd/access1_access_log" combined
  
  4,参数说明:
解压bandwidth的压缩文件后,里面有一个mod_bw.txt有详细的说明和实例,下面是部分参数说明:
1,BandWidth localhost 0                                    #对localhost不限速
2,BandWidth 192.168.1.5 102400                     #对192.168.1.5限速为100KB
3,BandWidth “u:^Mozilla(.*)” 10240            #用mozilla时限速10KB
4,BandWidth “u:wget” 102400                      #如果用wget下载时限速10KB
5,MinBandWidth all -1                                    #保证每个客户端最高速度可达10KB
6,LargeFileLimit .jpg 100 10240                      #jpg文件超过100KB,限速10KB
7,#下面的510挺好,如果不设置,apache自己会报错,就根报404差不多,页面非常的丑
ErrorDocument 510 /exceed_speed.html
BandWidthError 510
8,MaxConnection all 10                                       #所有ip最大连接数为10
9,MaxConnection 192.168.1.5 5                         #192.168.1.5最大连接数为5
  
  2)配置并发连接限制:
  1,下载地址:http://dominia.org/djao/limitipconn2.html
  2,安装mod_limitipconn模块
  # tar-xjvfmod_limitipconn-........tar.bz2
  # cdmod_limiticonn
  # apxs-i-a   -cmod_limitipconn.c
  3,配置:
  Extendedstatus   on
  
                                         #对应根目录
  MaxConnPerIP 6                                  #最大并发数
  NoIPLimit image/*                              #对图片不做限制
  
                             #对根目录下面的download
  MaxConnPerIP 1                              #最大并发数为1
  
  
  4,参数说明:
  Extendedstatus   on/off         #启用apache的扩展状态         
       Maxconnperip   数字             #设置每个客户机的最大并发连接数
配置规则重写:
  1)认识规则重写
规则重写就是web服务器会改写客户机符合特定规则的URL;用于实现资源重定向
  
2)规则重写的配置命令
—rewriteengine   
on/off
设置apache是否启用重写引擎
  
—rewriterule
作用:为重写引擎定义重写规则
格式:rewriterule   
正则表达式   替代字符串[标记]
正则表达式元字符:
          .         任意一个单字符               
             字符类:“chars”中的任意一个字符
          [^chars]字符类:不在“chars”中的字符
          text1|text2   
选择:text1或text2
          ?         
前面的字符出现0或1次
          *          前面的字符出现0或N次
(N>0)
          +          前面的字符出现1或N次(N>1)
          ^          锚定到行首
          $          锚定到行尾
          \字符      转义字符
标记:C         连接到下一条件规则 ....
          F          强烈禁URL
G         强烈废弃URL
          L         结尾规则
          N      
跳转到开头,从头再来
          NC      忽略大小写
          P      强制为代理
R       强制为重定向
实例:rewriterule    ^/$    http://www.sje.cn

  
—rewritecond
作用:定义重写发生的条件
格式:rewritecond   字符串   正则表达式   
[标记]
字符串所包含一些特殊字符
a.$N反向rewriterule中的分组
b.%N
反向rewritecond中的分组
   c. 服务器变量
         %{HTTP_USER_AGENT}   
客户机信息,包括操作系统和浏览器信息
         %{HTTP_HOST} 请求的主机名
%{REMOTE_ADDR}客户机IP地址
         %{REMOTE_HOST}客户机的主机名
%{REMOTE_PORT}客户机连接服务器所有端口
         %{REQUEST_METHOD}
客户机的请求方法
         %{REQUEST_FILENAME} 客户机的请求的文件名
%{REQUEST_URI}客户机请求URI
         %{DOCUMENT_ROOT} 服务器的站点主目录
%{SERVER_NAME}服务器的名称
         %{SERVER_ADDR}服务器的IP地址
%{SERVER_PORT}服务器的端口号
    特殊比较符号:
          <小于
          >
大于
          =等于
          -d判断是不是存在的目录
          -f
判断是不是存在的普通文件
          -s判断是不是为非空的普通文件
          -x
判断是不是为可执行的文件
          -l判断是不是为链接文件
          -U判断是不是有效的URL
标记:
          -NC   忽略大小写
          -OR   或
      实例:rewritecond
%{REMOTE_ADDR} ^192.168.3.1
  
--rewritebase
作用:设置目录级重写的基准URL
格式:rewritebaseURL-PATH
  
3) 规则重写的应用案例
   --移动站点主目录到站点的/bbs路径下
rewriteengine on
   rewriterule^/$    /bbs
-利用规则重写实现基于域名的虚拟主机
    RewriteEngine on
    RewriteCond   %{HTTP_HOST}   
^www\.abc\.com$
    RewriteRule   ^(.+)   %{HTTP_HOST}$1   
RewriteRule   ^www\.abc\.com(.*) /web/abc$1
    RewriteCond   
%{HTTP_HOST}    ^www\.linux\.cn$
    RewriteRule   ^(.+)   %{HTTP_HOST}$1   

    RewriteRule   ^www\.linux\.com(.*) /web/linux$1
  

配置使用SSL实现https访问:
  1,安装SSL模块:

# yum -y install mod_ssl
  2,自建CA:
  # cd /etc/pki/CA
  # (umask 077;openssl genrsa -out private/cakey.pem 2048)//产生CA服务器私钥
  # openssl req -new -x509 -key private/cakey.pem -out cacert.pem -days 365
  //生成CA自签名证书
  # touch index.txt
  # echo 01 >serial
  3,生成证书签发请求:

  # cd /etc/httpd/conf
  # mkdir ssl
  # cd ssl
  # (umask 077;openssl genrsa -out httpd.key 1024)   //生成私钥文件
  # openssl req -new -key httpd.key -out httpd.csr   //生成证书请求文件
  4,CA完成对证书的签发:
# openssl ca -in httpd.csr -out httpd.crt -days 365   //CA签署证书  5,修改配置文件:
  # vi /etc/httpd/conf.d/ssl.conf
  
  DocumentRoot "/web/host1"
  ServerName www.a.com
  SSLEngine on   //启用SSL引擎
  SSLProtocol all -SSLv2   //协议版本
  SSLCertificateFile/etc/httpd/conf/ssl/httpd.crt   //证书文件
  SSLCertificateKeyFile /etc/httpd/conf/ssl/httpd.key   //指定服务器私钥文件
  
  6,测试:
# openssl s_client -connect www.a.com:443 -CAfile /etc/pki/CA/cacert.pem  




页: [1]
查看完整版本: Apache之配置详解