1、Web服务的概述:
WorldWide Web简称web,是互联网组成部分之一。互联网常用的服务包括:WWW、Email、FTP等。
Web服务使用标准和规范的XML描述一系列操作的接口。该描述中包括了与服务进行交互所需要的全部细节以及消息格式、传输协议和服务位置。Web采用的基本结构是开放式的客户/服务器结构,分为服务器(web服务器)、客户接收机(Web浏览)和通信协议(HTTP)三部分。Web服务器管理各种WWW资源,按用户需求响应信息,并将所需信息通过Web浏览器传送给用户。Web服务通常可分为静态Web和动态Web服务两种。
2、工作原理
HTTP(HyperText Transfer Protocol,超文本传输协议)是分布式Web应用的核心技术协议,也是如今网络应用最多的协议。HTTP是一个基于请求/响应模式的、无状态的协议,在TCP/IP栈中属于应用层。
默认情况下,当web用户连接到Web服务器时,客户机(浏览器)通过与服务器的80端口上的监听程序建立连接联系。连接建立后,Web服务将等待浏览器的发起。所有的操作都由客户端向服务器提出。
表1 HTTP响应-状态代码与状态描述
状态代码 | 状态描述 | 说明 |
200 | OK | 客户端请求成功 |
400 | bad request | 由于客户端请求有语法错误,不能被服务器所理解 |
401 | Unauthorized | 请求未经授权。这个状态代码必须和www-authenticate报头域在一起使用 |
403 | Forbidden | 服务器收到请求,但是拒绝提供服务。服务器通常会在响应中给出不提供服务的原因 |
404 | not found | 请求的资源不存在,例如输入的URL错误 |
3、Web服务器软件
随着各种服务器技术的不断发展,各种web服务器软件层出不穷,当今最为流行的Web服务器软件有IIS和Apache。
表2 IIS和Apache的比较
服务 | 费用形式 | 稳定性 | 扩展性 |
IIS | 是windows服务器操作系统中的内置软件,需要购买正版windows操作系统 | IIS服务的500内部错误,需要不时重启才能保持高效率 | IIS只能在微软公司的windows操作系统下使用。对各种插件支持良好,对Perl、CGI、PHP和java等支持的也很完美 |
Apache | 完全免费 | 虽然配置复杂,但稳定性很好,能长时间工作 | 不仅可以用户windows平台,还可以用于Linux、UNIX及FreeBSD操作系统。对各种插件支持良好。对Perl、CGI、PHP和java等支持的也很完美 |
4、Apache服务器的安装。
RedHat Enterprise Linux 5中的Apache服务(名称为httpd,HTTP守护进程)默认没有安装,用户需要进行手工安装才能使用。可以使用Red Hat Enterprise Linux 5中的自带的软件包,也可以在官方网站(http://httpd.apache.org/)中下载源码进行安装。
4.1、查看是否安装Apache服务器或版本
rpm -q httpd
如果没有安装的话,进入Red Hat Enterprise Linux5光盘的Server目录中安装
rpm -ivh httpd-2.2.3-11.el5_1.3.i386.rpm
4.2、测试Apache服务器
安装成功后,使用命令:service httpd start。启动成功后,在客户端使用http://IP地址访问,如果安装DNS可以使用域名测试。
5、Apache基本配置
具体内容 | 功能说明 |
ServerRoot “/etc/httpd” | 此为Apache根目录,包括配置文件、记录文件、模块文件 |
PidFIle run/httpd.pid | 保存着Apache父进程ID |
Timeout 120 | 设定超时时间。如果客户端超过120秒还没连接到Server,或者Server超过120秒还没传送信息给客户端,则强制断线 |
KeepAlive Off | 不允许客户端同时提出多个请求 |
MaxKeepAliveReguest 100 | 每次连接允许的最大请求数,数字越大效率越高。0表示不限制 |
KeepAliveTimeout 15 | 用户端的请求如果15秒没发出,则断线 |
MinSpareServers 5 | 最少有5个闲置的httpd进程来监听用户的请求,如果实际的小于5,则会增加 |
MaxSpareServers 20 | 最大闲置进程为20 |
StarServer 8 | 启动时打开的httpd进程数目 |
Maxclients 256 | 限制客户端的同时最大连接数目。如果达到这个数目,客户端就会得到“用户太多,拒绝访问“错误提示 |
Listen 80 | 设置Apache服务的监听端口。 |
User apache Group apache | 设置Apache工作时使用的用户和组 |
主服务器配置
具体内容 | 功能说明 |
ServerAdimin root@localhost | 管理员的电子邮件地址。如果Apache出现问题,会寄信给管理员 |
DocumentRoot “/var/www/html” | 设置Apache主服务器网页存放地址 |
<Directory “/var/www/html”> Options Indexes FollowSymLinks AllowOverride None Order allow,deny Allow from all </Directory> | 设置Apache主服务器网页文件存放目录的访问权限 |
<IfMoudle mod_userdir.c> UserDir disable #UserDir public_html <IfMoule> | 设置用户是否可以在自己的目录下建立public_html目录来放置网页。如果设置为UserDir Public_html,则用户可以通过:http://服务器IP地址:端口/~用户名来访问其内容 |
DirectoryIndex index.html index.html.var | 设置预设首页,默认是index.html |
AccessFileName .htaccess | 设置Apache目录访问权限的控制文件 |
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined LogFormat "%h %l %u %t \"%r\" %>s %b" common LogFormat "%{Referer}i -> %U" referer LogFormat "%{User-agent}i" agent | 设置记录文件存放信息的格式。自定义四种:combined、common、referer、agent |
Alias /icons/ "/var/www/icons/" <Directory "/var/www/icons"> Options Indexes MultiViews AllowOverride None Order allow,deny Allow from all </Directory> | 定义一个图标虚拟目录,并设置访问权限 |
虚拟主机配置
具体内容 | 功能说明 |
#NameVirtualHost *:80 | 设置虚拟主机的名字和监听端口 |
#<VirtualHost *:80> # ServerAdmin webmaster@dummy-host.example.com # DocumentRoot /www/docs/dummy-host.example.com # ServerName dummy-host.example.com # ErrorLog logs/dummy-host.example.com-error_log # CustomLog logs/dummy-host.example.com-access_log common #</VirtualHost> | 虚拟主机的所有相关信息。 |
6、Apache 服务器控制存取方式
存取方式 | 针对的对象 |
<Directory> </Directory> | 针对目录 |
<Files> </Files> | 针对文件 |
<Location> </Location> | 针对位置 |
<Limit> </Limint> | 针对未知 |
在存取方式为:<Directory> </ Directory>中存在有Options选项,
<Directory />
Options FollowSymLinks
AllowOverride all
</Directory>
6.1、Options选项说明
选项 | 说明 |
All | 允许所有除了MultiViews、IncludesNOEXEC、SymLinkOwnerMatch的动作 |
ExecCGI | 允许执行CGI |
FollowSymLinks | 允许符号链接到其他目录和文件 |
Includes | 允许SSI |
IncludesNOEXEC | 允许SSI,但CGI的#exec和#include除外 |
Indexes | 允许显示文件列表 |
MulitViews | 允许不同的显示方式,例如图形和语言 |
SymLinksOwnerMatch | 允许符号链接到其他目录,但必须是拥有者 |
注意:Options可以是多个,但所有的必须在一行指定。
实例1 限制所有以P开头的目录不能访问
<DirectoryMatch /P>
Order deny,allow
Deny from all
</ DirectoryMatch>
7、查看Apache服务器运行状态
<Location /server-status>
SetHandler server-status
Order deny,allow
Deny from all
Allow from 192.168.2.10
</Location>
要想看到更多的信息,需要将ExtendedStatus on前的注释去掉8、小练习:
练习1:Apache认证登录:
1、在/var/www/html目录中新建一个网页:index.html
a)echo “hello world” > index.html
b)在该目录下创建以一个.htaccess文件
c)在.htaccess文件中进行配置
d)在/var/www/目录下创建以一个.htpasswd文件,用来存放进行登录认证的合法用户。
e)进入该目录,然后使用命令:htpasswd 文件名用户名,然后输入两次密码。
f)如果在该目录下没有.htpasswd,可以使用httpsswd -c 文件名用户名,然后输入两次密码
练习2:控制来源
允许/不允许某个主机或某段网络的主机访问
<Directory "/var/www/html">
Options Indexes FollowSymLinks
AllowOverride all
Order allow,deny //先匹配允许的,后匹配拒绝的
Allow from 192.168.2.10
</Directory>
练习3:Apache+Linux,Openssl证书管理
背景:某个公司给自己颁发了一个证书,保留自己的证书密钥,将公钥提供给用户。并且通过自己的密钥和用户直接进行认证。此时上图中的B即使一个网站服务器又是一个CA服务器。
1、制作自己的CA证书
a)Openssl genrsa 1024 > 私钥文件 //创建一个长为1024字节的私钥文件
b)Openssl ca -in 私钥文件 -x509 -out 证书 //创建证书
2、给网站B签发证书
a)Openssl genrsa 1024 > 私钥文件 //创建一个长为1024字节的私钥文件
b)Openssl req -new -key 私钥文件 -out 请求文件
c)Openssl ca -in 请求文件 -out 证书 //创建证书
步骤:
1、进入/etc/pki/CA目录,创建目录:certs newcerts crl,创建文件:index.txt serial
向serial中写入01,表示证书的一个十六进制的版本号
2、在CA/private目录中创建一个私钥文件cakey.pem,并产生证书cacert.pem
d)Openssl genrsa 1024 >cakey.pem
e)Openssl ca -in private/cakey.pem -x509 -out CA/cacert.pem
3、修改:/etc/pki/tls/openssl.cnf
4、安装distcache和mod_ssl
5、创建网站B的证书
a)mkdir /etc/httpd/certs //放置网站B的证书目录
b)cd /etc/httpd/certs
c)Openssl genrsa 1024 > httpd.key
d)Openssl req -new -key httpd.key -out httpd.req
e)Openssl ca -in httpd.req -out httpd.cert //执行后需要输入相关信息
6、捆绑,将证书信息和ssl进行捆绑
在/etc/httpd/conf.d/ssl.cnf
7、重启Apache,查看80和443端口是否开启。
测试:
在浏览器中输入:https://网站B的IP
最后一个感叹号是说明,你没有配置www.abc.com的DNS文件。解决方法可以在在本机中搭建DNS服务,也可以修改C:\WINDOWS\system32\drivers\etc\hosts文件。