Apache

Linux系统下编译安装Apache服务器过程

1.1.  安装 Apache
[root@os11728 src]# yum  remove httpd*

[root@os11728 src]# wget http://apache.etoak.com//httpd/httpd-2.2.22.tar.gz

[root@os11728 src]# tar -zxvf httpd-2.2.22.tar.gz

[root@os11728 src]# cd httpd-2.2.22

[root@os11728 httpd-2.2.22]# ./configure –prefix=/usr/local/apache2 –enable-mods-shared=all -with-ssl -enable-ssl -enable-so

[root@os11728 httpd-2.2.22]# ./configure –prefix=/usr/local/apache2 -with-ssl -enable-ssl -enable-so -enable-rewrite

 [root@os11728 httpd-2.2.22]# make

[root@os11728 httpd-2.2.22]# make install

开机自启动方法设置

[root@os11728 httpd-2.2.22]#cp -f /usr/local/apache2/bin/apachectl /usr/sbin/apachectl

[root@os11728 httpd-2.2.22]#cp /usr/local/apache2/bin/apachectl /etc/rc.d/init.d/httpd

[root@os11728 httpd-2.2.22]# chmod +x /etc/rc.d/init.d/httpd

[root@os11728 httpd-2.2.22]#chkconfig –add httpd

[root@os11728 httpd-2.2.22]#chkconfig –level 345 httpd on

出现错误提示:service httpd does not support chkconfig

解决: 在文件/etc/rc.d/init.d/httpd中#!/bin/sh后面加入下面两行内容:

# chkconfig: 345 85 15

# description: Apache is a World Wide Web server.

然后再

[root@os11728 httpd-2.2.22]# chmod +x /etc/rc.d/init.d/httpd

[root@os11728 httpd-2.2.22]#chkconfig –add httpd

[root@os11728 httpd-2.2.22]#chkconfig –level 345 httpd on

另一种开机自启动方法设置:

[root@os11728 httpd-2.2.22]# vi /etc/rc.local

加入以下内容

/usr/local/apache2/bin/apachectl start

启用Apache

[root@os11728 httpd-2.2.22]# export PATH=$PATH:/usr/local/apache2/bin

[root@os11728 httpd-2.2.22]# apachectl start

或:

[root@os11728 httpd-2.2.22]# service httpd -k start

[root@os11728 httpd-2.2.22]# httpd -k start

若出现错误提示:

httpd: Syntax error on line 106 of /usr/local/apache2/conf/httpd.conf: Cannot load /usr/local/apache2/modules/libphp5.so into server: /usr/local/apache2/modules/libphp5.so: cannot open shared object file: No such file or directory

说明/usr/local/apache2/modules/libphp5.so不存在,需重新编译PHP,或在已编译好的PHP目录中将libphp5.so复制一份到apache2安装目录,如:

 [root@os11728 httpd-2.2.22]# cp /usr/local/src/php-5.4.4/libs/libphp5.so /usr/local/apache2/modules/

停止Apache

[root@os11728 httpd-2.2.22]# export PATH=$PATH:/usr/local/apache2/bin

[root@os11728 httpd-2.2.22]# apachectl stop

或:

[root@os11728 httpd-2.2.22]# service httpd -k stop

[root@os11728 httpd-2.2.22]# httpd -k stop

重启Apache

[root@os11728 httpd-2.2.22]# export PATH=$PATH:/usr/local/apache2/bin

[root@os11728 httpd-2.2.22]# apachectl restart

或:

[root@os11728 httpd-2.2.22]# service httpd -k restart

[root@os11728 httpd-2.2.22]# httpd -k restart

若出现以下错误:

httpd: Could not reliably determine the server’s fully qualified domain name, using 127.0.0.1 for ServerName

httpd not running, trying to 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

[root@os11728 httpd-2.2.22]# vi /usr/local/apache2/conf/httpd.conf

进入apache的安装目录,用记事本打开httpd.conf

将里面的#ServerName www.example.com:80注释去掉即可,,并改成ServerName 127.0.0.1:80。或者 ServerName localhost:80 (80是端口,只要不冲突可以改为其他端口,一般80为默认端口)

然后

[root@os11728 httpd-2.2.22]# ps -aux |grep httpd

[root@os11728 httpd-2.2.22]# killall -9 httpd

[root@os11728 httpd-2.2.22]# apachectl restart

若遇80端口被占用,无法启用apache,可执行

[root@os11728 httpd-2.2.22]# netstat -natup |grep 80 #查看80端口被哪个进程占用

[root@os11728 httpd-2.2.22]# ps 进程ID #查看进程信息

[root@os11728 httpd-2.2.22]# kill -9 进程ID #杀死进程

在重启后发现Apache启动失败:

[root@prd111caihuablog001 logs]# apachectl restart

httpd not running, trying to start

在Apache的日志文件中(/usr/local/apache2/logs/error_log)有如下的错误信息:

[Thu Feb 09 16:16:41 2012] [alert] (EAI 2)Name or service not known: mod_unique_id: unable to find IPv4 address of “prd111caihuablog001″

Configuration Failed

则在/etc/hosts中添加一行

127.0.0.1    prd111caihuablog0011 localhost

就可以正常启动Apache了。

修改Linux的主机名,其实是修改文件/etc/sysconfig/network里的主机名.

NETWORKING=yes

HOSTNAME=prd111caihuablog001

若直接修改/etc/sysconfig/network ,则需重启网络才能生效,如:

/etc/rc.d/init.d/network restart

添加Apache的环境变量

[root@os11728 httpd-2.2.22]# vi /etc/profile

在最后加上如下一行代码:

将其打开把

export PATH=$PATH:/usr/local/apache2/bin

这句放在“export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE INPUTRC”的上一行

立即生效环境配置,不需要重启,用下命令:

[root@os11728 httpd-2.2.22]# . /etc/profile

1.2.  修改Apache配置文件

[root@os11728 httpd-2.2.22]# vi /usr/local/apache2/conf/httpd.conf

主要修改的内容如下:

DocumentRoot “/var/www/root”

<Directory “/var/www/root”>

 

    Options -Indexes FollowSymLinks

 

    AllowOverride All

 

allow,deny

    Allow from all

 

</Directory>

 

<IfModule dir_module>

    DirectoryIndex index.html index.htm default.htm index.php default.php index.shtml default.shtml

</IfModule>

 

<IfModule mime_module>

    TypesConfig conf/mime.types

 

    AddType application/x-compress .Z

    AddType application/x-gzip .gz .tgz

    AddType application/x-httpd-php .php

    AddType application/x-httpd-php-source .phps

 

    AddType text/html .shtml

    AddOutputFilter INCLUDES .shtml

</IfModule>

 

# Server-pool management (MPM specific)

Include conf/extra/httpd-mpm.conf

 

# Real-time info on requests and configuration

Include conf/extra/httpd-info.conf

 

# Various default settings

Include conf/extra/httpd-default.conf

 

NameVirtualHost *:80

Include /usr/local/apache2/conf/extra/vhosts/*.conf

1.3.  创建虚拟主机

[root@os11728 httpd-2.2.22]# vi /usr/local/apache2/conf/extra/vhosts/www_finet85_cn.conf

内容如下(前提条件:目录/var/www/root/www_finet85_cn和目录/var/www/logs/www_finet85_cn/都已创建,且已安装cronolog)

<virtualHost *:80>

    ServerName www.finet85.cn

    DocumentRoot /var/www/root/www_finet85_cn

 

    #bovin.phang@gmail.com SiteLogs

    #TransferLog /var/www/logs/www_finet85_cn/TransferLog.txt

    #ErrorLog    /var/www/logs/www_finet85_cn/ErrorLog.txt

    CustomLog “|/usr/local/sbin/cronolog /var/www/logs/www_finet85_cn/access_%Y%m%d.log” combined

    ErrorLog “|/usr/local/sbin/cronolog var/www/logs/www_finet85_cn/error_%Y%m%d.log”

   

    <Directory “/var/www/root”>

Options -Indexes FollowSymLinks

AllowOverride All

           Order allow,deny

           Allow from all

    </Directory>

</VirtualHost>

 

<VirtualHost *:80>

    ServerName *.finet85.cn

    DocumentRoot /var/www/root/www_finet85_cn

 

    #bovin.phang@gmail.com SiteLogs

    #TransferLog /var/www/logs/www_finet85_cn/TransferLog.txt

    #ErrorLog    /var/www/logs/www_finet85_cn/ErrorLog.txt

    CustomLog “|/usr/local/sbin/cronolog /var/www/logs/www_finet85_cn/access_%Y%m%d.log” combined

    ErrorLog “|/usr/local/sbin/cronolog var/www/logs/www_finet85_cn/error_%Y%m%d.log”

    <Directory “/var/www/root”>

Options -Indexes FollowSymLinks

AllowOverride All

           Order allow,deny

           Allow from all

    </Directory>

</VirtualHost>

编译安装mod_rewrite

如果安装apache时忘了安装rewrite,则可执行以下操作安装rewrite

cd apache下载源目录

[root@os11728 src]# cd httpd-2.2.22

[root@os11728 httpd-2.2.22]# find ./ -name mod_rewrite.c

进入 mod_rewrite.c 所在目录执行命令

 [root@os11728 httpd-2.2.22]# cd /usr/local/src/httpd-2.2.22/modules/mappers/ 

[root@os11728 proxy]# /usr/local/apache2/bin/apxs -i -a -c mod_rewrite.c

 [root@os11728 mappers]# apachectl restart

参数说明:

-i : 执行安装操作,将so 安装到 modules目录

-a: 在httpd.conf中激活该模块

-c: 执行编译操作

如果没有什么错误的话,应该在apache的modules目录中编译出一个mod_rewrite.so文件。

编辑httpd.conf文件,确认httpd.conf中已经包含mod_rewrite.so的加载语句,如下:

LoadModule rewrite_module modules/mod_rewrite.so

##将/* 及/*/*的请求都转向到 /new/index.htm , 同时浏览器显示的是前者的链接。

RewriteEngine On

RewriteRule ^/.*(/(.*))?$ /new/index.htm [L,PT]

附:RewriteRule 参数

Apache安装完成后,添加新模块

apxs是一个为Apache HTTP服务器编译和安装扩展模块的工具,用于编译一个或多个源程序或目标代码文件为动态共享对象,使之可以用LoadModule指令在运行时加载到Apache服务器中。

1. 进入apache源代码的modules目录

2. 运行如下命令自动编译、安装和修改httpd.conf文件,激活mod_proxy模块:

进入 mod_rewrite.c 所在目录执行命令

 [root@os11728 httpd-2.2.22]# cd /usr/local/src/httpd-2.2.22/modules/proxy 

[root@os11728 proxy]# /usr/local/apache2/bin/apxs -c -i -a mod_proxy.c proxy_util.c

 [root@os11728 proxy]# apachectl restart

apache path/bin/apxs -c -i -a mod_proxy.c proxy_util.c

选项说明:

-c 执行编译操作

-i 安装操作,安装一个或多个动态共享对象到服务器的modules目录

-a 自动增加一个LoadModule行到httpd.conf文件,以激活此模块,若此行存在则启用之

-A 与-a类似,但是它增加的LoadModule行前有井号前缀(#)

-e 需要执行编辑操作,可与-a和-A选项配合使用,与-i操作类似,修改httpd.conf文件,但并不安装此模块

3. 重启apache。

参考:

http://www.jzxue.com/fuwuqi/http-iis-apache/200902/06-1457.html

1.4.  安装 cronolog
 [root@os11728 src]# wget http://cronolog.org/download/cronolog-1.6.2.tar.gz

[root@os11728 src]# tar -zxvf cronolog-1.6.2.tar.gz

[root@os11728 src]# cd cronolog-1.6.2

[root@os11728 cronolog-1.6.2]#./configure

[root@os11728 cronolog-1.6.2]# make

[root@os11728 cronolog-1.6.2]# make install

[root@os11728 cronolog-1.6.2]# which cronolog #查看cronolog安装后所在目录(验证安装是否成功

[root@os11728 cronolog-1.6.2]# man cronolog #查看Man手册

修改Aapche虚拟主机配置文件 httpd.conf

a.将Web访问日志设置 CustomLog 和错误日志设置 ErrorLog修改为以下格式:

    CustomLog “|/usr/local/sbin/cronolog /var/www/logs/access_%Y%m%d.log” combined

ErrorLog “|/usr/local/sbin/cronolog var/www/logs/error_%Y%m%d.log”

b. 日志分割完了,我们还可以使用压缩命令将每天产生的日志进行打包处理,一是节省磁盘空间,同时还可以定期将压缩好的日志转移到其他地方备份起来,方便我们随时查看,而这个任务我们可以配合系统自带的crontab系统计划任务来实现。

1、首先我们在root目录下写一个压缩日志的脚本

    #!/bin/bash    LOG_WEB=”/var/www/logs”  //根据自己的日志路径设置    DATE=`date -d yesterday +%Y-%m-%d`  //指定时间为前一天

    cd $LOG_WEB  //进入日志目录

    /bin/gzip bak_access_$DATE.log  //执行压缩命令

   /bin/gzip bak_error_$DATE.log  //执行压缩命令

注:在缺省的状态下,用gzip命令压缩文件,会在生成的压缩文件后再加上一个.gz扩展名,然后删除掉原来的文件。

2、然后我们保存脚本为“ziplog.sh”并设置可执行权限,之后我们就可以将其添加到crontab系统计划任务中了。

    crontab -e  //进入crontab的编辑界面,添加如下内容

0 1 * * * sh /var/www/logs/ziplog.sh  //设定每天凌晨1点执行脚本任务,保存退出

使用“crontab -l”可以查看我们刚才添加的命令

3、自动删除7天前的log脚本

用root帐号打开CronTab

[root@os11728 ~]# crontab –e

然后输入

30 22 * * * /var/www/logs/rmlog.sh

每天22点30分就会自动运行该脚本

rmlog.sh脚本

#!/bin/bashshlog=/usr/local/apache/logs/sh.loglogpath=”/var/www/logs/ir/”

today=$(date +%Y%m%d)

file=” bak_access_”.$today. “.log.gz”

oldfile=”$logpath”$(date +%Y%m%d –date=’7 days ago’)

echo $oldfile

#if [ -f $oldfile ]

#then

rm -rf $oldfile >>$shlog 2>&1

echo “[$(date +%Y%m%d)][$(date +%T)][$oldfile] Delete Success!”>>$shlog

#else

# echo “[$(date +%Y%m%d)][$(date +%T)][$oldfile] No Old File!”>>$shlog

#fi

这段脚本每次执行输出执行结果到一个sh.log文件中以让自己知道执行结果

Apache 日志备份与删除脚本:

 #!/bin/bash#

# apache logs (ir) backup

backupDir=/var/www/logs/ir/

targetDir=/var/www/logsbackup/

logfilename=`date -d yesterday +%Y%m%d`

backupdate=`date +%Y%m%d.%H`

cd $backupDir

echo “get access log:”

if [ -e "ir-access_${logfilename}.log" ]; then 

#tar -zcvPf ir-access_bak_${backupdate}.tar.gz $(basename $backupDir)

tar -zcvPf ir-access_bak_${backupdate}.tar.gz ir-access_${logfilename}.log

rm -rf ir-access_${logfilename}.log

mv ir-access_bak_${backupdate}.tar.gz $targetDir

fi 

echo “done.”

echo “get error log:”

if [ -e "ir-error_${logfilename}.log" ]; then 

tar -zcvPf ir-error_bak_${backupdate}.tar.gz ir-error_${logfilename}.log

rm -rf ir-error_${logfilename}.log

mv ir-error_bak_${backupdate}.tar.gz $targetDir

fi

echo “done.”

#取当前日期的上个月同日期的文件,然后删除。

#如果当前日期是1号的话,则删除前两个月的所有文件,保留一个月。

cd $targetDir

yy=`date +%Y` #Year yyyy取得当前日期的年份

mm=`date +%m` #Month mm取得当前日期的月份

dd=`date +%d` #Day dd取得当前日期的日数

#echo $yy-$mm-$dd

if [ $dd -eq '01' ] ; then #如果每个月1号,删除前两个月的所有文件由于可能出现本月只有30天而上月有31天,31号的文件没删的情况,所以在每个月初做一次全部删除的操作。

prvmm=`expr $mm – 2`#月份-2

else

prvmm=`expr $mm – 1`

fi

if [ $prvmm -eq 0 ] ; then

prvmm=12

elif [ $prvmm -lt 10 ] ; then

prvmm=0$prvmm

fi

#echo $prvmm

if [ $dd -eq '01' ] ; then

accessfilename=ir-access_bak$yy$prvmm*

errorfilename=ir-error_bak$yy$prvmm*

else

accessfilename=ir-access_bak$yy$prvmm$dd*

errorfilename=ir-error_bak$yy$prvmm$dd*

fi

if (ls $accessfilename && ls $errorfilename)  > /dev/null 2>&1;then

  #echo “file exists”

  rm -rf $accessfilename

  rm -rf $errorfilename

else

  #echo “no files”

fi

1.5.  安装 AWStats

配置awstats

awstats的配置使用awstats的配置工具/usr/local/awstats/tools/awstats_configure.pl 进行配置,首先用vi打开configure.pl文件,看看第一行有关perl运行环境的配置是否正确,然后运行下面的命令进行配置:

 [root@os11728 ~]# /usr/local/awstats/tools/awstats_configure.pl

基本上整个配置过程很简单,回车和简单填写一些就结束了,awstats_configure.pl工具会自动修改您的apache配置,在apache的配置文件httpd.conf文件中自动修改下面信息

CustomLog /yourlogpath/yourlogfile common

CustomLog /yourlogpath/yourlogfile combined

这样的修改将让您的apache在记录日志的时候记录到更多可用于分析的内容,比如来访者的浏览器、来访者的身份(是否为蜘蛛、机器人等)。

同时awstats_configure.pl还将自动在httpd.conf文件中添加下面内容:

## Directives to allow use of AWStats as a CGI#

Alias /awstatsclasses “/usr/local/awstats/wwwroot/classes/”

Alias /awstatscss “/usr/local/awstats/wwwroot/css/”

Alias /awstatsicons “/usr/local/awstats/wwwroot/icon/”

ScriptAlias /awstats/ “/usr/local/awstats/wwwroot/cgi-bin/”

#

# This is to permit URL access to scripts/files in AWStats directory.

#

<Directory “/usr/local/awstats/wwwroot”>

    Options None

    AllowOverride None

    Order allow,deny

    Allow from all

</Directory>

这将配置awstats可以通过web客户端访问。

另外,configure.pl还将根据安装过程中您的回答(要分析的网站名称)信息,自动生产/etc/awstats /awstats.yourdomain.conf文件,我生成的文件是awstats.finet85.conf文件,这个文件几乎不用修改,就可以了,如果您有些特殊的设置,可以自己修改该文件进行配置,我的配置文件里面最基本的几行配置内容如下:

#LogFile=”/var/www/logs/www_finet85_cn/access_%YYYY-0%MM-0%DD-0.log”LogFile=” /var/www/logs/www_finet85_cn/*.log |”SiteDomain=”finet85.cn”

HostAliases=”finet85 www.finet85 127.0.0.1 localhost”

其他的都是默认设置,不用修改

这样,您就完成了awstas的安装和配置。

分析日志

完成awstats的配置以后,要让awstats开始第一次进行您的日志文件的分析,并存放awstats的数据库中,您需要运行下面的命令

 [root@os11728 ~]# /usr/local/awstats/wwwroot/cgi-bin/awstats.pl -update -config=finet85

 [root@os11728 ~]# perl awstats.pl -update -config=finet85

上面的finet85替换成您/etc/awstats/awstats.yourhost.conf中的yourhost即可

这样,awstats就完成了第一次数据的导入,今后您只需要定期再次运行此命令即可进行增量的更新!

我把这个命令加到了crontab中,让他每天凌晨5点运行一次,呵呵,下面是加入到crontab的方法

#crontab -e

添加以下内容

0 5 * * * /usr/local/awstats/wwwroot/cgi-bin/awstats.pl -update -config=finet85

至此,您的全部安装和配置完成,重启一下您的apache,在ie里面输入http://www.yourhost.com/awstats /awstats.pl?config=yoursitename&lang=yourlang即可访问!如:  呵呵,好好享受吧!

Awstats访问权限设置

Awstats默认情况系任何人都可以访问。可以通过apache限制Awstats限制只有登陆的用户才能访问。

(1)用Apache的htpasswd指令生成用户名和密码

[root@os11728 ~]# htpasswd -cm /usr/local/awstats/authfile finet_ir

[root@os11728 ~]# htpasswd -m /usr/local/awstats/authfile finet_ir

(2)在Apache的配置文件httpd.conf,Awstats的目录权限配置中添加访问权限控制。

即将

<Directory “/usr/local/awstats/wwwroot”>    Options None    AllowOverride None

    Order allow,deny

    Allow from all

</Directory>

修改为:

<Directory “/usr/local/awstats/wwwroot”>    Options NoneAllowOverride None

AuthName “admin onssw Access”

    Order allow,deny

Allow from all

AuthType Basic     

AuthName “Restricted Files”     

AuthUserFile “/usr/local/awstats/authfile”

Require user finet_ir

</Directory>

重启apache

生成html静态页面方便查看

 [root@os11728 ~]# /usr/local/awstats/tools/awstats_buildstaticpages.pl -update -config=www.finet85.cn -lang=cn -dir=/var/www/logs/www_finet85_cn -awstatsprog=/usr/local/awstats/wwwroot/cgi-bin/awstats.pl

上述命令参数解释:

* /usr/local/awstats/tools/awstats_buildstaticpages.pl Awstats    #静态页面生成工具

* -update -config=www.finet85.cn   #更新配置项

* -lang=cn   #语言为中文

* -dir=/var/www/logs/www_finet85_cn    统计结果输出目录

* -awstatsprog=/usr/local/awstats/wwwroot/cgi-bin/awstats.pl Awstats   日志更新程序路径。

1.6.  安装mod_fastcgi
[root@os11728 src]# wget http://www.fastcgi.com/dist/mod_fastcgi-current.tar.gz

[root@os11728 src]# tar -zxvf mod_fastcgi-current.tar.gz

[root@os11728 src]# cd mod_fastcgi*

[root@os11728 mod_fastcgi-2.4.6]# cp Makefile.AP2 Makefile

[root@os11728 mod_fastcgi-2.4.6]# make top_dir=/usr/local/apache2

[root@os11728 mod_fastcgi-2.4.6]# make install

修改apache的httpd.conf, 使apache载入FastCGI模块:

[root@os11728 mod_fastcgi-2.4.6]# vi /usr/local/apache2/conf/httpd.conf

增加以下内容:

LoadModule fastcgi_module modules/mod_fastcgi.so