搭建环境:Redhat 5.8 httpd-2.2.3-63.el5.i386
http协议简单介绍:http:Hyper Text Transfer Protocol:超文本传输协议,是一种基于tcp的传输方式,tcp的传输方式是3次握手来建立连接,四次断开。为了解决连接速度比较缓慢,所以加入了本地缓存机制。浏览器的缓存是加速网页的访问速度的。
Web服务器处理并发连接请求的架构方式有以下几种
1、单线程web服务器(Single-threaded web servers)
此种架构方式中,web服务器一次处理一个请求,结束后读取并处理下一个请求。在某请求处理过程中,其它所有的请求将被忽略,因此,在并发请求较多的场景中将会出现严重的必能问题。
2、多进程/多线程web服务器
此种架构方式中,web服务器生成多个进程或线程并行处理多个用户请求,进程或线程可以按需或事先生成。有的web服务器应用程序为每个用户请求生成一个单独的进程或线程来进行响应,不过,一旦并发请求数量达到成千上万时,多个同时运行的进程或线程将会消耗大量的系统资源。
3、I/O多路复用web服务器
为了能够支持更多的并发用户请求,越来越多的web服务器正在采用多种复用的架构——同步监控所有的连接请求的活动状态,当一个连接的状态发生改变时(如数据准备完毕或发生某错误),将为其执行一系列特定操作;在操作完成后,此连接将重新变回暂时的稳定态并返回至打开的连接列表中,直到下一次的状态改变。由于其多路复用的特性,进程或线程不会被空闲的连接所占用,因而可以提供高效的工作模式。
4、多路复用多线程web服务器
将多进程和多路复用的功能结合起来形成的web服务器架构,其避免了让一个进程服务于过多的用户请求,并能充分利用多CPU主机所提供的计算能力。
下面进行web服务器的基本安装、测试
1、安装httpd
yum install httpd
启动服务
service httpd start
即可看到测试页面
- httpd的配置文件
- /etc/httpd/conf/httpd.conf //主配置文件
- /etc/httpd/conf.d/*.conf //定义主配置文件调用的其他子配置文件
- /etc/init.d/httpd //httpd的服务脚本
- /etc/sysconfig/httpd //定义httpd脚本的配置文件。
- /etc/httpd/logs-->/var/log/httpd:日志目录
- /var/www:访问文件目录
- html:静态页面目录
- cgi-bin:动态页面目录(cgi:通用网关接口)
- apache服务默认的欢迎页面是/etc/httpd/conf.d/welcome.conf
2、不同版本对于MPM的支持
apache 2.2支持worker、prefork,但是其是直接编译到,在软件编译的时候就已经决定,若想更换PMP模块,必须重新编译、安装。
apache 2.3以上的版本内,就把PMP做成了模块,若想更换那个模块~只需要更改/etc/sysconfig/httpd内的模块内更改即可。
mpm_winnt :windows上用的线程处理机制
prefork (预先启动线程,一个请求用一个进程响应)
worker (一个请求用一个线程响应, (启动多个进程,每个进程生成多个线程))
event (基于事件的,一个进程处理多个请求)
3、httpd.conf主配置文件
- ### Section 1: Global Environment全局定义
- ### Section 2: 'Main' server configuration主服务段
- ### Section 3: Virtual Hosts虚拟主机
注意:当配置虚拟主机的时候,主区域和虚拟主机区域只能一个生效。
KeepAlive Off|ON :是否开启长链接
- -------------------------------------
- MaxKeepAliveRequests 100:最大长连接数
- KeepAliveTimeout 15:长连接的断开时间
- DocumentRoot "/var/www/html"文档根目录
- -------------------------------------
- 监听端口的设置:
- ----------------------------------
- Listen 80 //监听所有80端口
- Listen IP:80 //监听某个IP的端口
- -----------------------------------
- ServerAdmin root@localhost
- --------------------------------
- #ServerName www.example.com:80 // 虚拟主机设置的时候需要启用此
- DocumentRoot "/var/www/html" // 文档根目录
- --------------------------------
- <Directory />
- Options FollowSymLinks //跟随符号链接
- AllowOverride None
- Directory>---提供一个配置容器
- --------------------------------
- Options none :不支持任何选项
- Options Indexes :允许缩影目录
- FollowSynLinks: 允许访问符号链接指向的原文件
- Includes: 允许执行服务端包含(SSI)
- ExecCGI: 允许运行CGI脚本
- All: 支持所有选项
- --------------------------------
- AllowOverride None
- --------------------------------
- Order:用于定义基于主机的访问功能的,IP,网络地址或主机定义访问控制机制
- Order allow,deny :次序,定义使用白名单,写在后面的默认法则。
- allow from
- deny from
- Order deny,allow
- Deny from 192.168.0.0/24
- apache 2.4内的认证机制已经变了。
- ---------------------------------
基于用户的认证法则:
- allowoverride Authconfig:使用认证访问网站
- AuthType Basic //用户认证方式
- AuthName "By Invitation Only" //显示认证信息
- # Optional line:
- #AuthBasicProvider file
- AuthUserFile “/etc/httpd/conf/htpasswd”//用户的账号配置文件
- AuthGroupFile /usr/local/apache/passwd/groups //组账号配置文件
- Require user USERBNAME //指定某个用户
- Require valid-user //指定配置文件所有用户
- Require group GroupName //指定能访问的组
##########################################
-----------------------------------------------
DirectoryIndex index.html index.html.var //主页目录规定支持的类型
-----------------------------------------------
- 建立/etc/httpd/conf/htpasswd命令
- htpasswd -c -m /etc/httpd/conf/htpasswd USERNAME:第一次创建的时候使用-c参数,以后不能在使用,
- 否则会覆盖以前的用户
- -D:删除用户
- group文件的创建:只需在配置文件内加入以下内容:
- GROUPNAME:hadoop tom....(这些用户必须事先存在)
实例一、新建一个web,要求其使用用户的认证方式进行访问
账户:chrishttp和chrislic 密码:work
vim /etc/httpd/conf/httpd.conf 配置如下
- AllowOverride Authconfig
- AuthType Basic
- AuthName "By name Only"
- AuthUserFile "/etc/httpd/conf/htpasswd"
- AuthGroupFile "/usr/local/apache/passwd/groups"
- Require user chrishttp //如果允许两个用户则:Require user chrishttp , chrislic,
- //注意两个用户名直接必须有空格
- Require group httpdgroup
然后建立访问用户
htpasswd -c -m /etc/httpd/conf/htpasswd chrishttp
htpasswd -m /etc/httpd/conf/htpasswd chrislic //-c命令只在新建第一个用户的时候使用。
访问测试:
===================================================
4、基于用户身份认证和虚拟主机的web服务搭建实例
- 规划要求:基于IP的虚拟主机、基于域名的虚拟主机、基于端口的虚拟主机
- www.chris.com 172.16.7.2:80---
- 172.16.7.2:80是基于用户的验证,要求chrishttp用户能访问,其他用户不能访问。其根目录为/www/chris ,
- 主页内容:chris little page!
- www.a.com 172.16.7.3:80 //其根目录为/www/a ,主页内容:this is a’s page!
- www.chrisli.com 172.16.7.2:80 //其根目录为/www/chrisli ,主页内容:chrisli little page!
- www.chrislee.com 172.16.7.2:8080 ////其根目录为/www/chrislee ,主页内容:chrislee little page!
①、配置httpd.conf 关闭本地主机,开启虚拟主机
#DocumentRoot "/var/www/html" //注释掉本地主机
Listen 80
Listen 8080 //开启需要支持的端口
②、在/etc/httpd/conf.d/目录内新建一个配置文件:virtual.conf
其中的配置内容如下
- NameVirtualHost 172.16.7.2:80
- <VirtualHost 172.16.7.2:80>
- ServerName www.chris.com
- DocumentRoot "/www/chris" //指定网页根目录
- <Directory "/www/chris">
- AllowOverride Authconfig //定义开启验证
- AuthType Basic //验证类型
- AuthName "By name Only" //验证提示信息
- AuthUserFile "/etc/httpd/conf/htpasswd" //登录用户和密码认证文件
- Require user chrishttp //允许登录的用户
- Directory>
- VirtualHost>
- <VirtualHost 172.16.7.3:80>
- ServerName www.a.com
- DocumentRoot "/www/a"
- VirtualHost>
- <VirtualHost 172.16.7.2:8080>
- ServerName www.chrislee.com
- DocumentRoot "/www/chrislee"
- VirtualHost>
- <VirtualHost 172.16.7.2:80>
- ServerName www.chrisli.com
- DocumentRoot "/www/chrisli"
- VirtualHost>
为本机增加第二个IP地址,来为实现不同IP虚拟主机做准备
ip addr add 172.16.7.3/16 dev eth0
ip addr show
下面建立需要的基本文件和网页主页
为httpd用户认证提供用户和密码
htpasswd -c -m /etc/httpd/conf/htpasswd chrishttp
访问测试
基于不同IP的和认证的访问测试如下图
基于不同虚拟域名的访问:
首先在测试机端保证域名能解析到IP,如在hosts文件内增加两行
172.16.7.2 www.chrisli.com
172.16.7.2 www.chris.com
测试如下
至此我们web服务器的基本服务器和基于虚拟主机不同方式的服务器已经实现,如果其中操作有不对的地方~敬请各位技术达人指出~~~