打印

[原创] Apache简单实验2:日志管理、虚拟主机、动态网站、SSL传输

本主题由 赵高 于 2008-1-28 13:20 设置高亮 本主题被作者加入到个人文集中

Apache简单实验2:日志管理、虚拟主机、动态网站、SSL传输

试验环境:虚拟机
服务器:CentOS 5 IP:192.168.175.88

<一>日志管理
为了便于分析Apache的访问日志,Apache的默认配置文件中,按记录的信息不同将访问日志分为4类
普通日志格式(common logformat,CLF) common 大多数日志分析软件都支持这种格式
参考日志格式(referer log format) referer 记录客户访问站点的用户身份
代理日志格式(agent log format) agent 记录请求的用户代理
综合日志格式(combined log format) combined 结合以上三种日志信息(默认)

因为Apache进程本身不负责对日志文件进行滚动,因此必须使用其他程序配置日志滚动。
1,利用logratate和crond实现Apache日志的滚动
logratate是linux自带的一个日志滚动程序,是专门针对各种系统日志而设置的,需要用crond调用,
先看/etc/cron.daily/logrotate,是个shell脚本。
注:cron.daily目录里面的脚本是每天都要执行的(参见/etc/crontab)
这里是logrotate脚本的内容
复制内容到剪贴板
代码:
#!/bin/sh
/usr/sbin/logrotate /etc/logrotate.conf 配置文件位置
EXITVALUE=$?
if [ $EXITVALUE != 0 ]; then
/usr/bin/logger -t logrotate "ALERT exited abnormally with [$EXITVALUE]"
fi
exit 0
我们看一下logrotate.conf的内容
复制内容到剪贴板
代码:
weekly #每周清理一次日志文件
rotate 4 #保存过去4周的
create #清理旧文件同时建立新的
#compress #是否压缩
include /etc/logrotate.d #其他配置用文件
/var/log/wtmp {
monthly
create 0664 root utmp
rotate 1
}
看来配置文件在logrotate.d里面也有,发现确实有个/etc/logrotate.d/httpd
复制内容到剪贴板
代码:
/var/log/httpd/*log { #处理的日志所在位置
missingok #如果丢失创建新的
notifempty #如果日志文件空白则不滚动
sharedscripts #调用日志滚动通用函数
postrotate #滚动开始标识
/bin/kill -HUP `cat /var/run/httpd.pid 2>/dev/null` 2> /dev/null || true
#在日志滚动之后让Apache重新启动
endscript #滚动结束
}
欢迎大家到认证区参与考试题目知识探讨,提问有奖励,解答更有奖励。
友情点击:最近在忙的事情!

TOP

2,利用Apache的rotatelogs实现日志滚动

Apache不能将日志记录直接写入文件,但提供了通过管道操作将日志记录发给另外一个程序,让其他的应用程序实现日志滚动记录的功能,处理日志的程序可以是任何的日志处理程序,如日志分析,压缩日志等。

Apache自带的rotatalogs程序可以实现日志滚动而无需使用crond,其配置方法为在httpd.conf文件中
复制内容到剪贴板
代码:
CustomLog logs/access_log combined
修改为
CustomLog "|/usr/sbin/rotatelogs /var/log/httpd/access_log 60" combined
这里用60秒作实验
访问几次后看到

注意:在生产环境中应该配置offset参数以获得正确的时间,具体可以man。

3,日志统计分析
Webalizer是一个高效的、免费的Web服务器日志分析程序。其分析结果以Html文件格式保存,从而可以很方便的通过Web服务器进行浏览。Internet上的很多站点都使用Webalizer进行Web服务器日志分析。

查看系统中Webalizer状态,注意/var/www/usage就是数据位置


默认webalizer已经将配置文件放入/etc/httpd/conf.d/我们可以看到其内容:
复制内容到剪贴板
代码:
Alias /usage /var/www/usage
<Location /usage>
Order deny,allow
Deny from all
Allow from 127.0.0.1
Allow from ::1
# Allow from .example.com
</Location>
为了可以访问我们把它改成,生产环境要使用用户认证才好。
复制内容到剪贴板
代码:
Alias /usage /var/www/usage
<Location /usage>
Order deny,allow
Deny from all
Allow from 192.168.175.8
</Location>
从客户端可以见到日志统计图表啦
附件: 您所在的用户组无法下载或查看附件
欢迎大家到认证区参与考试题目知识探讨,提问有奖励,解答更有奖励。
友情点击:最近在忙的事情!

TOP

<二>虚拟主机

三种:1,基于IP;2,基于端口;3,基于域名
基于域名的用的最多,所以用这个做实验。修改httpd.conf:
复制内容到剪贴板
代码:
NameVirtualHost *:80 #监听所有IP的80端口。
#当然也可以改成:NameVirtualHost 192.168.175.88:80

<VirtualHost *> #第一个域名ws1.sharecenter.net
DocumentRoot /var/www/html/ws1 #网站所在位置
ServerName ws1.sharecenter.net #域名
#这里还应该放入管理员信箱,日志文件位置等等。
</VirtualHost>

<VirtualHost *> #第一个域名ws2.sharecenter.net
DocumentRoot /var/www/html/ws2 #网站所在位置
ServerName ws2.sharecenter.net #域名
</VirtualHost>
为了节省时间,我直接修改客户端的hosts文件c:\winnt\system32\drivers\etc\hosts加入
192.168.175.88 ws1.sharecenter.net
192.168.175.88 ws2.sharecenter.net
然后分别ping之,解析正确。

分别访问之

查看一下状态,注意此时ws1.sharecenter.net已经变成缺省服务器,就是说如果用IP访问进入的就是ws1
附件: 您所在的用户组无法下载或查看附件
欢迎大家到认证区参与考试题目知识探讨,提问有奖励,解答更有奖励。
友情点击:最近在忙的事情!

TOP

<三>动态网站

1,CGI
默认linux已经安装了Perl,CentOS 5带的是5.8.8。
我们需要告诉Apache允许CGI程序在哪个目录下运行。这里用上文的ws1.sharecenter.net
修改httpd.conf
复制内容到剪贴板
代码:
<Directory "/var/www/html/ws1">
Order allow,deny
Allow from all
Options ExecCGI
</Directory>
不要忘记去掉#AddHandler cgi-script .cgi 全面的注释符号。
在/var/www/html/ws1建立一个perl脚本,并给与可执行权限。
复制内容到剪贴板
代码:
#!/usr/bin/perl
print "Content-type:text/html\n\n";
print "Hello World!\n";
print "<br>";
print "<img src=001.jpg width=400 height=600>\n";
访问


个人感觉perl写脚本还行,写html比较累。
附件: 您所在的用户组无法下载或查看附件
欢迎大家到认证区参与考试题目知识探讨,提问有奖励,解答更有奖励。
友情点击:最近在忙的事情!

TOP

2,PHP

在Apache主配置文件httpd.conf中,有一行 include conf.d/*.conf,就是将该目录下的配置文件包含进来,所以php安装完毕后,就会在该目录里面出现一个php.conf配置文件,非常简洁高效。
复制内容到剪贴板
代码:
LoadModule php5_module modules/libphp5.so #加载模块
AddHandler php5-script .php #文件类型
AddType text/html .php
DirectoryIndex index.php #缺省主页文件
#AddType application/x-httpd-php-source .phps
写个index.php 测试一下
复制内容到剪贴板
代码:
<?php
phpinfo();
?>
访问

附件: 您所在的用户组无法下载或查看附件
欢迎大家到认证区参与考试题目知识探讨,提问有奖励,解答更有奖励。
友情点击:最近在忙的事情!

TOP

3,JSP

服务器:AS4

(1)安装JDK
下载地址http://java.sun.com/javase/downloads/index.jsp
下载后是个可执行文件jdk-6u4-linux-i586-rpm.bin
执行便可

最终文件放到了/usr/jdk目录

(2)安装Tomcat
据说6.0版本不稳定,所以下载5.5.25版本
下载地址:http://tomcat.apache.org/download-55.cgi
apache-tomcat-5.5.25.tar.gz
解压缩后将最终文件放到了/usr/tomcat目录
下面需要给tomcat配置一些环境变量,修改/etc/profile文件,加入
复制内容到剪贴板
代码:
JAVA_HOME=/usr/jdk
TOMCAT_HOME=/usr/tomcat
CATALINA_BASE=$TOMCAT_HOME
CATALINA_HOME=$TOMCAT_HOME
CLASSPATH=$JAVA_HOME/lib:$JAVA_HOME/jre/lib
PATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/jre/bin
export JAVA_HOME CATALINA_HOME CLASSPATH PATH
启动tomcat是用/usr/tomcat/bin下面的startup.sh脚本,注意此时8080端口打开了。

从客户端访问


(3)安装JK实现Apache和Tomcat的整合
整合的理由:1. 提升对静态文件的处理性能
2. 利用 Web 服务器来做负载均衡以及容错
3. 无缝的升级应用程序

这是最复杂的步骤,可分4步
a,安装Apache开发包
apr-devel-0.9.4-24.1.i386.rpm
apr-util-devel-0.9.4-17.i386.rpm
->db4-devel-4.2.52-7.1.i386.rpm
->cyrus-sasl-devel-2.1.19-5.EL4.i386.rpm
expat-devel-1.95.7-4.i386.rpm
openldap-devel-2.2.13-2.i386.rpm
pcre-devel-4.5-3.i386.rpm
httpd-devel-2.0.52-9.ent.i386.rpm

b,下载tomcat-connectors-1.2.26.src.gz
地址:http://tomcat.apache.org/download-connectors.cgi
解压缩之后,bin目录下面的BUILDING.txt文件指明了编译过程
./configure -with-apxs=/usr/sbin/apxs
make
make install
注意安装了/usr/lib/httpd/modules/mod_jk.so文件,并且设置755属性
在/etc/httpd/conf建立一个文件,名字为workers.properties,内容为:
复制内容到剪贴板
代码:
worker.list=ajp13
worker.ajp13.port=8009
worker.ajp13.host=localhost #本机,若上面Tomcat主机不为localhost,作相应修改
worker.ajp13.type=ajp13 #类型
worker.ajp13.lbfactor=1 #代理数,不用修改
c,配置Apache
为了保持httpd.conf文件的简洁,把jk模块的配置放到单独的文件中。
这里加入到conf.d里面的mod_jk.conf文件
复制内容到剪贴板
代码:
LoadModule jk_module modules/mod_jk.so #载入模块
JkWorkersFile conf/workers.properties #配置文件位置
JkLogFile logs/mod_jk.log #日志文件位置
JkLogLevel info
JkLogStampFormat "[%a %b %d %H:%M:%S %Y] "
JkMount /*.jsp ajp13 #所有扩展名为JSP的页面由ajp13处理
d,配置Tomcat
打开/usr/tomcat/conf/server.xml文件
找到<Host name开头的部分,改成
复制内容到剪贴板
代码:
<Host name="localhost" appBase="/var/www/html"
unpackWARs="true" autoDeploy="true"
xmlValidation="false" xmlNamespaceAware="false">
<Context path="" docBase="" debug="0" />
在/var/www/html里面建立一个index.jsp文件
复制内容到剪贴板
代码:
<html>
<body>
<h1>JSP Test Page</h1>
The time is <%=new java.util.Date()%>
</body>
</html>
客户端访问


[ 本帖最后由 赵高 于 2008-11-28 21:06 编辑 ]
附件: 您所在的用户组无法下载或查看附件
欢迎大家到认证区参与考试题目知识探讨,提问有奖励,解答更有奖励。
友情点击:最近在忙的事情!

TOP

<四>SSL传输
环境:虚拟机:Cent OS 5

1,卸载系统中的openssl,查看是否存在gcc编译工具,在我的最小安装的CentOS上需要用CD2安装
rpm -e --nodeps openssl
rpm -qi gcc

cpp-4.1.1-52.el5.i386.rpm
glibc-devel-2.5-12.i386.rpm
glibc-headers-2.5-12.i386.rpm
libgomp-4.1.1-52.el5.i386.rpm
gcc-4.1.1-52.el5.i386.rpm

2,下载openssl,安装到/usr/local/openssl里面
复制内容到剪贴板
代码:
tar xzvf openssl-0.9.8g.tar.gz
cd openssl-0.9.8g
./config --prefix=/usr/local/openssl
make
make test 功能测试
make install
3,利用openssl自带的脚本创建CA
在/usr/local/openssl/ssl/misc下面有个CA.sh脚本,可以用来建立CA
执行过程见图13,图14



注意"A challenge password"留空为好。
注意private/cakey.pem就是CA的私钥,cacert.pem就是CA的证书,CA中心建成了。

4,为我们的Web服务器弄张证书
生成Web服务器私钥
openssl genrsa -des3 -out server.key 1024
生成Web服务器请求
openssl req -new -key server.key -out server.csr
注意CommonName一定和服务器名字一致。
为其签署证书
mv server.csr newreq.pem
./CA.sh -sign
mv newcert.pem server.crt

注意此时需要输入的是CA的私钥密码,最后的server.crt就是Web服务器的证书
附件: 您所在的用户组无法下载或查看附件
欢迎大家到认证区参与考试题目知识探讨,提问有奖励,解答更有奖励。
友情点击:最近在忙的事情!

TOP

5,修改ssl.conf文件
复制内容到剪贴板
代码:
SSLCertificateFile /usr/local/openssl/ssl/misc/server.crt
SSLCertificateKeyFile /usr/local/openssl/ssl/misc/server.key
SSLCACertificateFile /usr/local/openssl/ssl/misc/demoCA/cacert.pem
SSLVerifyClient require
SSLVerifyDepth 1
如果从客户端此时访问,竟然出现

说明客户端没有证书。

6,配置客户端证书
生成客户端私钥
openssl genrsa -des3 -out client.key 1024
生成客户端请求
openssl req -new -key client.key -out client.csr
为其签证
openssl ca -in client.csr -out client.crt

签证成功。
把客户端证书格式转换成pkcs12格式
openssl pkcs12 -export -clcerts -in client.crt -inkey client.key -out client.pfx

小结:此时共有:

CA中心的私钥:private/cakey.pem
CA中心的证书:cacert.pem
Web服务器的私钥:server.key
Web服务器的证书:server.crt
客户端的私钥:client.key
客户端的证书:client.pfx

将证书安装到客户端便可正确访问.
附件: 您所在的用户组无法下载或查看附件
欢迎大家到认证区参与考试题目知识探讨,提问有奖励,解答更有奖励。
友情点击:最近在忙的事情!

TOP

好帖,收藏,赵高就是高

TOP

学习啊~!什么时候能看全啊~!

TOP

一年了,变化真快.
欢迎大家到认证区参与考试题目知识探讨,提问有奖励,解答更有奖励。
友情点击:最近在忙的事情!

TOP

太N了,虽然还看不怎么动,呵呵

TOP

确实比较简单。

TOP

本功能由奇虎搜索实现

相关主题

标题 作者 最后发表
[站外] 基于Linux的Web程序设计--PHP网站开发   [转帖] empty 2008-09-30
[站外] Apache 模块索引   [转帖] admin 2008-08-24
点击阅读更多关于的相关帖子  更多相关主题