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

Linux服务器
linux下用cron定时执行任务的方法
.htaccess绑定域名到子目录的方法
linux apache下虚拟主机配置方法
apache 局域网访问配置方案
linux Apache服务器系统安全设置与优化
linux中mac地址绑定方法
linux托盘不断闪烁之解决方法
Apache配置 虚拟转向实例
Apache No space left on device的解决办法
Apache rewrite的重写相关的参数说明
LINUX入门级常用命令20条整理
Ubuntu设置开机自动挂载所有格式硬盘分区
5个可能被你忽略的Linux安全设置方法
学习Apache的mod rewrite、access写法
改版时保留原链接,创建新的URL的方法
rsync中文手册之使用rsync实现网站镜像和备份linux
rsync 数据同步使用详解
linux URL的301重定向代码分析
eclipse3.2.2 + MyEclipse5.5 + Tomcat5.5.27 配置数据库连接池
Apache服务器二级域名的完美实现

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


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