在MacOS下编译安装Apache HTTPD下载httpd的源码包http://httpd.apache.org/download.cgi编译与安装我喜欢
在MacOS下编译安装Apache HTTPD
下载httpd的源码包
http://httpd.apache.org/download.cgi


编译与安装
我喜欢把自己编译安装的项目放在单独的目录当中,这样维护起来比较方便:
sudo mkdir -p /usr/local/weli
然后设置好权限:
sudo chown weli:staff /usr/local/weli
设置权限的目的是保证自己可以访问。我在MacOS环境中,因此用户组设置为staff。如果你在Linux环境下,那么用户组应该是和你自己的用户名一致,比如:
sudo chown weli:weli /usr/local/weli
接下来是编译安装。如果你使用的是MacOS Mountain Lion,需要正确设置cc[1]:
sudo ln -s /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain /Applications/Xcode.app/Contents/Developer/Toolchains/OSX10.8.xctoolchain
接下来是各平台一致的编译过程:
./configure --prefix=/usr/local/weli/
make
make install
启动服务在运行httpd服务器之前,我们要把主机名配置好。
我们可以在以在/etc/hosts中将公网IP地址对应的主机名设置好:

接下来配置httpd的绑定地址及端口,打开:
<your_dir_prefix>/httpd/conf/httpd.conf
并进行编辑如下:

配置工作就算是完成了,接下来在运行httpd之前,我们修改一下主页的内容:
vi <your_dir_prefix>/httpd/htdocs/index.html
将“It works!"改成:"Hello, world!":

准备工作完成,接下来进到httpd/bin目录中使用apachectl命令启动服务:
sudo ./apachectl -k start

-k选项的含义就是以daemon形式启动,更多对apachectl命令的说明可以参考[2]
注意路径非常重要,如果你不加"./",而是直接运行"apachectl",那么你可能会运行系统中已经安装的httpd,而不是自己编译的这个版本。可以通过which命令来验证这点:
Last login: Tue Apr 2 15:42:12 on ttys001weli@power:~$ which apachectl/usr/sbin/apachectlweli@power:~$
可以看到,在MacOS中,有默认安装好的httpd,并且位于"/usr/sbin/"。
接下来访问服务看看是否启动成功:

一般情况下,到此为止你应该都很顺利地完成了配置并启动了服务。但也有的时候你可能会发现服务无法启动并显示80端口已经被bind,这可能是因为你机器上有其它的服务正在侦听80端口,比如系统里面自带的HTTPD。在MacOS下,如何关闭自带的httpd服务,可以参考[3]。
定制模块我们可以看看在默认情况下httpd安装了哪些模块:

如果你想看httpd的configure都提供了哪些编译选项,可以使用这个命令:
./configure --options
后续的文章中我们会用到httpd的各种编译选项。
小结在本文中,我们学习了httpd的编译安装方法。通过这种方式,我们可以很灵活地定制httpd的各个方面,在编译阶段对其打Patch,或者是把特定的模块给编进去。以这篇文章为基础,我将后续介绍httpd的一系列配置及使用方面的内容。
参考资料[1] Problems with compiling apache2 on Mac OS X Mountain Lion
[2] apachectl - Apache HTTP Server Control Interface
[3] How to enable Web Sharing in OS X Mountain Lion