当前位置: 首页 > 图文教程 > 服务器 > Linux服务器 > WEB服务器Apache编译指南及高级技巧

Linux服务器
精品推荐之Linux下三大便利的开源防火墙
CentOS教程推荐 系统安装后的初始环境设置
Linux十大高级安全管理技巧
CentOS教程之用OpenSSH构建SSH服务器
Samba服务器在Solaris下的高级应用
Linux下WWW服务器配置全攻略
关于Linux Grep命令使用的详细介绍
RHEL4 通过yum自动升级实现
快速解决DB2创建存储过程时所遇到的错误
Linux系统教程第2课:init进程和inittab文件
Linux系统教程:第1课 linux系统启动
Linux系统教程:第3课 守护进程以及运行方式
Linux系统教程:第4课 xinetd
Linux系统教程:第5课 linux服务管理工具
Linux系统教程:第6课 linux网络基础
Linux系统教程:第7课 linux的tcp-ip设置
如何增强solaris安全
关于HTTP503服务器过载问题
三万元搭建LINUX服务器集群
Linux下FTP服务器配置

Linux服务器 中的 WEB服务器Apache编译指南及高级技巧


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-18   浏览: 42 ::
收藏到网摘: n/a


一本文目的
本文旨在详述如何编译Apache,OpenSSL,ModSSL,MM,Mod_Perl,PHP,Zend,MySQL和Oracle支持及其可能遇到的问题,和一些常用的加速编译和提高工作效率的技巧。

二工作环境
RedhatLinuxOS6.x/7.x

三编译过程
1.所需的软件

MM1.1.3http://www.engelschall.com/sw/mm/
OpenSSL0.9.6dwww.openssl.org
ModSSL2.8.10_1.3.26www.modssl.org
Apache1.3.26www.apache.org
MySQL3.23.51www.mysql.com
PHP4.2.1/3.0.18www.php.net
ZendOptimizer1.3.1https://www.zend.com/store/freeware.php
Mod_Perl1.27http://perl.apache.org/dist/
Oracle8.1.7www.oracle.com

2.开始编译

a.首先编译MM(可选)

cd../mm-1.1.3
./configure--prefix=/usr/local/mm(单独的目录便于区别)
make
maketest
makeinstall

b.编译OpenSSL(http:可选https:必需)

cd../openssl-0.9.6d
./configno-threads-fPIC
make
maketest
makeinstall

注:no-threads没有多线程支持,因为Apache1.3.x不用多线程。

c.编译Mod_SSL(http:可选https:必需)

cdmod_ssl-2.8.10-1.3.26
./configure--with-apache=../apache_1.3.26

d.编译Apache

d1最大子进程限制修补(可选)

cd../apache_1.3.26
visrc/include/httpd.h
changevalue256to1024orabove

d2为后来的PHP带Oracle支持作准备(可选)

如果你要编译PHP带Oracle支持,你要修改Apache编译文件configure加下面的行LIBS=-lpthread在
forvarinCFLAGSLDFLAGSLIBSINCLUDESDEPS;do
前面,如下所示

LIBS=-lpthread
forvarinCFLAGSLDFLAGSLIBSINCLUDESDEPS;do

注:忘记了加LIBS=-lpthread,你可以
#cd/usr/src/apache_1.3.26
#makeclean
#LIBS=-lpthread./config.status
#make
#makeinstall

d3编译Apache

EAPI_MM=../mm-1.1.3SSL_BASE=../openssl-0.9.6d./configure
--prefix=/usr/local/apache_ssl--enable-module=most--enable-shared
=max--enable-module=rewrite--enable-shared=rewrite--enable-module
=proxy--enable-shared=proxy--enable-module=ssl--enable-shared=ssl
make
makecertificate(TYPE=testbydefault)
makeinstall
strip/usr/local/apache_ssl/bin/*

注:
d3.1如果你只是为了测试SSL,可用上面的命令,因为默认是为了测试。
d3.2如果你升级正在运行的SSL站点,可用makecertificateTYPE=dummy,最后拷贝已经在用的ssl.crt/server.crt和
ssl.key/server.key。
d3.3在makeinstall之前,可用命令lddsrc/httpd看有没有输出libpthread以确认前面有没有enableLIBS=-lpthread。
d3.4strip所有的apache可执行文件包括httpd以节省内存空间。

e编译MySQL

shell>groupaddmysql
shell>useradd-gmysqlmysql
shell>cd/usr/local
shell>gunzip</path/to/mysql-VERSION-OS.tar.gz|tarxvf-
shell>ln-sfull-path-to-mysql-VERSION-OSmysql
shell>cdmysql
shell>scripts/mysql_install_db
shell>chown-Rroot.
shell>chown-Rmysqldata
shell>chgrp-Rmysql.
shell>bin/safe_mysqld--user=mysql&

shutdownMySQL:cd/usr/local/mysql;bin/mysqladminshutdown

f编译PHP

./configure--with-apxs=/usr/local/apache_ssl/bin/apxs--with-mysql
=/usr/local/mysql--with-zlib--disable-debug--enable-track-vars--with-xml--with
-gdbm--enable-sysvsem--enable-sysvshm--with-openssl
=/usr/local/ssl--with-mm=/usr/local/mm--enable-ftp

如果需要Oracle支持,再加上--with-oracle=/home/oracle/oracle8--with-oci8
=/home/oracle/oracle8--enable-sigchild(假定Oraclehome目录是/home/oracle/oracle8)

make
makeinstall
cpphp.ini-dist/usr/local/apache_ssl/conf/php.ini
加下面的部分到/usr/local/apache_ssl/conf/httpd.conf

AddTypeapplication/x-httpd-php.php
AddTypeapplication/x-httpd-php-source.phps

加下面的部分到/usr/local/apache_ssl/bin/apachectl

PHPRC=/usr/local/apache_ssl/conf
exportPHPRC
LD_LIBRARY_PATH=$ORACLE_HOME/lib
exportLD_LIBRARY

上面的LD_LIBRARY部分如果不加,当你编译PHP带Oracle支持,启动Apache时你可能会得到错误信息如下libclntsh.so.8.0:notfound

如果仍然有oracle问题,可能你需要全部的Oracle环境变量放入apachectl中,如下例:

./etc/profile
TWO_TASK=asdbs;exportTWO_TASK
ORACLE_HOME=/home/oracle/oracle8;exportORACLE_HOME
ORACLE_BASE=/home/oracle;exportORACLE_BASE
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:
$ORACLE_HOME/lib:/usr/local/lib:/usr/lib;exportLD_LIBRARY_PATH
ulimitunlimited
ulimit-n32768
umask002
PATH=$ORACLE_HOME/bin:/usr/local/bin:/usr/bin;exportPATH

g安装ZendOptimizer

#cd/usr/local/apache_ssl/libexec
#cp/path/to/ZendOptimizer-1.1.0-PHP_4.0.5-Linux_glibc21-i386/ZendOptimizer.so.

然后加下面的部分到/usr/local/apache_ssl/conf/php.ini

zend_optimizer.optimization_level=15
zend_extension="/usr/local/apache/libexec/ZendOptimizer.so"

h编译Mod_Perl

#cdmod_perl-1.27
#perlMakefile.PLUSE_APXS=1WITH_APXS
=/usr/local/apache_ssl/bin/apxsEVERYTHING=1
#make
#maketest
#makeinstall
#mkdir/usr/local/apache_ssl/perl

Addthefollowingsinglelineto/usr/local/apache_ssl/conf/httpd.conf
Includeconf/mod_perl.conf
thecontentofmod_perl.confisasfollows:
-------------------------------
#Typicalforplaincgiscripts:
ScriptAlias/cgi-bin//usr/local/apache_ssl/perl/
#TypicalforApache::Registryscripts:
Alias/perl//usr/local/apache_ssl/perl/
#TypicalforApache::PerlRunscripts:
Alias/cgi-perl//usr/local/apache_ssl/perl/

PerlModuleApache::Registry
<Location/perl>
SetHandlerperl-script
PerlHandlerApache::Registry
Options+ExecCGI
PerlSendHeaderOn
allowfromall
</Location>
-------------------------------
注:常见的perlscript问题。

HowtowritePerlscript?

a.standardperlscript
#!/usr/bin/perl
print"Content-Type:text/html\n\n";

b.CGIperlscript
usestrict;
useCGIqw(:all);
printheader;

b.print"Location:URL";andprintheader;problem?
当你要用print"Location:URL"功能时,你不能有任何printheader;语句在print"Location:URL"之前。

usestrict;
useCGIqw(:all);

print"Location:http://www.linuxforum.net";

printheader;
print"Thisisatestinghtmlpage\n\n";

否则象下面这样print"Location:http://www.linuxforum.net";不将工作。
usestrict;
useCGIqw(:all);
printheader;
print"Location:http://www.linuxforum.net";


i修改Apache配置文件中的模块位置

当你编译SSL后再编译PHP和Mod_Perl时,PHP和Mod_Perl模块包含在IfdefineSSL中,也就是只有启动SSL时才会载入PHP和Mod_Perl,让我们修改它如下:

LoadModulephp4_modulelibexec/libphp4.so
LoadModuleperl_modulelibexec/libperl.so
<IfDefineSSL>
LoadModulessl_modulelibexec/libssl.so
</IfDefine>

AddModulemod_php4.c
AddModulemod_perl.c
<IfDefineSSL>
AddModulemod_ssl.c
</IfDefine>

j配置及启动Apache

#/usr/local/apache_ssl/bin/apachectlstart
#/usr/local/apache_ssl/bin/apachectlst