教您玩转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]