教您玩转Apache服务器及虚拟主机

 

    HTTP是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。它于1990年提出,经过几年的使用与发展,得到不断地完善和扩展。目前在WWW中使用的是HTTP/1.0的第六版,HTTP/1.1的规范化工作正在进行之中,而且HTTP-NG(Next Generation of HTTP)的建议已经提出。

HTTP协议的主要特点可概括如下:

  1.支持客户/服务器模式。

  2.简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、HEAD、POST。每种方法规定了客户与服务器联系的类型不同。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。

  3.灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。

  4.无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。

  5.无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快

 

    深入了解http协议请参考网络相关文章,有跟详细的讲解,在来安装http服务之前,先来了解一下apache的新特性。

 apache  现在不只是web服务器 是一个软件基金会                       apache software foundation :ASF apache软件基金会                        

Apache web服务器软件拥有以下特性:                           

  1. 支持最新的HTTP/1.1通信协议                                      
  2. 拥有简单而强有力的基于文件的配置过程                            
  3. 支持通用网关接口 CGI                                            
  4. 支持基于IP和基于域名的虚拟主机 vhost                            
  5. 支持多种方式的HTTP认证                                          
  6. 集成Perl处理模块                                                
  7. 集成代理服务器模块                                              
  8. 支持实时监视服务器状态和定制服务器日志                          
  9. 支持服务器端包含指令(SSI)                                    
  10. 支持安全Socket层(SSL)                                        
  11. 提供用户会话过程的跟踪                                        
  12. 支持FastCGI                                                  
  13. 通过第三方模块可以支持Java Servlets   

所以如果你准备选择Web服务器,毫无疑问Apache是你的最佳选择。

下面就来在redhat5上搭建Apache服务器,实现www服务和虚拟主机的配置。

  
  
  
  
  1. [root@localhost mnt]# mkdir /mnt/cdrom  #创建挂载目录
  2. [root@localhost mnt]# mount /dev/cdrom /mnt/cdrom  #挂载光盘
  3. mount: block device /dev/cdrom is write-protected, mounting read-only 
  4. [root@localhost mnt]# cd /mnt/cdrom/Server/ 
  5. [root@localhost Server]# ls |grep httpd 
  6. httpd-2.2.3-22.el5.i386.rpm 
  7. httpd-devel-2.2.3-22.el5.i386.rpm 
  8. httpd-manual-2.2.3-22.el5.i386.rpm 
  9. system-config-httpd-1.3.3.3-1.el5.noarch.rpm 
  10. [root@localhost Server]# rpm -ivh httpd-2.2.3-22.el5.i386.rpm  #安装httpd-包
  11. Preparing...            ########################################### [100%] 
  12.    1:httpd              ########################################### [100%] 
  13. [root@localhost Server]# service httpd start  #启动httpd服务
  14. ?.. httpd锛                                             [ok] 

  
  
  
  
  1. [root@localhost Server]# rpm -ql httpd 
  2. /etc/httpd  #根目录
  3. /etc/httpd/conf 
  4. /etc/httpd/conf.d  #动态网站的开发
  5. /etc/httpd/conf.d/README 
  6. /etc/httpd/conf.d/proxy_ajp.conf 
  7. /etc/httpd/conf.d/welcome.conf 
  8. /etc/httpd/conf/httpd.conf  #服务器主配置文档
  9. /etc/httpd/conf/magic 
  10. /etc/httpd/logs  #服务器日志文件,是/var/log/httpd的连接
  11. /etc/httpd/modules 
  12.  

/var/www/html 为服务器的默认存放网页的位置,只要我们在这个文件夹中创建一个简单的页面就可以测试Apache服务器是否能正常的工作,当能正常工作后再配置httpd.conf 来启用Apache的各种功能和特性。

  
  
  
  
  1. [root@localhost ~]# echo "<h1>hello my Apache<h1>>/var/www/html/index.html 
  2. [root@localhost ~]# ls /var/www/html 
  3. index.html 
  4. [root@localhost ~]#  

此时一个简单的Apache服务器以搭建完毕,在客户端就可以访问其www服务,

 

 

此时Apache服务器以正常工作,但是其工作模式还要给大家做一下粗略的介绍

  
  
  
  
  1. # prefork MPM  # prefork模式
  2. <IfModule prefork.c> 
  3. StartServers       8  #指定服务器启动时建立的子进程数量,prefork默认为5
  4. MinSpareServers    5  #空闲子进程的最小数量,默认为5
  5. MaxSpareServers   20  #设置空闲子进程的最大数量,默认为10
  6. ServerLimit      256 
  7. MaxClients       256  #默认的MaxClient最大是256个线程
  8. MaxRequestsPerChild  4000  #每个子进程在其生存期内允许伺服的最大请求数量
  9. #默认为10000
  10. </IfModule> 
  11.  
  12. # worker MPM 
  13. <IfModule worker.c> 
  14. StartServers         2 
  15. MaxClients         150 
  16. MinSpareThreads     25 
  17. MaxSpareThreads     75 
  18. ThreadsPerChild     25 
  19. MaxRequestsPerChild  0 
  20. </IfModule> 

从上边的代码片段中我们可以看到是以MPM机制的 顺便详细介绍一下其各个的作用,很重要,对一个Apache服务器的性能来说很重要。请务必仔细看

 prefork模式配置详解

 

<IfModule mpm_prefork_module>

ServerLimit 256

StartServers 5  指定服务器启动时建立的子进程数量,prefork默认为5。

MinSpareServers 5  空闲子进程的最小数量,默认为5

MaxSpareServers 10  设置空闲子进程的最大数量,默认为10。

MaxClients 256

MaxRequestsPerChild 0

</IfModule>

ServerLimit

默认的MaxClient最大是256个线程,如果想设置更大的值,就的加上ServerLimit这个参数。20000是ServerLimit这个参数的最大值。如果需要更大,则必须编译apache,此前都是不需要重新编译Apache。

生效前提:必须放在其他指令的前

MaxClients

限定同一时间客户端最大接入请求的数量(单个进程并发线程数),默认为256。任何超过MaxClients限制的请求都将进入等候队列,一旦一个链接被释放,队列中的请求将得到服务。要增大这个值,你必须同时增大ServerLimit。

MaxRequestsPerChild

每个子进程在其生存期内允许伺服的最大请求数量,默认为10000.到达MaxRequestsPerChild的限制后,子进程将会结束。如果MaxRequestsPerChild为"0",子进程将永远不会结束。将MaxRequestsPerChild设置成非零值有两个好处:

1.可以防止(偶然的)内存泄漏无限进行,从而耗尽内存。

2.给进程一个有限寿命,从而有助于当服务器负载减轻的时候减少活动进程的数量。

Apache的默认的工作模式为prefork 我们可以通过httpd -l 或者apachectl -l 查看,两个命令的显示结果是一样的

  
  
  
  
  1. [root@localhost ~]# httpd -l 
  2. Compiled in modules: 
  3.   core.c 
  4.   prefork.c 
  5.   http_core.c 
  6.   mod_so.c 
  7. [root@localhost ~]#  
支持多方面的认证,身份验证,来源控制和加密通讯,来保护个人站点的安全性。下面就简单演示一下验证用户的效果,大致命令如下。
  
  
  
  
  1. [root@localhost ~]# vim /etc/httpd/conf/httpd.conf 
  2.  <Directory "/var/www/html"> 
  3.  
  4.     AllowOverride All 
  5.     Order allow,deny 
  6.     Allow from all 
  7.  
  8.  </Directory> 
  9. [root@localhost ~]# service httpd restart  #重新启动服务,每次改动配置文档就要重启服务
  10. ?.. httpd                                             [ok] 
  11. ?.. httpd                                             [ok] 
  12. [root@localhost ~]#  
  13. [root@localhost ~]# cd /var/www/html 
  14. [root@localhost html]# vim .htaccess 
  15.    
  16.    authuserfile /var/www/html/.htpasswd 
  17.    authtype     basic 
  18.    authname    zhangsan 
  19.    require     valid-user 
  20.                  
  21. [root@localhost html]# htpasswd -c .htpasswd user1 
  22. New password:  
  23. Re-type new password:  
  24. Adding password for user user1 
  25. [root@localhost html]# htpasswd  .htpasswd user2 
  26. New password:  
  27. Re-type new password:  
  28. Adding password for user user2 
  29. [root@localhost html]# cat .htpasswd  
  30. user1:OC7PnLbceGazM 
  31. user2:XjWh39UD5Ow9s 
  32. [root@localhost html]#  
在客户端访问

 

 

查看一下成功访问的日志

  
  
  
  
  1. [root@localhost ~]# tail /etc/httpd/logs/access_log   #显示成功日志记录
  2. 192.168.0.199 - user1 [29/Sep/2011:03:37:21 +0800] "GET / HTTP/1.1" 304 - "-" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1130.1 Safari/536.11" 
  3. 192.168.0.199 - user1 [29/Sep/2011:03:37:22 +0800] "GET /favicon.ico HTTP/1.1" 404 288 "-" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1130.1 Safari/536.11" 
  4. [root@localhost ~]#  

此时就为/var/www/html 设置了用户的身份验证,还可以做来源控制,Order allow deny  ,此时先看关于allow的控制语句,然后再匹配deny的控制语句,当然 order就是调节allow 和deny 匹配顺序的,在实际工作中,根据需要来确定 allow和deny的顺序。

接下来演示一下虚拟主机的实现,先介绍一下虚拟主机的几个主要的类型

 

基于ip地址的虚拟主机
192.168.0.110

 

www.abc.com

:80 /var/www/html
192.168.0.111 tec.abc.com :80 /var/www/tec
192.168.0.112 mkt.abc.com :80 /var/www/mkt

 

基于端口的虚拟主机

少量ip 多个名字 多个端口 多个站点
192.168.0.110 www.abc.com :80 /var/www/html
192.168.0.110 tec.abc.com 800 /var/www/tec
192.168.0.110 mkt.abc.com :8000 /var/www/mkt

 

 

基于主机头的虚拟主机
少量ip 多个名字 1个端口 多个站点
192.168.0.110 www.abc.com :80 /var/www/html
192.168.0.110 tec.abc.com : 80 /var/www/tec
192.168.0.110 mkt.abc.com :80

/var/www/mkt

了解了虚拟主机的几个主要的类型,其中基于主机头的虚拟主机是非常常用的一直配置虚拟主机的方式,下面我们就来演示一下基于主机头的虚拟主机。

  
  
  
  
  1. [root@localhost ~]# vim /etc/httpd/conf/httpd.conf 
  2.  
  3.  # DocumentRoot "/var/www/html"  #关闭本行命令 
  4.  NameVirtualHost *:80  #打开本行命令 
  5. <VirtualHost *:80> 
  6.  ServerName www.abc.com 
  7.  Documentroot /var/www/html 
  8.  ErrorLog logs/www-error_log 
  9.  CustomLog logs/www-access_log common 
  10. </VirtualHost> 
  11. <VirtualHost *:80> 
  12.  ServerName tec.abc.com 
  13.  Documentroot /var/www/tec 
  14.  ErrorLog logs/tec-error_log 
  15.  CustomLog logs/tec-access_log common 
  16. </VirtualHost> 
  17. <VirtualHost *:80> 
  18.  ServerName mkt.abc.com 
  19.  Documentroot /var/www/mkt 
  20.  ErrorLog logs/mkt-error_log 
  21.  CustomLog logs/mkt-access_log common 
  22. </VirtualHost> 
  23. ********************************** 
  24.  
  25. [root@localhost www]# mkdir tec mkt 
  26. [root@localhost www]# ls 
  27. cgi-bin  error  html  icons  mkt  tec 
  28. [root@localhost www]# echo "<h1>hello ,this is tec<h1>> tec/index.html 
  29. [root@localhost www]# echo "<h1>hello ,this is mkt<h1>> mkt/index.html 
  30. [root@localhost www]# httpd -t 
  31. Syntax OK 
  32. [root@localhost www]# service httpd restart 
  33. start httpd                                            [ok] 
  34. start httpd                                            [ok] 
  35. [root@localhost www]#  

 在客户端进行测试,但是此处没有配置dns服务器,所以只能用hosts文件来解析ip地址。

 192.168.0.110   tec.abc.com                                  192.168.0.110   www.abc.com                                    192.168.0.110   mkt.abc.com

下面进行验证基于主机头虚拟主机的

 

基于虚拟目录的虚拟主机

若果您的服务器还有空闲的地方,为了避免空间的浪费,可以对外租用,此时可以创建虚拟目录来管理别人的站点,并可以为之作相应的访问控制机制。

 

  
  
  
  
  1. [root@localhost var]# vim /etc/httpd/conf/httpd.conf 
  2.  Alias /qq/     "/var/qq"  #创建别名 有意义,好记的名字
  3.  
  4. <Directory "/var/qq">  #对应的文件夹名字,可以随便命名
  5.     Options Indexes MultiViews 
  6.     AllowOverride None  #相应的控制机制
  7.     Order allow,deny 
  8.     Allow from all 
  9. </Directory> 

访问只需使用http://192.168.0.110/qq 即可访问文件夹命名为qq的相关内容。

文章先写到这儿,关于Apache的相关功能没有详细演示,如果您有需要或者哪里不清楚请留言,有错误处请您指正。下篇是继续关于linux + Apache + mysql + php快速建站的搭建。希望您继续关注。。。。

 

 

你可能感兴趣的:(apache,虚拟主机,http服务,服务器搭建)