WEB服务器涉及软件有:Apache/nginx/Tomcat/websphere/lighthttpd

现在下面利用Apache进行部署WEB服务器

一:安装

#yum install httpd* -y

二:查看

#rpm -qa |grep httpd

httpd-manual-2.2.15-15.el6_2.1.noarch -------文档
httpd-tools-2.2.15-15.el6_2.1.x86_64 -------工具

httpd-devel-2.2.15-15.el6_2.1.x86_64 --------开发包
httpd-2.2.15-15.el6_2.1.x86_64 --------主程序包


三:配置

#vim /etc/httpd/conf/httpd.conf

以下是主要配置项

(1)ServerTokens OS --向客户端提供一些服务器和信息

-----可以通过curl命令进行认证
# curl -I http://10.1.1.35
HTTP/1.1 200 OK
Date: Tue, 06 Mar 2012 02:03:38 GMT
Server: Apache/2.2.3 (Red Hat)
Content-Type: text/html;charset=ISO-8859-1


(2)serverRoot "/etc/httpd" --存放配置文件一主目录
(3)PidFile run/httpd.pid --pid文件
(4)Timeout 120 --连接超时时间
(5)KeepAlive Off --值为Off时,客户端每次刷新一次在服务器上就产生一个链接,当值为ON时客户端不管如何刷新都只会产生一个链接
(6)MaxKeepAliveRequests 100 ---最大链接数为100
(7)KeepAliveTimeout 15 ----每个链接保持15秒就会自动断开
(8)运行模式
<IfModule prefork.c> --预派生模式 ,lamp一般用这种
StartServers 8
MinSpareServers 5
MaxSpareServers 20
ServerLimit 256
MaxClients 256 --最大并发数
MaxRequestsPerChild 4000 --最大请求数
</IfModule>


(9)Listen 80 --监听端口

(10)下面的都属于叫DSO dynamic shared object 动态共享模块
LoadModule auth_basic_module modules/mod_auth_basic.so
LoadModule auth_digest_module modules/mod_auth_digest.so
LoadModule authn_file_module modules/mod_authn_file.so
LoadModule authn_alias_module modules/mod_authn_alias.so
LoadModule authn_anon_module modules/mod_authn_anon.so
LoadModule authn_dbm_module modules/mod_authn_dbm.so
LoadModule authn_default_module modules/mod_authn_default.so
LoadModule authz_host_module modules/mod_authz_host.so
LoadModule authz_user_module modules/mod_authz_user.so
LoadModule authz_owner_module modules/mod_authz_owner.so
LoadModule authz_groupfile_module modules/mod_authz_groupfile.so
LoadModule authz_dbm_module modules/mod_authz_dbm.so
LoadModule authz_default_module modules/mod_authz_default.so
..................................

(11)Include conf.d/*.conf --表示conf.d/下的*.conf配置文件生效

(12)运行身份
User apache
Group apache --以什么身份运行
(13)ServerAdmin root@localhost --管理邮箱
(14)DocumentRoot "/var/www/html" --网站家目录
(15)DirectoryIndex index.html index.html.var --定义主页文件
(16)AccessFileName .htaccess --网页加密
(17)ErrorLog logs/error_log --错误日志
(18)LogLevel warn --日志等级
(19)下面为日志的格式
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



四:实例

(1)修改网站家目录

#vim /etc/httpd/conf/httpd.conf
DocumentRoot "/www" --修改网站根目录为/www
<Directory "/www"> --把这个也对应的容器修改为/www

创建/www

#mkdir /www
#/etc/init.d/httpd reload --重装启apache服务
#echo 'new main page' > /www/index.html
#elinks 127.0.0.1 --看到新网站根目录下的new main page信息
------注意,不要开启selinux,否则换新的家目录的话,会造成报目录不存在的错误-----------


(2)容器控制

1、directory (目录)

<Directory "/www"> --对/www目录进行的控制
Options Indexes FollowSymLinks --允许列表,符号链接
AllowOverride None --不使用.htaccess控制
Order allow,deny
Allow from all --针对/www目录的访问权限的控制,这两句代表允许所有访问
</Directory> --容器结束


--------

indexes --指当找不到默认的主页文件时,就把此目录下的文件或者目录以列表形式显示出来
FollowSymlinks --允许符号链接,扩展了网站根目录,允许链接到网站根目录以外
allowoverride none --可以把none改为all来允许.htaccess控制
order allow,deny --指定的是先允许,后拒绝
allow from all --指定允许所有


例一:将网站的内网按照目录进行列表出来

条件1.
Options Indexes FollowSymLinks --相应目录要有indexes参数
条件2.
没有主页文件
条件3.
符合上面两个条件,就会访问到redhat的欢迎页面
#vim /etc/httpd/conf.d/welcome.conf --注释掉里面的全部内容,或者是删除这个文件
#/etc/init.d/httpd reload
#elinks 127.0.0.1 --可以看到是以列表形式显示了


例二:访问控制

Order allow,deny
Allow from all ---- --允许所有

Order allow,deny
deny from all -------拒绝所有

Order allow,deny
allow from all
deny from 2.2.2.35 ----允许所有,但拒绝35

Order allow,deny
allow from all
deny from all --拒绝所有

Order allow,deny
deny from all
allow from all -- --还是拒绝所有,读取的顺序由order决定

Order deny,allow
deny from all
allow from 2.2.2.35 ---只允许35,其它都拒绝


1、在/www目录下新建一个bbs目录,也就是/www/bbs,再在/www/bbs里建立一个index.html文件,使用directory目录容器控制拒绝35访问,别的都允许。


<Directory "/www/bbs"> --不能嵌套,需要将这些代码直接添加到新的地方,所以这里写绝对路径
order allow,deny
allow from all
deny from 10.10.10.35 --可以把10.1.1.35换成域名,这个表示这个域下的所有主机名都不能访问(需要hosts文件和DNS来支持)
</Directory>
-------全新添加代码,不要嵌套在/www的目录容器里------


2、file(文件) ------针对文件的控制

<Directory "/www">
Options Indexes FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
<files "1"> --表示35这个客户端不能访问/www/1,而且如果要控制/www/bbs/1这个文件,不能在这里写成<files "bbs/1">,需要在/www/bbs这个目录的directory容器里再嵌套files标签来控制
order allow,deny
allow from all
deny from 10.10.10.35
</files>
</Directory>


-----下面这段是apache的默认的一个files容器的配置示例----------
<Files ~ "^\.ht"> --以.ht开头的文件不被客户端用户看到
Order allow,deny
Deny from all
</Files>


1、例网站下所有目录(包括子目录)以ule开头的文件都不能被访问
<Files ~ "^ule">
Order allow,deny
Deny from all
</Files>


2、网站下所有目录(包括子目录)以.txt结尾的文件都不能被访问
<Files ~ "\.txt$">
Order allow,deny
Deny from all
</Files>


3、网站下所有.gif .jpeg .png的图片都被拒绝
<Files ~ "\.(gif|jpeg|png)$">
Order allow,deny
Deny from all
</Files>


3、location(位置,url)


<Location "/bbs">
order allow,deny
deny from all
</Location>
-----这是对http://IP/bbs 这种URL(uniform resource location)来进行权限控制----


五:虚拟主机

#mkdir /www/aaa
#mkdir /www/bbb
#mkdir /www/ccc
#echo "aaa main page" > /www/aaa/index.html
#echo "bbb main page" > /www/bbb/index.html
#echo "ccc main page" > /www/ccc/index.html


1、基于IP的虚拟主机

在配置文件中添加如下代码
#vim /etc/httpd/conf/httpd.conf

NameVirtualHost *:80
<VirtualHost *:80>
DocumentRoot /www/aaa
ServerName 10.10.10.36
ErrorLog logs/36-error_log
CustomLog logs/36-access_log common
</VirtualHost>

<VirtualHost *:80>
DocumentRoot /www/bbb
ServerName 10.10.10.37
ErrorLog logs/37-error_log
CustomLog logs/37-access_log common
</VirtualHost>

<VirtualHost *:80>
DocumentRoot /www/ccc
ServerName 10.10.10.38
ErrorLog logs/38-error_log
CustomLog logs/38-access_log common
</VirtualHost>

虚拟两个IP ,本服务器IP是10.10.10.36
# ifconfig eth0:0 10.10.10.37 netmask 255.255.255.0
# ifconfig eth0:1 10.10.10.38 netmask 255.255.255.0
# /etc/init.d/httpd restart

验证:
http://10.10.10.36/
http://10.10.10.37/
http://10.10.10.38/ --实际情况每个IP使用DNS对应自己的域名

总结:此基于IP进行配置存在浪费IP地址资源


2、基于端口的虚拟主机
在配置文件中添加如下代码
#vim /etc/httpd/conf/httpd.conf
Listen 80 --这一句默认就有,不用再加
Listen 8000
Listen 8080

<VirtualHost *:80>
DocumentRoot /www/aaa
ServerName 10.10.10.36
ErrorLog logs/36-error_log
CustomLog logs/36-access_log common
</VirtualHost>
<VirtualHost *:8000>
DocumentRoot /www/bbb
ServerName 10.10.10.36
ErrorLog logs/37-error_log
CustomLog logs/37-access_log common
</VirtualHost>
<VirtualHost *:8080>
DocumentRoot /www/ccc
ServerName 10.10.10.36
ErrorLog logs/38-error_log
CustomLog logs/38-access_log common
</VirtualHost>

#/etc/init.d/httpd restart

验证:
http://10.10.10.36/
http://10.10.10.36:8000/
http://10.10.10.36:8080/

总结

缺点:客户端访问时输入端口不方便,对客户端来说不够透明:还有就是开放端口多了,安全性降低。


3、基于域名的虚拟主机
--需要DNS的cname记录的支持,或者A记录
aaa.web.com
bbb.web.com
ccc.web.com

--以下架构是DNS服务器和apache服务器的IP在同一台机器10.10.10.36上,也可以考虑分成两台服务器来做
# yum install bind* -y
# vim /var/named/chroot/etc/named.conf
options {
directory "/var/named";
};

zone "web.com" IN {
type master;
file "data/master.web.com.zone";
};

# vim /var/named/chroot/var/named/data/master.web.com.zone
$TTL 86400
@ IN SOA rootbug. rootbug. (
20131009
120
240
360
86400 )
IN NS www.web.com.
aaa IN A 10.10.10.36 --这里为apache服务器的IP
bbb IN CNAME aaa
ccc IN CNAME aaa

# /etc/init.d/named restart

# vim /etc/httpd/conf/httpd.conf
NameVirtualHost *:80
<VirtualHost *:80>
DocumentRoot /www/aaa
ServerName aaa.web.com
ErrorLog logs/aaa-error_log
CustomLog logs/aaa-access_log common
</VirtualHost>
<VirtualHost *:80>
DocumentRoot /www/bbb
ServerName bbb.web.com
ErrorLog logs/bbb-error_log
CustomLog logs/bbb-access_log common
</VirtualHost>
<VirtualHost *:80>
DocumentRoot /www/ccc
ServerName ccc.web.com
ErrorLog logs/ccc-error_log
CustomLog logs/ccc-access_log common
</VirtualHost>

# /etc/init.d/httpd restart


--以下是客户端的验证
# vim /etc/resolv.conf
nameserver 10.10.10.36 --DNS指向DNS服务器的IP

http://aaa.web.com/
http://bbb.web.com/
http://ccc.web.com/


六:Apache限速

(1)添加模块支持:

mod-cband-0.9.7.2.tgz

(2)编译模块

#tar xvf mod-cband-0.9.7.2.tgz -C /usr/src/
#cd /usr/src/mod-cband-0.9.7.2/
#./configure ;make ;make install

(3)查看模块是否成功加载

#/etc/httpd/conf/httpd.conf -------里是否自动加载了下面这句话
LoadModule cband_module /usr/lib/httpd/modules/mod_cband.so


(4)针对虚拟主机abc.rootbug.com进行限速
NameVirtualHost *:80
<VirtualHost *:80>
DocumentRoot /www/aaa
ServerName abc.rootbug.com -----配置限速的主机

ErrorLog logs/aaa.com-error_log
CustomLog logs/aaa.com-access_log common

cbandlimit 100M --指网站允许的总的下载流量
cbandperiod 1W --清空时间
cbandspeed 1024 10 30 --当前总带宽,每秒可以同时连接10个,最大的总连接数,1024在这里除以8就是kb每秒的单位
cbandremotespeed 10kb/s 3 3 --针对单一客户端下载速度为10kb/s,每秒可以同时3个连接,最多一个IP生成3个连接
<location /cband-status>
sethandler cband-status --使用http://IP/cband-status访问控制状态
</location>
<location /cband-status-me>
sethandler cband-status-me ----使用http://IP/cband-status-me访问控制状态
</location>
</VirtualHost>

#/etc/init.d/httpd restart


#dd if=/dev/zero of=/www/aaa/123 bs=1M count=1000 --创建一个大点的文件,做下载测试
#wget http://news.cluster.com/123 可以看到具体的速度是否限速。