Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1648622
  • 博文数量: 63
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 646
  • 用 户 组: 普通用户
  • 注册时间: 2015-05-26 18:02
个人简介

祸兮福之所倚,福兮祸之所伏

文章分类

全部博文(63)

文章存档

2020年(11)

2019年(10)

2017年(10)

2016年(25)

2015年(7)

我的朋友

分类: 系统运维

2015-07-29 14:28:34

        Apache是世界使用排名第一的Web服务器软件。它可以运行在几乎所有广泛使用的计算机平台上,由于其跨平台和安全性被广泛使用,是最流行的Web服务器端软件之一。它快速、可靠并且可通过简单的API扩充,将Perl/Python解释器编译到服务器中,是当今世界最流行应用最广泛的web服务器软件,其使用的select机制以稳定性强著称,是个模块化的服务器。跟nginx相比,通常httpd使用线程prefork模型处理连接,所以稳定性好,而nginx则以功能强,速度快著称。

     apeche有work ,prefork,event三种mpm模型
       prefork:这是默认使用模型 ,使用一个进程处理一个请求,这个MPM具有很强的自我调节能力,只需要很少的配置指令调整。它是要求将每个请求相互独立的情况下最好的MPM,这样若一个请求出现问题就不会影响到其他请求。最重要的是将MaxClients设置为一个足够大的数值以处理潜在的请求高峰,同时又不能太大,以致需要使用的内存超出物理内存的大小。
     

<IfModule prefork.c> 如果prefork.c模块存在,则定义在标签内的参数有效

StartServers      8 服务开启默认启动的工作进程数,不包含主进程

MinSpareServers    5 最少空闲进程数;

MaxSpareServers  20 最大空闲进程数;

ServerLimit      256 最大活动进程数;

MaxClients      256 并发请求的最大数,一条进程最多处理多少个请求

MaxRequestsPerChild  4000 每个子进程在生命周期内所能服务的最多请求个数


         work:
此多路处理模块(MPM)使网络服务器支持混合的多线程多进程。由于使用线程来处理请求,所以可以处理海量请求,而系统资源的开销小于基于进程的MPM。但是,它也使用了多进程,每个进程又有多个线程,以获得基于进程的MPM的稳定性。控制这个MPM的最重要指令是,控制每个子进程允许建立的线程数的ThreadsPerChild指令,和控制允许建立的总线程数的MaxClients指令。
             

   Event MPM:以上两种稳定的MPM方式在非常繁忙的服务器应用下都有些不足。尽管HTTPKeepalive方式能减少TCP连接数量和网络负载,但是 Keepalive需要和服务进程或者线程绑定,这就导致一个繁忙的服务器会耗光所有的线程。 Event MPM是解决这个问题的一种新模型,它把服务进程从连接中分离出来。在服务器处理速度很快,同时具有非常高的点击率时,可用的线程数量就是关键的资源限 制,此时Event MPM方式是最有效的。一个以Worker MPM方式工作的繁忙服务器能够承受每秒好几万次的访问量(例如在大型新闻服务站点的高峰时),而Event MPM可以用来处理更高负载。值得注意的是,Event MPM不能在安全HTTPHTTPS)访问下工作。 

对于Event 模式,apache给出了以下警告:

This MPM is experimental, so it may or may not work as expected .

这种MPM目前处于试验状态,他可能不能按照预期的那样工作。


          模式的互换
           将当前prefork模式改变为work模式
          mv   httpd     httpd.prefork
          mv   httpd.worl    httpd 
         

prefork和worker模式的比较
prefork模式使用多个子进程,每个子进程只有一个线程。每个进程在某个确定的时间只能维持一个连接。在大多数平台上,Prefork MPM在效率上要比Worker MPM要高,但是内存使用大得多。prefork的无线程设计在某些情况下将比worker更有优势:它可以使用那些没有处理好线程安全的第三方模块,并且对于那些线程调试困难的平台而言,它也更容易调试一些。

worker模式使用多个子进程,每个子进程有多个线程。每个线程在某个确定的时间只能维持一个连接。通常来说,在一个高流量的HTTP服务器上,Worker MPM是个比较好的选择,因为Worker MPM的内存使用比Prefork MPM要低得多。但worker MPM也由不完善的地方,如果一个线程崩溃,整个进程就会连同其所有线程一起"死掉".由于线程共享内存空间,所以一个程序在运行时必须被系统识别为"每个线程都是安全的"。

总的来说,prefork方式速度要稍高于worker,然而它需要的cpu和memory资源也稍多于woker。

            httpd主配置文件在 /etc/httpd/httpd.conf   几乎所有关于apache的配置都在这个文件中。
          基于二进制包安装配置文件在/etc/httpd/conf/httpd.conf
            ServerRoot "/usr/local/apache"      设置软件所在的位置
             PidFile  "/var/run/httpd.pid"          设置pid文件所在位置
            Listen 80                                               设置监听的端口
 
LoadModule alias_module modules/mod_alias.so
#LoadModule rewrite_module modules/mod_rewrite.so
           这种都是加载apache的对应模块
User daemon             设置运行httpd程序的用户
Group daemon            
ServerTokens OS                          这是给客户端显示web程序的一些信息,相关参数还有好几个,参考apache官方文档
Timeout 60                                     设置超时时间
KeepAlive Off                                  是否设置持久连接
MaxKeepAliveRequests 100        持久连接最大请求个数,0为无限制
KeepAliveTimeout 15                    Number of seconds to wait for the next request from the same client on the same connection.   等待下一个相同客户端对于相同资源的连接的等待时间。


 
ServerAdmin you@example.com           设置管理员邮箱
ServerName       设置主机名

<IfModule prefork.c>
StartServers       8
MinSpareServers    5
MaxSpareServers   20
ServerLimit      256
MaxClients       256
MaxRequestsPerChild  4000
</IfModule>

prefork模型的默认参数设置

Include conf.d/*.conf     使这个文件夹下面的配置文件生效
DocumentRoot "/var/www/html "      设置文件根目录

设置的基本模型
<Directory "/var/www/html">
     Option  { Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews} 选项具体查看官网说明
      AllowOverride {None FileInfo AuthConfig Limit}
      Order allow,deny
       Allow from all                      /*允许所有人可以访问*/
</Directory >
这就是一个典型的对于某个目录的限制
<IfModule mod_userdir.c>
这个模块相关设置可以使能够访问用户家目录
<Directory /home/*/public_html>
#    AllowOverride FileInfo AuthConfig Limit
#    Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
#    <Limit GET POST OPTIONS>    允许使用GET POST 方法
#        Order allow,deny
#        Allow from all
#    </Limit>
#    <LimitExcept GET POST OPTIONS>   除了GET POST 其他都拒绝
#        Order deny,allow
#        Deny from all
#    </LimitExcept>
#</Directory>
这个是对一些方法的限制
DirectoryIndex index.html index.html.var   这是设置默认主页
AccessFileName     .htaccess     访问的用户文件
<Files ~ "^\.ht">
    Order allow,deny
    Deny from all
    Satisfy All
</Files>
所有以.ht结尾文件全部拒绝用户访问
CustomLog logs/access_log combined设置访问日志和格式
ErrorLog logs/error_log  设置错误日志

设置用户密码访问
受限创建用户密码  htpasswd  -c  dbmpasswd mary创建一个用户名为marry的用户并保存在dbmpasswd这个文件中

  AllowOverride AuthConfig
    AuthType   Basic
    AuthName    "Please input your pass"
    AuthBasicprovider  file
    AuthUserfile  "/etc/httpd/passwd/password"
    AuthGroupfile  "/etc/httpd/passwd/group"
    Require valid-user
这是一个允许passwd文件所有用户能访问的设置
    Require  user tony   只允许tony访问

在group中写入mygroup:tony

require group mygroup  允许mygroup中成员进行访问


接下来介绍下httpd虚拟主机配置
      要实现虚拟主机必须先取消中心主机注释主配置文件中DocumentRoot
      虚拟主机可以用一台服务器服务于多个站点
      apache支持基于ip 域名和端口的虚拟主机

基于ip的虚拟主机:
         ip1:80
         ip2:80  
编辑/etc/httpd/conf.d/virtual.conf                     
<VirtualHost 192.168.1.180:80>
      ServerName />       DocumentRoot  "/web/htdoc1"
</VirtualHost>
<VirtualHost 192.168.1.181:80>
     ServerName www2.node2.test.com
     DocumentRoot "/web/htdoc2"
</VirtualHost>
这是基于192.168.1.180和192.168.1.181两个ip做的虚拟主机
要访问前需给网卡加入别名
ifconfig eth0:0 192.168.1.180/24
ifconfig eth0:1 192.168.1.181/24
这样就可以通过访问地址来访问相应位置的文件了


基于端口来访问


<VirtualHost 192.168.1.180:80>
      ServerName />       DocumentRoot  "/web/htdoc1"
</VirtualHost>
<VirtualHost 192.168.1.180:8080>
      ServerName />       DocumentRoot  "/web/htdoc3"
</VirtualHost>
前提是需要在主配置文件加入对8080端口监听。这样就可以实现用相同ip使用不同端口对文件的访问

基于域名的虚拟主机访问
      NameVirtualHost 192.168.1.122:80
<VirtualHost 192.168.1.122:80>
      ServerName />       DocumentRoot  "/web/htdoc1"
</VirtualHost>
<VirtualHost 192.168.1.122:80>
      ServerName />       DocumentRoot  "/web/htdoc3"
</VirtualHost>
首先要用namevirtualhost定义要监听的ip和端口
同时要使用dns指定域名和ip的绑定  192.168.1.122            www2.node2.test.com
此时就可以直接用域名访问相对应的文件内容了

当然其中也可以加入主配置文件中的各种参数和配置。














阅读(1621) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~