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服务器软件拥有以下特性:
所以如果你准备选择Web服务器,毫无疑问Apache是你的最佳选择。
下面就来在redhat5上搭建Apache服务器,实现www服务和虚拟主机的配置。
- [root@localhost mnt]# mkdir /mnt/cdrom #创建挂载目录
- [root@localhost mnt]# mount /dev/cdrom /mnt/cdrom #挂载光盘
- mount: block device /dev/cdrom is write-protected, mounting read-only
- [root@localhost mnt]# cd /mnt/cdrom/Server/
- [root@localhost 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
- [root@localhost Server]# rpm -ivh httpd-2.2.3-22.el5.i386.rpm #安装httpd-包
- Preparing... ########################################### [100%]
- 1:httpd ########################################### [100%]
- [root@localhost Server]# service httpd start #启动httpd服务
- ?.. httpd锛 [ok]
- [root@localhost Server]# 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的各种功能和特性。
- [root@localhost ~]# echo "<h1>hello my Apache<h1>" >/var/www/html/index.html
- [root@localhost ~]# ls /var/www/html
- index.html
- [root@localhost ~]#
此时一个简单的Apache服务器以搭建完毕,在客户端就可以访问其www服务,
此时Apache服务器以正常工作,但是其工作模式还要给大家做一下粗略的介绍
- # prefork MPM # prefork模式
- <IfModule prefork.c>
- StartServers 8 #指定服务器启动时建立的子进程数量,prefork默认为5
- MinSpareServers 5 #空闲子进程的最小数量,默认为5
- MaxSpareServers 20 #设置空闲子进程的最大数量,默认为10
- ServerLimit 256
- MaxClients 256 #默认的MaxClient最大是256个线程
- MaxRequestsPerChild 4000 #每个子进程在其生存期内允许伺服的最大请求数量
- #默认为10000
- </IfModule>
- # worker MPM
- <IfModule worker.c>
- StartServers 2
- MaxClients 150
- MinSpareThreads 25
- MaxSpareThreads 75
- ThreadsPerChild 25
- MaxRequestsPerChild 0
- </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 查看,两个命令的显示结果是一样的
- [root@localhost ~]# httpd -l
- Compiled in modules:
- core.c
- prefork.c
- http_core.c
- mod_so.c
- [root@localhost ~]#
- [root@localhost ~]# vim /etc/httpd/conf/httpd.conf
- <Directory "/var/www/html">
- AllowOverride All
- Order allow,deny
- Allow from all
- </Directory>
- [root@localhost ~]# service httpd restart #重新启动服务,每次改动配置文档就要重启服务
- ?.. httpd [ok]
- ?.. httpd [ok]
- [root@localhost ~]#
- [root@localhost ~]# cd /var/www/html
- [root@localhost html]# vim .htaccess
- authuserfile /var/www/html/.htpasswd
- authtype basic
- authname zhangsan
- require valid-user
- [root@localhost html]# htpasswd -c .htpasswd user1
- New password:
- Re-type new password:
- Adding password for user user1
- [root@localhost html]# htpasswd .htpasswd user2
- New password:
- Re-type new password:
- Adding password for user user2
- [root@localhost html]# cat .htpasswd
- user1:OC7PnLbceGazM
- user2:XjWh39UD5Ow9s
- [root@localhost html]#
查看一下成功访问的日志
- [root@localhost ~]# tail /etc/httpd/logs/access_log #显示成功日志记录
- 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"
- 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"
- [root@localhost ~]#
此时就为/var/www/html 设置了用户的身份验证,还可以做来源控制,Order allow deny ,此时先看关于allow的控制语句,然后再匹配deny的控制语句,当然 order就是调节allow 和deny 匹配顺序的,在实际工作中,根据需要来确定 allow和deny的顺序。
接下来演示一下虚拟主机的实现,先介绍一下虚拟主机的几个主要的类型
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 |
了解了虚拟主机的几个主要的类型,其中基于主机头的虚拟主机是非常常用的一直配置虚拟主机的方式,下面我们就来演示一下基于主机头的虚拟主机。
- [root@localhost ~]# vim /etc/httpd/conf/httpd.conf
- # DocumentRoot "/var/www/html" #关闭本行命令
- NameVirtualHost *:80 #打开本行命令
- <VirtualHost *:80>
- ServerName www.abc.com
- Documentroot /var/www/html
- ErrorLog logs/www-error_log
- CustomLog logs/www-access_log common
- </VirtualHost>
- <VirtualHost *:80>
- ServerName tec.abc.com
- Documentroot /var/www/tec
- ErrorLog logs/tec-error_log
- CustomLog logs/tec-access_log common
- </VirtualHost>
- <VirtualHost *:80>
- ServerName mkt.abc.com
- Documentroot /var/www/mkt
- ErrorLog logs/mkt-error_log
- CustomLog logs/mkt-access_log common
- </VirtualHost>
- **********************************
- [root@localhost www]# mkdir tec mkt
- [root@localhost www]# ls
- cgi-bin error html icons mkt tec
- [root@localhost www]# echo "<h1>hello ,this is tec<h1>" > tec/index.html
- [root@localhost www]# echo "<h1>hello ,this is mkt<h1>" > mkt/index.html
- [root@localhost www]# httpd -t
- Syntax OK
- [root@localhost www]# service httpd restart
- start httpd [ok]
- start httpd [ok]
- [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
下面进行验证基于主机头虚拟主机的
基于虚拟目录的虚拟主机
若果您的服务器还有空闲的地方,为了避免空间的浪费,可以对外租用,此时可以创建虚拟目录来管理别人的站点,并可以为之作相应的访问控制机制。
- [root@localhost var]# vim /etc/httpd/conf/httpd.conf
- Alias /qq/ "/var/qq" #创建别名 有意义,好记的名字
- <Directory "/var/qq"> #对应的文件夹名字,可以随便命名
- Options Indexes MultiViews
- AllowOverride None #相应的控制机制
- Order allow,deny
- Allow from all
- </Directory>
访问只需使用http://192.168.0.110/qq 即可访问文件夹命名为qq的相关内容。
文章先写到这儿,关于Apache的相关功能没有详细演示,如果您有需要或者哪里不清楚请留言,有错误处请您指正。下篇是继续关于linux + Apache + mysql + php快速建站的搭建。希望您继续关注。。。。