web 服务器


www.netcraft.net     --此网站会有每月份的世界上网站使用的WEB服务器的使用率统计

  apache   a patch server
  IIS
  google
  nginx 
  
  lighttpd
      IBM websphere
  tomcat   jboss     weblogic   --中间件

 

      windows server  +  iis  + sqlserver(mssql) +asp
      lamp:  linux + apache + mysql + php
      lnmp :   linux + nginx(读engine X) + mysql + php  

 

[root@li ~]# yum install httpd* -y


[root@dns share]# rpm -qa |grep httpd
httpd-manual-2.2.3-31.el5
httpd-2.2.3-31.el5
httpd-devel-2.2.3-31.el5

 

 

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

erverRoot "/etc/httpd" --存放配置文件一主目录

PidFile run/httpd.pid --pid文件

Timeout 120  --连接超时时间

KeepAlive Off --一般是短时间下载文件比较多的网站  在ON的时候 一次连接多次请求

 

Listen 80 --监听端口

<IfModule prefork.c> --进程模式
StartServers       8
MinSpareServers    5
MaxSpareServers   20
ServerLimit      256
MaxClients       256 --最大并发数
MaxRequestsPerChild  4000
</IfModule>

 

下面的都属于叫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
 ..................................


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

User apache
Group apache --以什么身份运行

ServerAdmin root@localhost --管理邮箱

DocumentRoot "/www" --网站家目录

DirectoryIndex index.html index.html.var --定义主页文件

AccessFileName .htaccess --网页加密

ErrorLog logs/error_log  --错误日志

LogLevel warn  --日志等级


--下面为日志的格式
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

 


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

erverRoot "/etc/httpd" --存放配置文件一主目录

PidFile run/httpd.pid --pid文件

Timeout 120  --连接超时时间

KeepAlive Off --一般是短时间下载文件比较多的网站  在ON的时候 一次连接多次请求

Listen 80 --监听端口

<IfModule prefork.c> --进程模式
StartServers       8
MinSpareServers    5
MaxSpareServers   20
ServerLimit      256
MaxClients       256 --最大并发数
MaxRequestsPerChild  4000
</IfModule>

 

下面的都属于叫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
 ..................................


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

User apache
Group apache --以什么身份运行

ServerAdmin root@localhost --管理邮箱

DocumentRoot "/www" --网站家目录

DirectoryIndex index.html index.html.var --定义主页文件

AccessFileName .htaccess --网页加密

ErrorLog logs/error_log  --错误日志

LogLevel warn  --日志等级


--下面为日志的格式
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

 

 /etc/init.d/httpd start 

 使用浏览器:输入自己的IP,或者127.0.0.1回环地址会看到一个红帽的欢迎页面


 例一:建立网站主页
  在网站根目录下  建立一个主页文件
  
  echo 'main page' > /var/www/html/index.html

  http://127.0.0.1/ --就可以看到main page的信息,也就是直接访问到主页

把主页文件写成html标签的格式如下:
<html>
<head>
<title>笔记站点</title>
</head>
<body>
<center><h1>欢迎来我的网站!@_@</h1></center>
</body>
</html>


 例二:修改网站根目录

 vim /etc/httpd/conf/httpd.conf

281:  DocumentRoot "/www"  --修改网站根目录为/www
  
306: <Directory "/www">  --把这个也对应的修改为/www

         mkdir /www
  
 /etc/init.d/httpd reload  --重装启apache服务        
  
  echo 'new main page' > /www/index.html

 http://127.0.0.1/  --看到新网站根目录下的new main page信息


例三:修改主页类型或者主页名


DirectoryIndex index.php  index.html.var

 /etc/init.d/reload    

 使用浏览器访问,发现没有返回主页信息,因为上面的意思为:先找网站家目录下的index.php,不存在话,再找index.html.var,都不存在,就表示找不到主页


 echo 'php main page' > /www/index.php


 再使用浏览器访问,就会返回php main page信息


  elinks 10.1.1.45 --elinks是一个文本模式的web浏览器


例四:修改语言集和字符集

DefaultLanguage zh-CN --默认语言集打开注释,并改为简体中文zh-CN

LanguagePriority zh-CN en ca cs da de el eo es et fr he hr it ja ko ltz nl nn no pl pt pt-BR ru sv  zh-TW  --语言优先级,把zh-CN写到最前

AddDefaultCharset UTF-8 --字符编码,如果中文的话,有可能需要改为gb2312或者gbk,因你的网站文件的默认编码而异

 

----------------------------------

关于apache的标签,容器(访问控制)

 directory (目录)    file(文件)  location (位置)


<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决定

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

<Directory "/www/bbs">
   order allow,deny
   allow from all
   deny from 10.1.1.35  --可以把10.1.1.35换成.cluster.com这个表示cluster.com这个域下的所有主机名都不能访问(需要hosts文件和DNS来支持)
</Directory>
--加上这段话,不要嵌套在/www的目录容器里

 

 


例七.files 容器  --针对文件的控制


<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.1.1.35 
</files>
</Directory>


<files "/www/1">
    order allow,deny
    deny from all
</files>  --这种写法没有生效,不对,所以要files容器嵌套到目录容器内部,要上面的那种写法


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


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

 

练习:网站下所有目录(包括子目录)以.txt结尾的文件都不能被访问

<files ~ "txt$">
        order allow,deny
        deny from all
</files>

 


例八:location 容器


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


--location容器有时候和directory有可能重合,并且配置有冲突,那么location优先生效,下面这种情况,http://IP/bbs是不能访问的

<Location "/bbs">
      order allow,deny
       deny from all
</Location>


<Directory "/www/bbs">
   order allow,deny
   allow from all
</Directory>

 

例九:对mod_status和mod_info这两个DSO配置服务器的信息查看


176 LoadModule status_module modules/mod_status.so

890 <Location /server-status>
891     SetHandler server-status
892     Order deny,allow
893     Deny from all
894     Allow from 10.1.1.35
895 </Location>

 
178 LoadModule info_module modules/mod_info.so


902 <Location /server-info>
903     SetHandler server-info
904     Order deny,allow
905     Deny from all
906     Allow from 10.1.1.35
907 </Location>


http://IP/server-status

http://IP/server-info

 

 

例十:对网站目录使用apache的基本加密功能    .htaccess


# vim /www/.htaccess   --对哪个目录进行限制,就在哪个目录下建立此文件

authname "please input your username and password! @_@"
authtype basic
authuserfile /etc/httpd/userpasswd
require valid-user

# htpasswd -c /etc/httpd/userpasswd  aaa  --创建此文件,并加入一个用户,自定义密码,注意此用户与系统普通用户无关
New password:
Re-type new password:
Adding password for user aaa


# htpasswd  /etc/httpd/userpasswd  bbb  --再增加一个用户
New password:
Re-type new password:
Adding password for user bbb


# cat /etc/httpd/userpasswd
aaa:JscuRCtWV0Sh.
bbb:C6wrx4pFco/lk --密码为密文


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

<Directory "/www">
    Options Indexes FollowSymLinks
    AllowOverride all --改成all,支持.htaccess加密
    Order allow,deny
    Allow from all
</Directory>

# /etc/init.d/httpd restart

 

http://IP 访问时,需要验证

再次访问需要清空浏览器缓存才需要验证

 

练习:针对家目录下的一个子目录打开验证

 

 

 

例十:
 用户主页空间

336 <IfModule mod_userdir.c>
342 #    UserDir disable --注释这一行
349     UserDir public_html --打开这一行的注释
351 </IfModule>


--再把下面这一段打开注释
357 <Directory /home/*/public_html>
358     AllowOverride FileInfo AuthConfig Limit
359     Options MultiViews Indexes SymLinksIfOwnerMatch In    cludesNoExec
360     <Limit GET POST OPTIONS>
361         Order allow,deny
362         Allow from all
363     </Limit>
364     <LimitExcept GET POST OPTIONS>
365         Order deny,allow
366         Deny from all
367     </LimitExcept>
368 </Directory>

# /etc/init.d/httpd restart


# mkdir /home/user1/public_html
# mkdir /home/user2/public_html
# echo "user1空间主页" > /home/user1/public_html/index.html
# echo "user2空间主页" > /home/user2/public_html/index.html

# chmod 701 /home/user1/
# chmod 701 /home/user2/

--访问测试
http://IP/~user1/
http://IP/~user2/

 

======================================


 虚拟主机

 一台服务器跑多台web服务


VPS   virtual  private  server   虚拟专用服务器

使用虚拟化技术(vitural sever 或者  vmware   EXS server  )把一台服务器分隔成几个服务器,每个都拥有独立的CPU资源,内存资源,磁盘资源,独立IP等

 


[root@36 ~]# mkdir /www/aaa
[root@36 ~]# mkdir /www/bbb
[root@36 ~]# mkdir /www/ccc
[root@36 ~]# echo "aaa main page" > /www/aaa/index.html
[root@36 ~]# echo "bbb main page" > /www/bbb/index.html
[root@36 ~]# echo "ccc main page" > /www/ccc/index.html

 

例十一:基于IP的虚拟主机

NameVirtualHost *:80

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

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

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

[root@36 ~]# ifconfig eth0:0 10.1.1.37 netmask 255.255.255.0
[root@36 ~]# ifconfig eth0:1 10.1.1.38 netmask 255.255.255.0

[root@36 ~]# /etc/init.d/httpd restart

验证:
http://10.1.1.36/
http://10.1.1.37/
http://10.1.1.38/


缺点很明显:浪费IP地址资源

 


例十二:基于端口的虚拟主机

Listen 80
Listen 8000
Listen 8080

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

/etc/init.d/httpd restart

验证:
http://10.1.1.36/
http://10.1.1.36:8000/
http://10.1.1.36:8080/


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

 

例十三:基于域名的虚拟主机


--需要DNS的cname记录的支持

aaa.web.com
bbb.web.com
ccc.web.com


--以下架构是DNS服务器和apache服务器的IP在同一台机器10.1.1.36上,也可以考虑分成两台服务器来做

[root@36 ~]# yum install bind*  -y


[root@36 ~]# vim /var/named/chroot/etc/named.conf

options {
        directory "/var/named";
};

zone "web.com"  IN {
        type master;
        file "data/master.web.com.zone";
};
 
[root@36 ~]# vim /var/named/chroot/var/named/data/master.web.com.zone
$TTL 86400
@       IN      SOA     sdfasdfsa.   sfddsafas. (
                        2011032601
                        120
                        240
                        360
                        86400 )
        IN      NS      sdfsafasfddfsa.web.com.
aaa     IN      A       10.1.1.36 --这里为apache服务器的IP
bbb     IN      CNAME   aaa
ccc     IN      CNAME   aaa

[root@36 ~]# /etc/init.d/named restart

 


[root@36 ~]# 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>


[root@36 ~]# /etc/init.d/httpd restart

 

--以下是客户端的验证
[root@li data]# vim /etc/resolv.conf
nameserver  10.1.1.36  --DNS指向DNS服务器的IP


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

 

思考:
1。上面三个域名,那么我直接用IP是能否访问,访问的是哪一个?为什么?

 答案:哪个虚拟主机在最前面,直接使用IP访问的就是哪一个

2。配置了虚拟主机后,那么我原来的DocumentRoot里指的原网站家目录是否还可用?
   如果不可用,如何解决?

 答案:不能用。
  除非再为原家目录再建立一个虚拟主机
  
3,有时间报forbidden的错误,并不一定是权限的问题。
 还有一种可能是,你访问的这个目录没有做列表形式,也没有主页,也会报dorbidden的

 

 

===================================================

 

第三方模块   实现apache限速


/share/soft/lamp/apache_source/mod-cband-0.9.7.2.tgz
/share/soft/lamp/apache_source/mod_cband.pdf --官方PDF文档

 

解压并CD进去进行编译
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

 

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


针对虚拟主机new.cluster.com进行限速

NameVirtualHost *:80
<VirtualHost *:80>
    DocumentRoot /www/aaa
    ServerName news.cluster.com
    ErrorLog logs/aaa.com-error_log
    CustomLog logs/aaa.com-access_log common

    cbandlimit 100M --指网站允许的总的下载流量
    cbandperiod 1W --清空时间
    cbandspeed 1024 10 30 --当前总带宽,每秒可以同时连接10个,最大的总连接数
    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   --使用wget下载,发现被限速了

使用下面的URL地址访问状态信息页面
http://news.cluster.com/cband-status
http://news.cluster.com/cband-status-me

 

==========================================================

网站的日志切割


www.cronolog.org


软件包位置:
ls /share/soft/soft/log/
cronolog-1.6.2.tar.gz  cronolog.pdf  cronosplit.pdf

解压到任意目录,我这里是/usr/local
[root@station156 log]# tar xvf cronolog-1.6.2.tar.gz -C /usr/local/

[root@station156 log]# cd /usr/local/


[root@station156 local]# cd /usr/local/cronolog-1.6.2/

编译安装
[root@station156 cronolog]# ./configure ;make ;make install

1,先注释掉虚拟主机,虚拟主机需要每个都配,为了方便,这里注意掉,使用原来的web服务器配置

vim /etc/httpd/conf/httpd.conf

修改:
CustomLog logs/access_log combined
改成:
CustomLog "|/usr/local/sbin/cronolog /opt/%Y/%m/%d/access_log" combined
--注意格式不要写错


重启apache后,过几秒,或者访问一下apache

就会在/opt下产生了

 


关于日志合并

 因为有些日志分析软件,它是只分析access.log;当要分析多个网站的access.log的总流量,就需要把它们的access.log合并一起,再由分析软件去分析这个合并的log文件


# sort -m -k 4 -o  newaccess.log access_log access_log1

 

1。编译安装一下源码版的httpd,然后比较一下和RPM版的区别
[root@dns share]# ls /share/soft/apache_source/httpd-2.2.9.tar.gz
/share/soft/apache_source/httpd-2.2.9.tar.gz


[root@dns httpd-2.2.9]# ./configure --prefix=/usr/local/apache2  --enable-so --enable-rewrite  --enable-modules=all --enable-file-cache --enable-cache --enable-disk-cache --enable-mem-cache  --enable-ssl

[root@dns httpd-2.2.9]# make ;make install

 

2.
安装mod_dosevaseive  插件防DDOS   
 distributed  deny of service

 

软件包在下面
/share/soft/lamp/apache_source/mod_dosevasive.1.8.tar.gz

安装方法,和使用方法都在解压后的readme文件里,尝试做一下

 

验证方法:因为DDos***就是同一个IP大量去连接web服务器,所以把参数改小点,然后手动去刷新访问web服务器,如果超过参数定义的次数,就会报拒绝就表示防护起作用了

 


[root@li ~]# /usr/sbin/apxs -i -a -c /usr/src/mod_dosevasive-1.8/mod_dosevasive20.c


# vim /etc/httpd/conf/httpd.conf
 --编译完后,可以在apache的配置文件里找到下面这一句

 LoadModule dosevasive20_module modules/mod_dosevasive20.so

# vim /etc/httpd/conf/httpd.conf
 --在配置文件加上下面一段

<IfModule mod_dosevasive20.c> --注意是有20的那段,表示的是apache2.x版本
    DOSHashTableSize    3097
    DOSPageCount        2 --在DOSPageInterval时间内一个客户端对同一个页面刷新两次,就认为是***
    DOSSiteCount        50 --在DOSSiteInterval时间内一个客户端访问站点50次,就认为是***
    DOSPageInterval     1
    DOSSiteInterval     1
    DOSBlockingPeriod   10 --锁定时间
</IfModule>

 

/etc/init.d/httpd restart

重启后,使用F5键,对同一个页面进行刷新测试