codename::boilingbit www.boilingbit.com/blog

15一/120

Windows下编译Apache服务器

参考 http://httpd.apache.org/docs/2.0/platform/win_compiling.html

下载 apache 2.2.21 源码,解压到 E:\Softwares\httpd-2.2.21

下载 zlib-1.2.5 和 openssl 1.0.0f 的源码(虽然是可选,但最好都装),解压到 E:\Softwares\httpd-2.2.21\srclib 目录下,名字不要带版本号。(zlib官方网站上不去,要翻那个什么的,你懂的。)

下载工具awk,http://cm.bell-labs.com/cm/cs/who/bwk/awk95.exe
改名为awk.exe,路径临时加入PATH

运行VC提供的命令行工具,不是系统那个CMD,把Perl的bin路径临时加入PATH环境变量。

先编译zlib...(此处省略10000字),下面是正确的方法:

上面省略的地方其实我是先用了CMake编译,也很顺利,但不幸的是,由于版本变化,生成的文件名命名规则和存放路径有了点变化,导致后面 的 openssl,apache 无法链接,改了这边那边不对,改那边另一边又不对,总之极其坑爹!但仅仅上面这样还不够,我们还需要把 openssl patch一下,由于官方只提供了个很老的版本的patch,在 http://www.apache.org/dist/httpd/binaries/win32/patches_applied/openssl-0.9.8o-vc32.patch

你可以打开看看,我尝试把他patch到最新版本的源码上去,结果编译反而有更多的问题,其实只需要只改一个地方就够,编辑 E:\Softwares\httpd-2.2.21\srclib\openssl\util\pl\VC-32.pl


$zlib_lib="zlib1.lib";
改成
if (defined $withargs{"zlib-lib"})
{
$zlib_lib=$withargs{"zlib-lib"};
}
else
{
$zlib_lib = $shlib ? 'zdll.lib' : 'zlib.lib';
}

然后进入openssl目录,编译
cd E:\Softwares\httpd-2.2.21\srclib\openssl
perl Configure VC-WIN32 -I../zlib -L../zlib
perl util\mkfiles.pl >MINFO
perl util\mk1mf.pl dll no-asm no-mdc2 no-rc5 no-idea enable-zlib VC-WIN32 >makefile.rel
perl util\mkdef.pl 32 libeay no-asm no-mdc2 no-rc5 no-idea enable-zlib >ms\libeay32.def
perl util\mkdef.pl 32 ssleay no-asm no-mdc2 no-rc5 no-idea enable-zlib >ms\ssleay32.def
nmake -f makefile.rel
然后
> echo. > inc32\openssl\store.h
别问我为什么要这么干...

(对了,中途还有360杀毒出来骚扰我,误报木马,导致编译失败,所以,最好在编译前,关闭360的进程和文件保护,后面编译mysql时也会出现这个情况)

好了,然后可以编译apache了,这个很顺利:

成功后安装到比如 E:\Softwares\apache:

然后

浏览 http://localhost 或者 http://127.0.0.1
显示 "It Works!" 说明服务器正确启动。

(按钮ctrl+c可以停止服务器)

接下来,要让 https 协议也能工作,
在 E:\Softwares\apache\conf\httpd.conf文件中找到"#LoadModule ssl_module modules/mod_ssl.so",去掉注释符号,找到"#Include conf/extra/httpd-ssl.conf",去掉注释符号。

你可以打开 E:\Softwares\apache\conf\extra\httpd-ssl.conf 文件看看,我们需要两个文件,"SSLCertificateFile"和"SSLCertificateKeyFile",对应的缺省文件名为"E:\Softwares\apache\conf\server.crt"和
"E:\Softwares\apache\conf\server.key"。需要使用OpenSSL提供的工具来生成这两个文件。

但会有这个错误
WARNING: can't open config file: /usr/local/ssl/openssl.cnf
Unable to load config info from /usr/local/ssl/openssl.cnf

显然windows下是没有这种路径的,需要加个参数:

然后根据提示,国家输入CN,其他输入.表示空,即可。

然后再次启动httpd,应该不会有错误,不过我遇到个:

(OS 10048)通常每个套接字地址(协议/网络地址/端口)只允许使用一次。 : make_sock:could not bind to address 0.0.0.0:443
no listening sockets available, shutting down
Unable to open logs

当时吓了一跳,443端口已经被占用,不会是中了木马了吧?马上
netstat -ab 查看进程打开的端口(需要admin权限)
原来是VMWare,关闭它的5个service,就好了。

现在浏览 https://localhost
It Works!

© 2012, codename::boilingbit. 版权所有. 署名-非商业性使用-相同方式共享 (by-nc-sa)

by 标签: 发表评论
评论 (0) 引用 (0)

还没有评论.


Leave a comment

(required)

:alien: :angel: :angry: :blink: :blush: :cheerful: :cool: :cwy: :devil: :dizzy: :ermm: :face: :getlost: :biggrin: :happy: :heart: :kissing: :lol: :ninja: :pinch: :pouty: :sad: :shocked: :sick: :sideways: :silly: :sleeping: :smile: :tongue: :unsure: :w00t: :wassat: :whistle: :wink: :wub:

还没有引用.