Web网站服务
Web网站服务(一)
1. Apache网站服务基础
本节将介绍“Apache HTTP Server”的特点及其编译安装过程。
1.1 Apache简介
”Apache HTTP Server”是开源软件项目的杰出代表,基于标准的HTTP网络协议提供网页浏览服务,在Web服务器领域中长期保持着超过半数的份额。Apache服务器可以运行在Linux,UNIX、Windows等多种操作系统平台中。
1. Apache的起源
Apache服务器是针对之前出现的若干个Web服务器程序进行整合,完善后形成的软件,其名称来源于“A Patchy Server”,意思是基于原有Web服务程序的代码进行修改(补丁)后形成的服务器程序。
在1995年时发布了Apache服务程序的1.0版本,之后一直由“Apache Group"负责该项目的管理和维护;直到1999年在”Apache Group"的基础上成立了Apache软件基金会 (Apache Software Foundation, ASF) 到目前为止Apache项目一直由ASF组织负责管理和维护。
ASF是非盈利性质的组织,最初只负责“Apache Web”服务器项目的管理,随着Web应用需求的不断扩大,ASF逐渐增加了许多与Web技术相关的开源软件项目,因此Apache现在不仅仅代表着Web服务器,更广泛地代表着ASF管理的众多开源软件项目。ASF基金会的官方网站位于http://www.apache.org/。"Apache HTTP Server"是ASF旗下最著名的软件项目之一,其正式名称是httpd,也就是历史上的Apache网站服务器。
2.Apache的主要特点
Apache服务器在功能,性能和安全性等方面的表现都是比较突出的,可以较好地满足Web服务器用户的应用需求。其主要特点包括以下个方面。
➣ 开放源代码:这是Apache服务器的重要特性之一,也是其他特性的基础。Apache 服务程序由全世界的众多开发者共同维护,并且任何人都可以自由使用,这充分体现了开源软件的精神。
➣ 跨平台应用:这个特性得益于Apache的源代码开放。Apache服务器可以运行在绝大多数软硬件平台上,所有UNIX操作系统都可以运行Apache,甚至Apacne服务器可以良好地运行在大多数Windows系统平台中。Apache的跨平台特性使其具有被广泛应用的条件。
➣ 支持各种网页编程语言:可支持的网页编程语言包括PERL、PHP、Python,Java等,甚至微软的ASP技术也可以在Apacne服务器中使用。支持各种常用的Web编程语言,使Apache具有更广泛的应用领域。
➣ 模块化设计:Apache并没有将所有的功能都集中在单一的服务程序内部,而是尽可能地通过标准的模块实现专有的功能,这为Apache服务器带来了良好的扩展性。其他软件开发商可以编写标准的模块程序,来添加Apache本身并不具有的其他功能。
➣ 运行非常稳定:Apache服务器可用于构建具有大负载访问量的Web站点,很多著名的企业网站都使用Apache作为Web服务软件。
➣ 良好的安全性:Apache服务器具有相对较好的安全性,这是开源软件共同具有的特性。并且Apache的维护团队会及时对已发现的漏洞提供修补程序,为Apache的所有使用者提供尽可能安全的服务器程序。
3. Apache的主要版本
Apache服务器目前包括1.X和2.X两个版本的分支,并且对其分别进行维护,两个版本具有一定的差异,也具有各自的特性。
➣ 1.X系列的最高版本是1.3,该版本分支继承了Apache服务器1.0版以来的优秀特性和配置管理风格,具有非常好的兼容性,稳定性。虽然Apache已经有了2.X版本,但目前仍然有大量的网站服务器在运行Apache1.X。
➣ 2.X系列中,目前的最新稳定版是2.2.17。从2.0版开始,加入了许多新的功能,使用的配置语法和管理风格也有所改变。对于新构建的网站服务器使用2.X版本是一个不错的选择。
1.2安装httpd服务器
在配置Apache网站服务之前需要正确安装好httpd服务器软件。httpd的安装可以选用RPM安装,源码编译安装这两种方式,前者相对比较简单,快速但是在功能上存在一定的局限性,在实际的生产环境中,使用源码编译安装的方式要更加普遍。
本小节将以下载的源码包 httpd-2. 2. 17. tar. gz 为例 (从网站http ://httrd. apache. org中可以获取最新版本) 讲解httpd服务的定制安装过程。
1.准备工作
为了避免发生端口冲突、程序冲突等现象,建议将使用RPM方式安装的httpd及相关依赖包(如果有的话)卸载。例如,根据实际安装情况可卸载httpd,httpd-manual、system-config-httpd、php、mysql.、dovecot 等。
[root@sky ~] # yum -y install httpd <==推荐使用yum方式安装 |
[root@www ~]
# rpm -e httpd httpd-manual webalizer subversion mod_python mod_ssl mod_perl system-config-httpd php php-cli php-ldap php-common mysql dovecot --nodeps
2.源码编译及安装
1)解包
将下载获得的httpd源码包解压并释放到/usr/src/目录下,且切换到展开后的源码目录中。
[root@sky home] # tar zxf httpd-2.2.17.tar.gz -C /usr/src/ [root@sky home] # cd /usr/src/httpd-2.2.17/ |
2)配置
根据服务器的实际应用需要,可以灵活设置不同的定制选项,如指定安装路径,启用字符集支持等。若要获知可用的各种配置选项及其含义,可以执行”./configure --help“命令。
[root@sky httpd-2.2.17]
# yum -y install gcc c++
[root@sky httpd-2.2.17]
# ./configure --prefix=/usr/local/httpd --enable-so --enable-rewrite --enable-charset-lite --enable-cgi
上述配置命令中,各选项的含义如下。
➣ --prefix:指定将httpd服务程序安装到哪个目录,如/usr/local/httpd。
➣ --enable-so:启动动态加载模块支持,使httpd具备进一步扩展功能的能力。
➣ --enable-rewrite:启用网页地址重写功能,用于网站优化及目录迁移维护。
➣ --enable-charset-lite:启动字符集支持,以便支持使用各种字符集编码的网页。
➣ --enable-cgi:启用CGI脚本程序支持,便于扩展网站的应用访问能力。
3)编译及安装
完成配置以后,执行“make”进行编译,将源代码转换为可执行的程序;然后执行“make install”完成最后的安装过程;将编译完的httpd程序及相关目录,文件复制到预设的安装目录(由配置时的”--prefix“选项指定)。其中make的过程可能会需要较长的时间。
[root@sky httpd-2.2.17] # make [root@sky httpd-2.2.17] # make install |
3.确认安装结果
由于指定了安装目录为/usr/local/httpd/,因此httpd服务的各种程序,模块,帮助文件等都将复制到此目录下。
[root@sky ~] # ls /usr/local/httpd/ bin build cgi -bin conf error htdocs icons include lib logs man manual modules |
在安装后的/usr/local/httpd/目录中,主要子目录的用途如下所述。
➣ /usr/local/httpd/bin/:存放httpd服务的各种执行程序文件,包括主程序httpd,服务控制工具apachectl等。
➣ /usr/local/httpd/conf/:存放httpd服务的各种配置文件,包括主配置文件httpd.conf、增强配置子目录extra/等。
➣ /usr/local/httpd/htdocs/:存放网页文档,包括默认首页文件index.html等。
➣ /usr/local/httpd/logs/:存放httpd服务的日志文件。
➣ /usr/local/httpd/modules/:行放httpd服务的各种模块文件。
➣ /usr/local/httpd/cgi-bin/,存放各种CGI程序文件。
4. 优化执行路径
通过源码编译安装的httpd服务,程序路径并不在默认的搜索路径中,为了使该服务在使用时更加方便,可以为相关程序添加符号链接。
[root@sky ~] # ln -s /usr/local/httpd/bin/* /usr/local/bin/ [root@sky ~] # ls -l /usr/local/bin/httpd /usr/local/bin/apachectl lrwxrwxrwx. 1 root root 30 5月 18 15:56 /usr/local/bin/apachectl -> /usr/local/httpd/bin/apachectl lrwxrwxrwx. 1 root root 26 5月 18 15:56 /usr/local/bin/httpd -> /usr/local/httpd/bin/httpd |
这样再执行相关命令时就不用输入冗长的路径了。例如,当执行”httpd -v"(用于查看程序版本)时,即相当于执行“/usr/local/httpd/bin/hthttpd -v"。
[root@sky ~] # httpd -v Server version: Apache/2.2.17 (Unix) Server built: May 18 2015 15:49:53 |
5.添加httpd系统服务
若希望将httpd添加为系统服务以便通过chkconfig进行管理,需要建立可控的服务脚本。例如,可将apachectl脚本复制为/etc/init.d/httpd,并在文件开头添加chkconfig识别配置,然后再将其添加为标准的Linux系统服务。
[root@sky ~] # cp /usr/local/httpd/bin/apachectl /etc/init.d/httpd [root@sky ~] # vim /etc/init.d/httpd #!/bin/bash # chkconfig: 35 85 15 <==服务识别参数,级别3、5中启动;启动和关闭的顺序分别为85、15 # description: Startup script for the Apache HTTP Server <==服务描述信息 [root@sky httpd-2.2.17] # chkconfig --add httpd <==将httpd添加为系统服务
[root@sky httpd-2.2.17] # chkconfig --list httpd <==查看httpd服务的自启动状态 httpd 0:关闭 1:关闭 2:关闭 3:启用 4:关闭 5:启用 6:关闭 |
成功执行上述操作以后,每次Linux系统进入运行级别3,5时,httpd服务将台自动运行。在日常维护过程中,可以直接使用apachectl工具来控制httpd服务,也可以体用/etc/init.d/httpd脚本。例如当执行“/etc/init.d/httpd start”命令时等同于执行”/usr/local/httpd/bin/apachectl start”命令,都用来启动httpd服务器程序。
2 httpd 服务器的基本配置
熟悉了httpd的安装过程及主要目录结构以后,木节将进一步学习使用httpd服务来架设Web站点的基本过程及常见配置。
2.1 Web站点的部署过程
在RHEL5系统中使用httpd服务部署Weo站点的基本过程的分析如下所述。
1.确定网站名称、IP地址
若要向Internet中发布一个Web站点,需要申请一个合法的互联网IP地址,并向DNS服务提供商注册一个完整的网站名称。在企业内部网络中,这些信息可以自行设置。例如Web主机的IP地址为192.168.1.10,网站名称为www.sky.com。
当然,若要在客户机的浏览器中通过“www.sky.com"的地址来访问此Web站点,还应该有可用的DNS域名服务,例如客户机所使用的DNS服务器应能够将www.sky.com解析为IP地址192.168.1.10。
在Web服务器本机中,将IP地址设置为192.168.1.10,将主机名称设置为www.sky.com;并修改/ete/hosts文件,添加相应的映射记录以提高本地解析速度。
2.配置并启动httpd服务
1)配置httpd服务
编辑httpd服务的主配置文件httpd.conf,查找配置项“ServerName”,在附近添加一行内容“service name www.sky.com 用于设置网站名称。关于httpd.conf文件中的更多配置项,将在2.2小节中详细讲解。
[root@sky ~]
# vim /usr/local/httpd/conf/httpd.conf
ServerName www.sky.com
修改httpd.conf文件的配置内容以后,建议使用带-t""选项的apachectl引命令对配置内容进行语法检查(或使用"httpd -t”命令).如果没有语法错误,将会显示”Syntax OK“的信息,否则需要根据错误提示来修正配置。
[root@sky ~] # /usr/local/httpd/bin/apachectl -t Syntax OK |
2)自动httpd服务
使用脚本文件/usr/local/httpd/bin/apachectl或者/etc/init.d/httpd,分别通过start,stop,restart选项进行控制,可用来启动,终止,重启httpd服务。正常启动httpd 服务以后,默认将监听TCP协议的80端口。
[root@sky ~] # /etc/init.d/httpd start (98)Address already in use: make_sock: could not bind to address [::]:80 (98)Address already in use: make_sock: could not bind to address 0.0.0.0:80 no listening sockets available, shutting down Unable to open logs 如果报以上错误说明80端口正在被占用,使用”netstat -nlp |grep :80“命令查看到时httpd占用的,使用以下命令结束掉占用程序:
[root@sky ~] # pgrep httpd | xargs kill |
[root@sky ~] # netstat -nlp |grep :80 tcp 0 0 :::80 :::* LISTEN 91625/httpd |
3.部署网页文档
对于新编译安装的httpd服务,网站根目录位于/usr/local/httpd/htdocs/中,需要将Web站点的网页文档复制或上传到此目录中。httpd服务器默认已提供了一个名为index.html的测试网页(可显示字串”It works!“),作为访问网站时的默认首页。
[root@sky ~] # cat /usr/local/httpd/htdocs/index.html <html><body><h1>It works!</h1></body></html> |
[root@sky ~] # iptables -A INPUT -p tcp --dport 53 -j ACCEPT <==开放Web的80号端口 |
4.在客户机中访问Web站点
在客户机的网页浏览器中,通过域名或IP地址访问httpd服务器,将可以看到Web站点的页面内容。若使用的是httpd服务默认的首页,则页面会显示“I tworks!”如图所示,表示httpd服务已经正常运作。
![](https://images0.cnblogs.com/blog/747908/201505/270913589847050.jpg)
5. 查看Web站点访问情况
httpd服务器使用了两种类型的日志,访问日志和错误日志,这两种日志的文件名分别为access_log和error_log,均位于/usr/local/httpd/logs/目录下。
通过查看访问日志文件access_log,可以及时了解Web站点的访问情况。访问日志中的每二行对应一条访问记录,记录了客户机的IP地址、访问服务器的日期和时间、请求的网页对象等信息。例如当从客户机192168.1.200访问Web站点以后,访问日志将会记录“192.1681.200.110的消息。
[root@sky ~] # tail /usr/local/httpd/logs/access_log 192.168.1.200 - - [18/May/2015:16:54:40 +0800] "GET / HTTP/1.1" 200 44 192.168.1.200 - - [18/May/2015:16:52:05 +0800] "GET /favicon.ico HTTP/1.1" 404 209 |
通过查看错误日志文件error_log,可以为排查服务器运行故障提供参考依据。错误日志文件中的每一行对应一条错误记录,记录了发生错误的日期和时间错误事件类型,错误事件的内容描述等信息。例如,当浏览器请求的网站图标favicon,ico不存在时,将会记录”......File does not exist:......favicon.ico"的消息。
[root@sky ~] # tail /usr/local/httpd/logs/error_log [Mon May 18 16:50:04 2015] [error] [client 192.168.1.200] File does not exist: /usr/local/httpd/htdocs/favicon.ico [Mon May 18 16:50:04 2015] [error] [client 192.168.1.200] File does not exist: /usr/local/httpd/htdocs/favicon.ico |
上述过程是使用httpd服务器部署并验证Web站点的基本步骤,其中涉及到httpd.conf 配置文件的改动量非常少. 要搭建一台简单的 web 服务器还是十分容易的。
2. 2 httpd.conf配置文件
若要对Web站点进行更加具体,更加强大的配置,仅仅学会添加"ServerName"配置项显然是远远不够的,还需要进一步熟悉httpd.conf配置文件,了解其他各种常见的配置项。
主配置文件httpd.conf由注释行,设置行两部分内容组成。与大多数Linux配置文件一样,注释性的文字以"#”开始,包含了对相关配置的内容进行说明和解释。除了注释行和空行以外的内容即为设置行,构成了Web服务的有效配置。根据配置所作用的范围不同,设置行又可分为全局配置,区域配置。
1.全局配置项
全局配置决定着httpd服务器的全局运行参数,使用“关键字 值”的配置格式。例如配置网站名称时使用的“ServerName www.sky.com"其中Server Name为配置关键字,而www.sky.com为对应的值。
每一条全局配置都是一项独立的配置,不需要包含存其他任务区域中。以下列出了fttpd.conf文件中最常用的一些全局配置项。
ServerRoot "/usr/local/httpd"
Listen 80
User daemon
Group daemon
ServerAdmin webmaster@benet.com
ServerName www.benet.com
DocumentRoot "/usr/local/httpd/htdocs"
DirectoryIndex index.html index.php
ErrorLog logs/error_log
LogLevel warn
CustomLog logs/access_log common
PidFile logs/httpd.pid
CharsetDefault UTF-8
Include conf/extra/httpd-default.conf
上述设置行中,各全局配置项的含义如下所述:
➣ ServerRoot:设置httpd服务器的根目录,该目录中包括了运行Web站点必需的子目录和文件。默认的根目录为yusr/local/httpd,与httpd的安装目录相同。在httpd.conf配置文件中,如果指定目录或文件位置时不使用绝对路径,则该目录或文件位置都认为是在服务器的根目录下面。
➣ Listen:设置httpd服务器监听的网络端口号,默认为80。
➣ User:设置运行httpd进程时的用户身份,默认为daemon。
➣ Group:设置运行httpd进程时的组身份,默认为daemon。
➣ ServerAdmin:设置服务器的管理员E-mail地址,可以通过此E-mail地址及时联系Web站点的管理员。
➣ ServerName:设置Web站点的完整主机名(即:主机名+域名)
➣ DocumentRoot:设置网站根目录,即网页文档在系统中的实际存放路径。此配置项比较容易和ServerRoot混淆,需要格外注意。
➣ Directorylndex:设置网站的默认索引页(首页),可以设置多个首页文件,以空格分开,默认的首页文件为index.html。
➣ ErrorLog:设置错误日志文件的路径,默认路径为logs/erro_log。
➣ LogLevel:设置记录日志的级别,默认级别为Warn(警告) 。
➣ CustomLog:设置访问日志文件的路径,日志类型,默认路径为logs/access_log,使用的类型为common通用格式。
➣ PidFile:设置用于保存httpd进程号(PID)的文件,默认保存地址为logs/httpd.pid,logs目录位于Apache的服务器根目录中。
➣ CharsetDefault:设置站点中的网页默认使用的字符集编码如UTF-8,gb2312等。
➣ Include:包含另一个配置文件的内容,可以将实现一些特殊功能的配置放到一个单独的文件里,再使用Include配置项将其包含到httpd.conf文件中,这样便于独立进行配置功能的维护而不影响主配置文件。
以上配置项是httpd.conf文件中最主要的全局配置项。还有很多其他的配置项,在此不一一列举,如果需要使用可以査看Apache服务器中的相关帮助手册文档。
2.区域配置项
除了全局配置项以外,httpd.corf文件中的大多数配置都是包括在区域中的。区域配置使用一对组合标记,限定了配置项的作用范围。例如,最常见的目录区域配置的形式如下所示。
<Directory /> <==定义“/”目录区域的开始
Options FollowSymLinks <==控制选项,允许使用符号链接
AllowOverride None <==不允许隐含控制文件中的覆盖配置
Order deny,allow <==访问控制策略的应用顺序
Deny from all <==禁止任何人防问此区域
</Directory> <==定义“/”目录区域的结束
在以上区域定义中,设置l了一个根目录的区域配置,其中添加的访问控制相关配置只对根目录有效,而不会作用于全局或其他目录区域。
3. 网站访问情况统计
在httpd服务器的访问日志文件access_log中,记录了大量的客户机访问信息通过分析这些信息,可以及时了解Web站点的访问情况,如每天或特定时间段的访问IP 数,点击量最大的页面等。
本节将学习如何安装AWStats日志分析系统以完成自动化的日志分析与统计工作。
3.1部署AWStats分析系统
AWStats是使用Perl语言开发的一款开源日志分析工具,它不仅可用来分析Apache 网站服务器的访问日志,也可以用来分析Samba、Vsftpd,IIS等服务的日志信息。结合crond等计划任务服务,可以对不断增长的日志内容定期进行分析。
AWStats的软件包可以从http://awstats.sourceforg.net网站中下载,目前最新的稳定版本为7.0。下面以下载的awstats-7.0.zip软件包为例,介绍为Web站点www.sky.com添加日志分析系统的过程。
1.安装awstats软件包
awstats软件包的安装非常简单,只需将软件包解压后部署到httpd服务器中的/usr/local/目录下即可。由于是"zip”格式的压缩包,应对其使用unzip命令进行解压缩。
[root@sky home] # unzip awstats-7.0.zip [root@sky home] # mv awstats-7.0 /usr/local/awstats |
2.为要统计的站点建立配置文件
使用AWStats系统时,该系统支持分别统计多个网站的日志文件,通常以网站名称来区分不同的站点。因此,在执行日志文件分析之前,需要为每个Web站点建立站点统计配置文件,借助于AWStats程序提供的awstats_configure.pl脚本可以简化创建过程。
首先切换到awstats/tools目录下,并执行其中的awstats_configure.pl脚本。
[root@sky home] # cd /usr/local/awstats/tools/ [root@sky tools] # ./awstats_configure.pl |
之后将会进入一个交互式的配置过程,将会检查awstats的安装目录,如httpd服务的配置文件路径,日志记录格式等系统环境,并提示用户指定站点名称,设置配置文件路径。
1)指定httpd主配置文件的路径
配置脚本将查找并识别httpd服务的主配置文件,以便自动添加相关配置内容。如果未能在常见的安装路径中找到相关配置内容,则用户需要根据提示进行手工指定。
----- AWStats awstats_configure 1.0 (build 1.9) (c) Laurent Destailleur ----- This tool will help you to configure AWStats to analyze statistics for one web server. You can try to use it to let it do all that is possible in AWStats setup, however following the step by step manual setup documentation (docs/index.html) is often a better idea. Above all if: - You are not an administrator user, - You want to analyze downloaded log files without web server, - You want to analyze mail or ftp log files instead of web log files, - You need to analyze load balanced servers log files, - You want to 'understand' all possible ways to use AWStats... Read the AWStats documentation (docs/index.html). -----> Running OS detected: Linux, BSD or Unix -----> Check for web server install Enter full config file path of your Web server. Example: /etc/httpd/httpd.conf Example: /usr/local/apache2/conf/httpd.conf Example: c:\Program files\apache group \apache\conf\httpd.conf Config file path ( 'none' to skip web server setup): > /usr/local/httpd/conf/httpd.conf <==输入httpd.conf配置文件路径 |
2)设置日志类型
将httpd服务器的日志记录格式改为“combined“,服务器可以在日志文件中记录更加详细的Web访问信息。因此,当提示是否修改日志类型时,建议选择”y”。然后配置脚本将会自动修改httpd.conf配置文件,以添加访问AWStats系统的相关配置内容。
-----> Check and complete web server config file
'/usr/local/httpd/conf/httpd.conf'
Warning: You Apache config file contains directives to
write
'common'
log files
This means that some features can't work (os, browsers and keywords detection).
Do you want me to setup Apache to
write
'combined'
log files [y/N] ? y <==输入"y"确认
Add
'Alias /awstatsclasses "/usr/local/awstats/wwwroot/classes/"'
Add
'Alias /awstatscss "/usr/local/awstats/wwwroot/css/"'
Add
'Alias /awstatsicons "/usr/local/awstats/wwwroot/icon/"'
Add
'ScriptAlias /awstats/ "/usr/local/awstats/wwwroot/cgi-bin/"'
Add
'<Directory>'
directive
AWStats directives added to Apache config file.
-----> Update model config file
'/usr/local/awstats/wwwroot/cgi-bin/awstats.model.conf'
File awstats.model.conf updated.
3)为指定Web站点创建配置文件
根据提示继续选择“y”以创建站点配置文件,并指定要统计的目标网站名称,站点配置文件的存放位置(默认为etc/awstats/)。
-----> Need to create a new config file ? Do you want me to build a new AWStats config/profile file (required if first install) [y/N] ? y <==确认创建新站点配置文件 -----> Define config file name to create What is the name of your web site or profile analysis ? Example: www.mysite.com Example: demo Your web site, virtual server or profile name: > www.sky.com <==指定要统计的目标网站名称 -----> Define config file path In which directory do you plan to store your config file(s) ? Default: /etc/awstats Directory path to store config file(s) (Enter for default): > <==直接按Enter件接受默认设置 -----> Create config file '/etc/awstats/awstats.www.sky.com.conf' Config file /etc/awstats/awstats.www.sky.com.conf created. |
4)后续配置工作
接下来将会自动重启httpd服务(需要有/etc/init.d/httpd脚本支持) ,然后设置cron计划任务(7.0版尚不支持),先后按两次Enter键退出配置工具。
-----> Restart Web server with '/sbin/service httpd restart' -----> Add update process inside a scheduler Sorry, configure.pl does not support automatic add to cron yet. You can do it manually by adding the following command to your cron: /usr/local/awstats/wwwroot/cgi -bin /awstats.pl -update -config =www.sky.com Or if you have several config files and prefer having only one command: /usr/local/awstats/tools/awstats_updateall.pl now Press ENTER to continue... <==按Enter继续 A SIMPLE config file has been created: /etc/awstats/awstats.www.sky.com.conf You should have a look inside to check and change manually main parameters. You can then manually update your statistics for 'www.sky.com' with command: > perl awstats.pl -update -config =www.sky.com You can also read your statistics for 'www.sky.com' with URL: > http://localhost/awstats/awstats.pl ? config=www.sky.com Press ENTER to finish... <==按Enter完成配置过程 |
根据上述设置过程,为网站www.sky.com新建立的站点统计配置文件将存放到/etc/awstats/目录下,文件名称为awstatswww.benet.com.conf。若还需要统计其他Web站点的日志,可以执行awstats_configure.pl 脚本再创建新的配置文件。
3.修改站点统计配置文件
为站点www.sky.com建立好配置文件以后,还需要对其作进一步的修改。修改的内容主要包括指定要分析的Web日志文件和指定用来存放统计数据的目录。
[root@sky ~] # vim /etc/awstats/awstats.www.sky.com.conf LogFile= "/usr/local/httpd/logs/access_log" DirData= "/var/lib/awstats" [root@sky ~] # mkdir /var/lib/awstats |
其中Logfile用来指定日志路径,应设置Web日志文件的实际位置;DirData用来指定数据目录,可以采用默认值,但需要创建指定的目录(/var/lib/awstats) 。
4.执行日志分析,并设置eron计划任务
使用AWStats提供的awstats_updateall.pl脚本,可以更新所有站点(根据站点配置文件)的日志统计数据。执行该脚本时,将会自动分析新增的日志内容,并将分析结果更新到统计数据库中。
[root@sky ~] # /usr/local/awstats/tools/awstats_updateall.pl now Running '"/usr/local/awstats/wwwroot/cgi-bin/awstats.pl" -update -config=www.sky.com -configdir="/etc/awstats"' to update config www.sky.com Create/Update database for config "/etc/awstats/awstats.www.sky.com.conf" by AWStats version 7.0 (build 1.971) From data in log file "/usr/local/httpd/logs/access_log" ... Phase 1 : First bypass old records, searching new record... Searching new records from beginning of log file... Jumped lines in file: 0 Parsed lines in file: 20 Found 0 dropped records, Found 0 comments, Found 0 blank records, Found 20 corrupted records, Found 0 old records, Found 0 new qualified records. |
由于Web日志文件的内容是在不断更新的,为了及时反馈网站访问情况,日志分析工作也需要定期、自动地执行。通过crond服务可设置计划任务,一般建议每五分钟执行一次日志分析任务即可。
[root@sky ~] # crontab -e */5 * * * * /usr/local/awstats/tools/awstats_updateall.pl now [root@sky ~] # /etc/init.d/crond start [root@sky ~] # chkconfig --level 25 crond on |
3. 2 访问AWStats分析系统
访问网址 http://www.sky.com/awstats/awstats.pl?config=www.sky.com 后,可看到AWStats日志分析系统的统计页面,分别按访问时间、用户来源、所用浏览器等类别列出各种详细的网站访问情况,如图所示。在该页面中,拖动窗口右侧的滚动条即可查看整个分析报告内容;或者单击左侧导航栏中的链接,可以选择查看其中的部分内容。
![](https://images0.cnblogs.com/blog/747908/201505/270914006259052.png)
在“按参观时间”类别下,可以查看每小时、每天、每周、每月的网站访问人次、网页数、文件数等信息。例如,单击左侧的“按日期统计”导航链接,即可查看本月中每天的网页访问情况,如图所示。
![](https://images0.cnblogs.com/blog/747908/201505/270914018597295.png)
在”浏览器统计”类别下,可以查看用户的参观时间、所用的操作系统、浏览器版本、搜索本网站的关键词等相关信息。例如,单击该类别下的“浏览器”导航按钮,可以看到访问本Web站点的用户使用了哪些浏览器,如图所示。
![](https://images0.cnblogs.com/blog/747908/201505/270914022813124.png)
在访问AWStats系统时,需要指定awstats目录、脚本位置、统计目标等信息,这样一来既不便于记忆,输入时也比较麻烦。为了简化操作,可以在Web根目录下建立自动跳转的HTML网页。例如,执行以下操作后用户只要访问http://www.sky.com/awb.html即可自动跳转到www.sky.com站点的AWStats日志分析页面。
[root@sky ~] # vim /usr/local/httpd/htdocs/awb.html <html> <head> <meta http -equiv =refresh content= "0;url=http://www.sky.com/awstats/awstats.pl?config=www.sky.com" > </head> <body></body> </html> |
Web网站服务(二)
1 httpd 服务的访问控制
在上一章中,细心的人可能会发现,在访问AWStats日志分析系统时并不需要提供账号和密码,只要知道对应的网址就可以获知Web站点的访问情况,这给服务器的安全帯来了隐患。
为了更好地控制对网站资源的访问,可以为特定的网站目录添加访问授权。本节将分别讲解客户机地址限制,用户授权限制,这两种访问控制方式都应用于httpd.conf配置文件中的目录区域<Directory目录位置>......</Directory>范围内。
1.1 客户机地址限制
通过配置项Order、Deny、from、Allow from,可以根据客户机的主机名或IP地址来决定是否允许客户端访问。其中Order用于设置限制顺序,Deny from和Allow from用于设置具体限制内容。
使用Order配置项时,可以设置为”allow,deny“或“deny,allow”以绝对主机应用“允许“、”拒绝”策略的先后顺序。
➣ allow,deny:先允许后拒绝,默认拒绝所有未明确允许的客户机地址。
➣ deny,allow:先拒绝后允许,默认允许所有未明确拒绝的客户机地址。
使用Allow和Deny配置项时,需要设置客户机地址以构成完整的限制策略,地址的形式可以是IP地址,网络地址、主机名、域名,使用名称“all"时表示任意地址。限制策略的格式如下所示。
Deny from address1 addree2 ......
Allow from address1 address2 ......
通常情况下,网站服务器是对所有客户机开放的,网页文档目录并未做任何限制,因此使用的是”Allow from all"的策略,表示允许从任何客户机访问。
<Directory
"/usr/local/httpd/htdocs"
>
……
Order allow,deny
Allow from all
</Directory>
需要使用“仅允许”的限制策略时,应将处理顺序改为“allow,deny",并明确设置允许策略,只允许一部分主机访问。例如若只希望IP地址为192.168.1.100的网管工作机能够访问AWStats系统则针对AWStats系统的目录区域应做如下设置。
<Directory "/usr/local/awstats/wwwroot" > …… Order allow,deny Allow from 192.168.1.100 </Directory> |
反之,需要使用“仅拒绝”的限制策略时,应将处理顺序改为“deny,allow”明确设置拒绝策略,只禁止一部分主机访问。例如若只希望禁止来自两个内网网段192.168.0.0/24和192.168.1.0/24的主机访问,但允许其他任何主机访问,可以使用如下限制策略。
<Directory "/usr/local/awstats/wwwroot" > …… Order deny,allow deny from 192.168.0.0/24 192.168.1.0/24 </Directory> |
当从未被授权的客户机中访问网站目录时,将会被拒绝访问。在不同的浏览器中拒绝的消息可能会略有差异,倒如IE 8.0浏览器中会显示,网站拒绝显示此网页的报错页面,如图所示。
![](https://images0.cnblogs.com/blog/747908/201505/270914034227040.jpg)
1.2 用户授权限制
httpd 服务器支持使用摘要认证 (Digest) 和基本认证 (Basic) 两种方。使用摘要认证需要在编译httpd之前添加”--enable-auth-digest”选项,但并不是所有的浏览器都支持摘要认证;而基本认证是httpd服务的基本功能,不需要预先配置特别的选项。
基于用户的访问控制包含认证和授权两个过程,认证(Authentrcation)是指识别用户身份的过程,授权(Authorization)是允许特定用户访问特定目录区域的过程。下面将以基本认证方式为例,对AWStats日志分析系统添加用户授权限制。
1. 创建用户认证数据文件
httpd的基本认证通过校验用户名、密码组合来判断是否允许用户访问,授权访问的用户账号需要事先建立,并保存在固定的数据文件中。使用专门的htpasswd工具程序,可以创建授权用户数据文件,并维护其中的用户账号。
使用htpasswd工具时,必须指定用户数据文件的位置,添加”-c“选项表示新建立此文件。例如,执行以下操作可以新建数据文件/usr/local/httpd.conf/.awspwd,其中包含一个名为webadmin的用户信息。
[root@sky ~] # cd /usr/local/httpd/ [root@sky httpd] # bin/htpasswd -c /usr/local/httpd/conf/.awspwd webadmin New password: <==设置密码 Re -type new password: Adding password for user webadmin [root@sky httpd] # cat /usr/local/httpd/conf/.awspwd webadmin:Uw18RHNi4uREs |
若省略”-c"选项,则表示指定的用户数据文件已经存在,用于添加新的用户或修改现有用户的密码。例如需要向awspwd数据文件中添加一个新用户tsengyia时可以执行以下操作。
[root@sky httpd] # bin/htpasswd /usr/local/httpd/conf/.awspwd tsengyia New password: R e -type n ew password: Adding password for user tsengyia [root@sky httpd] # cat /usr/local/httpd/conf/.awspwd webadmin:Uw18RHNi4uREs tsengyia:N6eXYN.TfHZE2 |
2.添加用户授权配置
有了授权用户账号以后,还需要修改httpd.conf配置文件,在特定的目录区域中添加授权配置,以启用基本认证并设置允许哪些用户访问。例如,若只允许awspwd数据文件中的任一用户访问AWStats系统,可以执行以下操作。
[root@sky httpd] # vim /usr/local/httpd/conf/httpd.conf A uthName "AWStats Directory" AuthType Basic AuthUserFile /usr/local/httpd/conf/.awspwd require valid -user [root@sky httpd] # /usr/local/httpd/bin/apachectl restart <==重启服务使新配置生效 |
在上述配置内容中相关配置项的含义如下。
➣ AuthName:定义受保护的领域名称,该内容将在浏览器弹出的认证对话框中显示。
➣ AuthType:设置认证的类型,Basic表示基本认证。
➣ AuthuserFile:设置用于保存用户账号,密码的认证文件路径。
➣ require valid-user:要求只有认证文件中的合法用户才能访问。其中varici-user表示所有合法用户,若只授权给单个用户,可改为指定的用户名(如webadmin)。
3. 验证用户访问授权
当再次访问八WS1ats系统时,浏览器会首先弹出认证对话框如图6.2所SF。只有输入正确的用户名和密码后才能查看日志分析报告否则将拒绝访问,如图所示。
基本认证的登录界面:
![](https://images0.cnblogs.com/blog/747908/201505/270914043284184.png)
认证失畋时将拒绝访问:
![](https://images0.cnblogs.com/blog/747908/201505/270914049221299.png)
2 构建虚拟Web主机
虚拟Web主机指的是在同一台服务器中运行多个Web站点,其中的每一个站点实际上并不独立占用整个服务器,因此被称为“虚拟的Web主机”。通过虚拟Web主机服务可以充分利用服务器的硬件资源,从而大大降低网站构建及运行成本。
使用httpd可以非常方便地构建虚拟主机服务器,只需要运行一个httpd服务就能够同时支撑大量的Web站点。httpd支持的虚拟主机类型包括以下三种。
➣ 基于域名:对每个主机使用不同的域名,但是其对应的IP地址是相同的,例如,www.aaa.com和www.bbb.com站点的IP地址都是192.168.1.10。这是使用最为普遍的虚拟Web主机类型。
➣ 基于IP地址:为每个虚拟主机使用不同的域名,且各自对应的地址也不相同。这种方式需要为服务器配备多个网络接口,因此应用并不是非常广泛。
➣ 基于端口:这种方式并不使用域名,IP地址来区分不同的站点内容,而是使用了不同的TCP端口号,因此用户在浏览不同的虚拟站点时需要同时指定端口号才能访问。
在上述几种虚拟四eb主机中,基于域名的虚拟主机是使用最为广泛的,也是本节讲解的重点内容。关于另外两种类型的虚拟主机,将只介绍其配置要点。另外,因不同类型的虚拟主机其区分机制各不相同建议不要同时使用,以免相互混淆。
2.1 基于域名的虚拟主机
本节以实现两个虚拟Web主机www.aaa.com和www.bbb.com为例,使用一台httpd服务器搭建,IP为192.168.1.10。具体构建过程讲解如下。
1. 为虚拟主机提供域名解析
首先需要向DNS服务提供商注册各虚拟Web站点的域名,以便当访问其中任何一个虚拟Web站点时,最终访问的都是同一个IP地址——实际支撑所有虚拟Web站点的服务器的地址。
在本小节的案倒中,需要将两个虚拟Web主机www.aaa.com和www.bbb.com解忻为同一个IP地址——192.168.1.10。而在实际的httpd服务器192.168.1.10中可以使用虚拟Web站点中的任何一个作为主机名称,例如www.aaa.com。
实验过程中可以自行搭建测试用的DNS服务器,主配置文件named.conf中需要添加aaa.com和bbb.com两个区域;各区域的地址数据库中均设置"www-->192.168.1.10”的A记录。确认客户机能够正确解忻到www.aaa.com和www.bbb.com的地址。例如若要在IP地址为192.168.1.10的服务器中构建BIND服务,关键配置内容参考如下。
[root@dns ~] # vim /etc/named.conf <==named服务主配置 ...... //省略部分内容 zone "aaa.com." IN { type master; file "aaa.com.zone" ; }; zone "bbb.com." IN { type master; file "bbb.com.zone" ; }; [root@ns1 ~] # vim /var/named/aaa.com.zone <===aaa.com区域配置 ...... //省略部分内容 @ IN NS dns.aaa.com. dns IN A 192.168.1.10 www IN A 192.168.1.100 [root@ns1 ~] # vim /var/named/bbb.com.zone <==bbb.com区域配置 ...... //省略部分内容 @ IN NS dns.bbb.com. www IN A 192.168.1.100 |
2. 为虚拟主机准备网页文档
为每个虚拟Web主机准备网站目录及网页文档,为了测试方便,分别为每个虚拟Web主机提供包含不同内容的首页文件。例如在/var/www/html/目录中创建两个子文件aaacom、bbbcom分别作为www.aaa.com和www.bbb.com的网站根目录,并分别编写测试网页文件。
[root@sky ~] # mkdir /var/www/html/aaacom [root@sky ~] # mkdir /var/www/html/bbbcom [root@sky ~] # echo "<h1>www.aaa.com</h1>" > /var/www/html/aaacom/index.html [root@sky ~] # echo "<h1>www.bbb.com</h1>" > /var/www/html/bbbcom/index.html |
3.添加虚拟主机配置
在httpd服务器的主配置文件中,若要启用基于域名的虚拟Web主机,通常需要配置以下几个方面的内容。
➣ 监听地址:使用NameVirtualHost配置项指定提供虚拟主机服务的IP地址,也就是进行域名查询时各虚拟Web主机的IP地址,如192.168.1.10
➣ 虚拟主机区域:使用“<VirtualHost 监听地址> ...... </VirtualHost>"区域配置,为每一个虚拟Web主机建立独立的配置内容。其中至少应包括虚拟主机的网站名称。网页根目录的配置项;其他如管理邮箱、访问日志等更多配置项可根据实际需要添加。
➣ 目录权限:使用”<Directory 目录位置>......</Directory>“区域配置,为每一个虚拟Web主机的网站目录设置访问权限,如允许任何人访问。目录访问可以继承其父目录的授权许可,因此可以采取直接为父文件夹授权访问权限的方法来简化配置。
当虚拟Web主机的数量较多时,建议使用独立的虚拟主机配置文件,然后在httpd.conf 文件中通过 include 加载这些配置。这样可以将对 httpd. conf文件的改动减至最少,更方便配置内容的维护。
[root@sky ~] # vim /usr/local/httpd/conf/extra/httpd-vhosts.conf <==创建独立的配置文件 <Directory "/var/www/html" > <==设置目录的访问权限 Order allow,deny Allow from all </Directory> NameVirtualHost 192.168.1.10 <==设置虚拟主机监听地址 <VirtualHost 192.168.1.10> <==设置aaa虚拟站点区域 DocumentRoot /var/www/html/aaacom ServerName www.aaa.com ErrorLog logs/www.aaa.com.error_log CustomLog logs/www.aaa.com.access_log common </VirtualHost> <VirtualHost 192.168.1.10> <==设置bbb虚拟站点区域 DocumentRoot /var/www/html/bbbcom ServerName www.bbb.com ErrorLog logs/www.bbb.com.error_log CustomLog logs/www.bbb.com.access_log common </VirtualHost> [root@www ~] # vi /usr/local/httpd/conf/httpd.conf …… //省略部分内容 Include conf/extra/httpd -vhosts . conf <==加载独立的配置文件 |
[root@sky ~]
# /usr/local/httpd/bin/apachectl restart <==重启服务使新配置生效
Warning:
DocumentRoot [/usr/local/httpd/docs/dummy
-host
.example.com] does not exist
Warning:
DocumentRoot [/usr/local/httpd/docs/dummy-host2.example.com] does not exist
如果报以上错误,解决方法如下:
[root@sky ~] # mkdir -p /usr/local/httpd/docs/dummy-host.example.com [root@sky ~] # mkdir -p /usr/local/httpd/docs/dummy-host2.example.com |
4. 在客户机中访问虚拟Web主机
在客户机的浏览器中,使用网站名称分别访问不同的虚拟Web主机,确认能够看到不同的网页内容,如图所示,此时表示基于域名的虚拟主机配置成功。若无法看到此结果则需要检查两个站点的首页文件,根据上述过程排查配置错误,必要时清空浏览器缓存后再重新访问。
![](https://images0.cnblogs.com/blog/747908/201505/270914057505185.jpg)
2. 2 基于IP地址、基于端口的虚拟主机
构建基于IP地址或基于端口的虚拟主机时,过程与基于域名的虚拟主机类似,也需要先提供域名解析准备网页文档,再调整httpd配置,重启httpd服务,然后在客户机中访问虚拟主机进行测试。这其中最主要的区别在于,不同类型的虚拟主机在fttpd.conf文件中的配置内容有些许不同。
1. 基于IP地址的虚拟主机
对于这种类型来说,每个虚拟Web主机各自使用不同的IP地址,但是都通过同一台httpd服务器对外提供Web浏览服务。正因为如此用来支撑这些虚拟Web主机的服务器也就需要有大量的网络接口,这在实际应用中往往不太方便,所以基于IP地址的虚拟主机并不像基于域名虚拟主机样应用广泛。
配置基于IP地址的虚拟Web主机时,不再使用Name Virtual Host配置项来指定监听服务的IP地址,而只要在每个虚拟Web主机的Virtual Host配置中指定各自域名所对应的IP地址。例如站点www. aaa. cn的IP地址为192.168.1.100,站点www.bbb.cn的IP地址为192.168.1.200,若要实现基于IP地址的虚拟Web主机,则可参考以下内容调整httpd服务器的配置。
[root@sky ~] # vim /usr/local/httpd/conf/extra/httpd-vhosts.conf <Directory "/var/www/html" > Order allow,deny Allow from all </Directory> <VirtualHost 192.168.1.100> <==设置aaa虚拟站点区域 DocumentRoot /var/www/html/aaacn ServerName www.aaa.cn ErrorLog logs/www.aaa.cn.error_log CustomLog logs/www.aaa.cn.access_log common </VirtualHost> <VirtualHost 192.168.1.200> <==设置bbb虚拟站点区域 DocumentRoot /var/www/html/bbbcn ServerName www.bbb.cn ErrorLog logs/www.bbb.cn.error_log CustomLog logs/www.bbb.cn.access_log common </VirtualHost> |
[root@www ~]
# vi /usr/local/httpd/conf/httpd.conf
…… //省略部分内容
Include conf/extra/httpd
-vhosts
.
conf <==加载独立的配置文件
2.构建基于端口的虚拟主机
这种类型通常只用于同一个Web站点,其针对的网站名称、IP地址往往是相同的,但通过不同的TCP端口来提供访问不同网页内容的服务入口。在浏览器中访问非90端口的Web服各器时,需要明确指出服务器的端口号,如访问http://www.aaa.com:8080/。 配置基于端口的虚拟Web主机时,也不再需要使用Name VirtualHost配置项。而是通过多个Listen配置项来指定要监听的TCP端口号,每个虚拟Web主机的VirtualHost配置中应同时指定IP地址和端口号。
例如若要实现当通过80端口访问www.aaa.com站点时,看到的是正常的accp站点内容,而当通过端口8080端口来访问www.aaa.com站点时,可以看aaa站点的后台管理系统页面,可参考以下内容调整httpd服务器的配置。
[root@sky ~] # vim /usr/local/httpd/conf/extra/httpd-vhosts.conf <Directory "/var/www/html" > Order allow,deny Allow from all </Directory> <VirtualHost 192.168.1.100:80> DocumentRoot /var/www/html/aaacom <==正常访问的网站目录 ServerName www.aaa.com ErrorLog logs/www.aaa.com.error_log CustomLog logs/www.aaa.com.access_log common </VirtualHost> <VirtualHost 192.168.1.100:8080> DocumentRoot /var/www/html/aaapad <==后台管理系统的网站目录 ServerName www.aaa.com ErrorLog logs/www.aaa.com.error_log CustomLog logs/www.aaa.com.access_log common </VirtualHost> [root@www ~] # vi /usr/local/httpd/conf/httpd.conf …… //省略部分内容 Include conf/extra/httpd -vhosts . conf <==加载独立的配置文件 |
Listen 192.168.1.100:80 <==监听80端口
Listen 192.168.1.100:8080 <==监听8080端口