随风飞世 发表于 2018-11-26 06:52:35

教您玩转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服务器软件拥有以下特性:


[*]支持最新的HTTP/1.1通信协议
[*]拥有简单而强有力的基于文件的配置过程
[*]支持通用网关接口 CGI
[*]支持基于IP和基于域名的虚拟主机 vhost
[*]支持多种方式的HTTP认证
[*]集成Perl处理模块
[*]集成代理服务器模块
[*]支持实时监视服务器状态和定制服务器日志
[*]支持服务器端包含指令(SSI)
[*]支持安全Socket层(SSL)
[*]提供用户会话过程的跟踪
[*]支持FastCGI
[*]通过第三方模块可以支持Java Servlets
  所以如果你准备选择Web服务器,毫无疑问Apache是你的最佳选择。
  下面就来在redhat5上搭建Apache服务器,实现www服务和虚拟主机的配置。


[*]# mkdir /mnt/cdrom #创建挂载目录
[*]# mount /dev/cdrom /mnt/cdrom #挂载光盘
[*]mount: block device /dev/cdrom is write-protected, mounting read-only
[*]# cd /mnt/cdrom/Server/
[*]# ls |grep httpd
[*]httpd-2.2.3-22.el5.i386.rpm
[*]httpd-devel-2.2.3-22.el5.i386.rpm
[*]httpd-manual-2.2.3-22.el5.i386.rpm
[*]system-config-httpd-1.3.3.3-1.el5.noarch.rpm
[*]# rpm -ivh httpd-2.2.3-22.el5.i386.rpm #安装httpd-包
[*]Preparing...            ###########################################
[*]   1:httpd            ###########################################
[*]# service httpd start #启动httpd服务
[*]?.. httpd锛                                             



[*]# rpm -ql httpd
[*]/etc/httpd                            #根目录
[*]/etc/httpd/conf
[*]/etc/httpd/conf.d                     #动态网站的开发
[*]/etc/httpd/conf.d/README
[*]/etc/httpd/conf.d/proxy_ajp.conf
[*]/etc/httpd/conf.d/welcome.conf
[*]/etc/httpd/conf/httpd.conf             #服务器主配置文档
[*]/etc/httpd/conf/magic
[*]/etc/httpd/logs                         #服务器日志文件,是/var/log/httpd的连接
[*]/etc/httpd/modules
[*]

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


[*]# echo "hello my Apache" >/var/www/html/index.html
[*]# ls /var/www/html
[*]index.html
[*]#

  此时一个简单的Apache服务器以搭建完毕,在客户端就可以访问其www服务,
http://blog.51cto.com/attachment/201207/122204830.jpg
  此时Apache服务器以正常工作,但是其工作模式还要给大家做一下粗略的介绍


[*]# prefork MPM                # prefork模式
[*]
[*]StartServers       8          #指定服务器启动时建立的子进程数量,prefork默认为5
[*]MinSpareServers    5          #空闲子进程的最小数量,默认为5
[*]MaxSpareServers   20          #设置空闲子进程的最大数量,默认为10
[*]ServerLimit      256
[*]MaxClients       256          #默认的MaxClient最大是256个线程
[*]MaxRequestsPerChild4000    #每个子进程在其生存期内允许伺服的最大请求数量
[*]#默认为10000
[*]
[*]
[*]# worker MPM
[*]
[*]StartServers         2
[*]MaxClients         150
[*]MinSpareThreads   25
[*]MaxSpareThreads   75
[*]ThreadsPerChild   25
[*]MaxRequestsPerChild0
[*]

  从上边的代码片段中我们可以看到是以MPM机制的 顺便详细介绍一下其各个的作用,很重要,对一个Apache服务器的性能来说很重要。请务必仔细看
  prefork模式配置详解
  
  ServerLimit 256
  StartServers 5指定服务器启动时建立的子进程数量,prefork默认为5。
  MinSpareServers 5空闲子进程的最小数量,默认为5
  MaxSpareServers 10设置空闲子进程的最大数量,默认为10。
  MaxClients 256
  MaxRequestsPerChild 0
  
  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 查看,两个命令的显示结果是一样的


[*]# httpd -l
[*]Compiled in modules:
[*]core.c
[*]prefork.c
[*]http_core.c
[*]mod_so.c
[*]#

支持多方面的认证,身份验证,来源控制和加密通讯,来保护个人站点的安全性。下面就简单演示一下验证用户的效果,大致命令如下。


[*]# vim /etc/httpd/conf/httpd.conf
[*]
[*]
[*]    AllowOverride All
[*]    Order allow,deny
[*]    Allow from all
[*]
[*]
[*]# service httpd restart       #重新启动服务,每次改动配置文档就要重启服务
[*]?.. httpd                                             
[*]?.. httpd                                             
[*]#
[*]# cd /var/www/html
[*]# vim .htaccess
[*]   
[*]   authuserfile /var/www/html/.htpasswd
[*]   authtype   basic
[*]   authname    zhangsan
[*]   require   valid-user
[*]               
[*]# htpasswd -c .htpasswd user1
[*]New password:
[*]Re-type new password:
[*]Adding password for user user1
[*]# htpasswd.htpasswd user2
[*]New password:
[*]Re-type new password:
[*]Adding password for user user2
[*]# cat .htpasswd
[*]user1:OC7PnLbceGazM
[*]user2:XjWh39UD5Ow9s
[*]#

在客户端访问
http://blog.51cto.com/attachment/201207/111500756.jpg   http://blog.51cto.com/attachment/201207/111500363.jpg
  查看一下成功访问的日志


[*]# tail /etc/httpd/logs/access_log   #显示成功日志记录
[*]192.168.0.199 - user1 "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"
[*]192.168.0.199 - user1 "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"
[*]#

  此时就为/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




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


[*]# vim /etc/httpd/conf/httpd.conf
[*]
[*] # DocumentRoot "/var/www/html"          #关闭本行命令
[*] NameVirtualHost *:80                  #打开本行命令
[*]
[*] ServerName www.abc.com
[*] Documentroot /var/www/html
[*] ErrorLog logs/www-error_log
[*] CustomLog logs/www-access_log common
[*]
[*]
[*] ServerName tec.abc.com
[*] Documentroot /var/www/tec
[*] ErrorLog logs/tec-error_log
[*] CustomLog logs/tec-access_log common
[*]
[*]
[*] ServerName mkt.abc.com
[*] Documentroot /var/www/mkt
[*] ErrorLog logs/mkt-error_log
[*] CustomLog logs/mkt-access_log common
[*]
[*]**********************************
[*]
[*]# mkdir tec mkt
[*]# ls
[*]cgi-binerrorhtmliconsmkttec
[*]# echo "hello ,this is tec" > tec/index.html
[*]# echo "hello ,this is mkt" > mkt/index.html
[*]# httpd -t
[*]Syntax OK
[*]# service httpd restart
[*]start httpd                                          
[*]start httpd                                          
[*]#

  在客户端进行测试,但是此处没有配置dns服务器,所以只能用hosts文件来解析ip地址。
  192.168.0.110   tec.abc.com                                  192.168.0.110   www.abc.com                                    192.168.0.110   mkt.abc.com
  下面进行验证基于主机头虚拟主机的
http://blog.51cto.com/attachment/201207/122124483.jpg   http://blog.51cto.com/attachment/201207/122124149.jpg
  基于虚拟目录的虚拟主机
  若果您的服务器还有空闲的地方,为了避免空间的浪费,可以对外租用,此时可以创建虚拟目录来管理别人的站点,并可以为之作相应的访问控制机制。


[*]# vim /etc/httpd/conf/httpd.conf
[*]   Alias /qq/   "/var/qq"       #创建别名 有意义,好记的名字
[*]
[*]             #对应的文件夹名字,可以随便命名
[*]    Options Indexes MultiViews
[*]    AllowOverride None          #相应的控制机制
[*]    Order allow,deny
[*]    Allow from all
[*]   

  访问只需使用http://192.168.0.110/qq 即可访问文件夹命名为qq的相关内容。
  文章先写到这儿,关于Apache的相关功能没有详细演示,如果您有需要或者哪里不清楚请留言,有错误处请您指正。下篇是继续关于linux + Apache + mysql + php快速建站的搭建。希望您继续关注。。。。



页: [1]
查看完整版本: 教您玩转Apache服务器及虚拟主机