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

Linux服务器
Linux上双网卡绑定方法(Suse9SP3)
Linux操作系统调优参数的意义
Linux下使用SSH客户端及其Sftp文件传送
教你恢复被误删除的Linux文件
SQL Server注入大全及防御
Linux无法解析域名的解决办法
Linux系统下安装和配置MyEclipse的方法
Ubuntu下VirtualBox 1.4.0设置文件共享
Windows与Linux系统共享StarDict字典文件
修改Linux下相关的登陆信息
Windows通过SecureCRT远程登录Linux主机
Linux操作系统如何修改SWAP交换区的大小
Linux操作系统下为Apache目录添加密码
Linux时间设置与同步(NTP)
Linux内核补丁AMD旁路转换缓冲(TLB)错误
Linux架设DHCP服务器的方法
Fedora 8下Apache配置与管理
Linux操作系统下用单网卡捆绑双IP的方法
Ubuntu Linux系统环境变量配置文件
SUSE Linux中将Tomcat作为Service运行

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


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-18   浏览: 76 ::
收藏到网摘: 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