1、
httpd源代码下载
1.1
下载Apache HTTP Server httpd-2.4.9.tar.gz
http://httpd.apache.org/download.cgi
下载路径 /home/centos/下载/httpd-2.4.9.tar.gz
1.2
下载APR和APR-UTIL apr-util-1.5.3.tar.gz apr-1.5.1.tar.gz
http://apr.apache.org/download.cgi
这里用的window系统下putty的文件上传到linux系统命令。方便远程操作
D:\JavaDecompress\putty>pscp -C C:\Users\win\Downloads\apr-1.5.1.tar.gz centos@192.168.1.170:/home/centos/
D:\JavaDecompress\putty>pscp -C C:\Users\win\Downloads\apr-util-1.5.3.tar.gz centos@192.168.1.170:/home/centos
移动到下载目录:测试系统为日文cmd打不出中文。需要putty
cd /home/centos/下载/
mv /home/centos/apr-1.5.1.tar.gz .
mv /home/centos/apr-util-1.5.3.tar.gz .
下载路径 /home/centos/下载/apr-1.5.1.tar.gz
下载路径 /home/centos/下载/apr-util-1.5.3.tar.gz
1.3
下载pcre pcre-8.35.tar.gz
http://www.pcre.org/
下载路径 /home/centos/下载/pcre-8.35.tar.gz
2、
2.1
httpd源代码下载 、解压、并移到/decompress/apache/
cd /home/centos/下载/
tar zxvf httpd-2.4.9.tar.gz
root 账户su - root
mkdir -p /decompress/apache
chown -R centos:centos /decompress/apache
mv /home/centos/下载/httpd-2.4.9/ /decompress/apache/
2.2
apr apr-util解压并移到到/decompress/apr/ /decompress/apr-util/
tar zxvf apr-1.5.1.tar.gz
tar zxvf apr-util-1.5.3.tar.gz
su - root
mkdir -p /decompress/apr
chown -R centos:centos /decompress/apr
mkdir -p /decompress/apr-util
chown -R centos:centos /decompress/apr-util
mv /home/centos/下载/apr-1.5.1 /decompress/apr/
mv /home/centos/下载/apr-util-1.5.3 /decompress/apr-util/
3、
快速安装(不推荐)
NN为当前的版本号比如2.4.9
PREFIX为指定安装路径,如果不指定的话默认为/usr/local/apache2
Download $ lynx http://httpd.apache.org/download.cgi
Extract $ gzip -d httpd-NN.tar.gz
$ tar xvf httpd-NN.tar
$ cd httpd-NN
Configure $ ./configure --prefix=PREFIX
Compile $ make
Install $ make install
Customize $ vi PREFIX/conf/httpd.conf
Test $ PREFIX/bin/apachectl -k start
4、
编译和安装httpd前的要求:
4.1、确保你已经安装 APR and APR-Util在你的linux系统上。如果你不这样做,或不愿意使用系统提供版本,在Apache APR上下载最新版本的APR和APR-Util 然后解压缩到./srclib/apr
和./srclib/apr-util
目录(确定解压后的文件名不包含版本号也就是不要使用解压后的默认名;例如 APR distribution 解压后必须在 ./srclib/apr/) 然后使用./configure
--with-included-apr
参数指定apr的src目录。 在一些平台上,您可能需要安装 相应的 - dev 包来允许httpd构建 APR和APR-Util的副本
把apr-1.5.1 目录改名并移动到srclib目录下面
mv /decompress/apr/apr-1.5.1/ /decompress/apache/httpd-2.4.9/srclib/apr/
mv /decompress/apr-util/apr-util-1.5.3/ /decompress/apache/httpd-2.4.9/srclib/apr-util/
4.2perl 兼容的正则表达式库(PCRE)Perl-Compatible Regular Expressions Library (PCRE)
pcre这个库是必需的,但不再与httpd捆绑在一起。从http://www.pcre.org下载源代码,或者安装一个端口或包。如果你构建系统找不到pcre-config PCRE构建脚本安装,使用--with-pcre参数指向它。在一些平台上,您可能需要安装 相应的 - dev 包来允许httpd构建 PCRE的副本。
cd /home/centos/下载
pcre解压
tar zxvf pcre-8.35.tar.gz
su - root
mkdir -p /decompress/pcre
chown -R centos:centos /decompress/pcre
mv /home/centos/下载/pcre-8.35 /decompress/pcre/
cd /decompress/pcre/pcre-8.35
./configure --prefix=/usr/local/pcre --enable-utf
//默认安装在/usr/local的 /usr/local/bin', `/usr/local/lib 里面为了方面删除卸载还是单独目录存放好
// make install后会在[EPREFIX/bin]之类的下面,支持utf8/16/32
make
make check --检查一下非必须
make install
上面的apr不用apachehttpd的 ./srclib/参数也可以先 编译安装只不过用其它的参数配置 --with-apr=PATH --with-apr-util=PATH PATH为 apr apr-util的安装目录
5、
httpd 配置文件参数
5.1
cd /decompress/apache/httpd-2.4.9/
./configure --help
//查看配置参数 具体的可以参考configure文档httpd.apache.org/docs/2.4/programs/configure.html#page-headerconfigure
5.2
configure 参数配置说明
5.2.1
Configuration options --config 自身的配置 比如 ./configure --version 版本查看
5.2.2
Installation directories --安装目录--prefix=PREFIX
默认安装在/usr/local/apache2
其他的就是文件目录比如
--bindir=DIR
默认路径设置 EPREFIX/bin
里面有htpasswd
,dbmmanage
, etc
--sbindir=DIR
默认路径设置 EPREFIX/sbin
. httpd
,apachectl
,suexec
, etc.
--sysconfdir=DIR
默认路径设置
,PREFIX/conf
httpd.confmime.types
, etc
5.2.3
System types --这些选项是用来保存Apache HTTP服务器在另一个系统上运行。在正常情况下,在构建和运行服务器在同一个系统上,这些选项用不到
5.2.4
Optional features --这些选项是用来微调您的HTTP服务器的特性(最主要配的就是这个)
5.2.4.1
语法:使用以下语法来启用和禁用feature
- 相应的module模块以DSO构建 ,默认启用方式为 动态加载
- 相应的module模块为静态加载
--disable-FEATURE
禁用FEATURE 相当于--enable-
FEATURE
=no
--enable-FEATURE[=ARG] 启用FEATURE
默认值是yes
--enable-
FEATURE
=yes
可以简写为--enable-
FEATURE
--enable-MODULE=shared
--enable-MODULE=static
configure
不会检查不存在的配置项
--enable-foo
可能直接忽略过去
5.2.4.2
编译模块选择:启用和禁用功能模块
Optional Features:
...
--disable-example1 example module 1
--enable-example2 example module 2
...
//上面的module1 默认是启用,module2 默认是禁用 如果在配置里面 配置了上面的2个参数则表示 禁用example1 启用example2
//所以 ./configure --help | grep disable 可以查看默认启用的 ./configure --help | grep enable 查看默认禁用的
5.2.4.3
多处理模块:MPM http://httpd.apache.org/docs/2.4/mpm.html#defaults
mpm可以build为动态加载或者静态链接linux服务器并 使用以下选项启用
--with-mpm = MPM
选择您的服务器的默认MPM。 如果mpm 使用动态加载DSO构建模块(见--enable-mpms-shared ),则这个指令将选择MPM作为默认加载配置 文件。 否则,这个指令选择的唯一可用的MPM, 将静态链接到服务器。
如果省略该选项, 默认的 MPM 适用于您的操作系统将被使用。
--enable-mpms-shared = MPM-LIST
使mpm作为动态共享模块的列表。 其中的一个 模块必须使用的动态加载 LoadModule 指令。
MPM-LIST 空格分隔的列表MPM的名字被引号括起来。 例如:
--enable-mpms-shared='prefork worker'
另外您可以使用特殊的关键字 所有 , 这将选择所有mpm支持动态加载的 当前平台和构建DSO模块。 例如:
--enable-mpms-shared=all
5.2.4.4
第三方模块
--with-module=module-type:module-file[, module-type:module-file]
累积和其他选项
--enable-maintainer-mode
打开调试和编译时警告和加载所有编译模块。
--enable-mods-shared =MODULE-LIST
定义一个模块列表启用并构建动态共享模块。 这意味着,这些模块被加载通过使用动态LoadModule
指令。MODULE-LIST是一个由空格分隔的列表modulenames被引号括起来。 模块名称没有给出前的mod_
。 例如:
--enable-mods-shared='headers rewrite dav'
另外您可以使用特殊的关键字reallyall
,all
,most
,few
,none
.。例如,
将编译和构建他们的大多数模块DSO模块,--enable-mods-shared=most
只会编译一组非常基本的模块。--enable-mods-shared=few
默认的设置是most
LoadModule指令选择的模块将自动生成在主配置文件。默认情况下,所有这些指令将注释掉了,除了要求或显式地选择的模块配置--enable-foo参数。 你可以在
httpd.conf通过
更改LoadModule
指令设置激活或关闭加载模块。 此外如果要通过LoadModule配置项 加载所有模块,可以通过配置
——enable-load-all-modules
选项激活
-
这个选项的行为类似
——enable-mods-shared
,但将给定的模块静态链接。 这意味着,这些模块在httpd
运行中都会存在 。 他们需要通过LoadModule加载
。 -
这个选项
的意思类似于
——enable-mods-shared
,动态加载给定的模块。 特殊的关键字none
禁用所有模块的加载。
- 让IPv6的套接字支持 IPv4连接。
-
监听定义在
httpd
的端口 。这个端口号使用httpd.conf
配置文件的端口设置 。 默认值是80。 -
定义另一个可执行文件的名字。 默认值是
httpd
。
--enable-mods-static=MODULE-LIST
--enable-modules=MODULE-LIST
--enable-v4-mapped
--with-port=PORT
——with-program-name
5.2.6
可选包
5.2.6.1
这些选项用于定义可选包。
--with-apr=DIR|FILE
--with-apr-util=DIR|FILE
--with-ssl=DIR
如果想用ssl可以下载http://www.openssl.org/source/ wiki文档http://wiki.openssl.org/index.php/Compilation_and_Installation
cd /home/centos/下载/
tar -zxvf openssl-1.0.1h.tar.gz
su - root
mkdir -p /decompress/openssl
chown -R centos:centos /decompress/openssl
mv /home/centos/下载/openssl-1.0.1h /decompress/openssl/
cd /decompress/openssl/openssl-1.0.1h/
//默认openssldir目录/usr/local/ssl
./config --openssldir=/usr/local/openssl shared -fPIC --shared是动态加载模块。不然有问题
//编译安装
<p>make</p>make install
>> make[4]: *** [mod_ssl.la] Error 1 不加--shared的错误信息
PIC需要用到动态库具体的参照http://www.gossamer-threads.com/lists/apache/users/420868
> The error is that the OpenSSL library you have built has not been
> built with PIC. Rebuild it with PIC so that it can be linked to a
> dynamically loaded module (mod_ssl.so).
>
> The reason OpenSSL was not built with PIC is that you did not compile
> shared libraries for OpenSSL - you only created static libraries.
> OpenSSL compiles with PIC iff you enable shared libraries.
>
> So, rebuild OpenSSL, this time passing '--enable-shared' to the
> configure script (or whatever the appropriate flag is).
5.3
Options for support programs
6、
编译安装httpd
6.1
cd /decompress/apache/httpd-2.4.9/
./configure --with-included-apr --with-pcre=/usr/local/pcre --with-ssl=/usr/local/ssl --enable-maintainer-mode --with-mpm=worker --enable-mods-shared=most
make
make check
make install
cd /usr/local/apache2/bin
apachectl -k start
apachectl -k stop
7
启动的时候报:httpd: Could not reliably determine the server's fully qualified domain name, using localhost.localdomain for ServerName
解决方案参照:
http://stackoverflow.com/questions/9541460/httpd-could-not-reliably-determine-the-servers-fully-qualified-domain-name-us
假设我的服务器是myserver.myhome.com和ip192.168.1.170
1 Edit network //这里hostname 是什么名字后面都跟着变
$ sudo nano -w /etc/sysconfig/network HOSTNAME=myserver.myhome.com
假设我的服务器是myserver.myhome.com和ip192.168.1.170
1 Edit network //这里hostname 是什么名字后面都跟着变
$ sudo nano -w /etc/sysconfig/network HOSTNAME=myserver.myhome.com
2 Edit Hosts File // dns解析ip和hostname 添加myserver.myhome.com信息 (对应关系 ip 主机名.域名 主机名(别名))
$ sudo nano -w /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.1.170 myserver.myhome.com myserver //实测之追加这一条以下2条不加也成功了
127.0.0.1 myserver.myhome.com myserver
::1 myserver.myhome.com myserver
3 Edit httpd.conf
$ sudo nano -w /etc/apache2/httpd.conf
ServerName myserver.myhome.com (这里我改成了ServerName myserver.myhome.com:80)80应该是默认端口不加也可以不过我加了
4 Verify
$ hostname
(output) myserver.myhome.com
$ hostname -f //(可以试下hostname -s hostname -i hostname -a)(短名称,ip,别名)
(output) myserver.myhome.com
5 Restart Apache
$ sudo /etc/init.d/apache2 restartIt
appeared the difference was including myserver.myhome.com to both the 127.0.0.1 as well as the
staic ip 192.168.1.170 in the hosts file. Same in Ubuntu Server and CentOSHope that lays it out a bit
in one post for the next surfer. Thank you to all the Guru's in here.