首页 » WebServer - Apache

安装Apache

Apache的编译选项:

--enable-so
开启动态库加载支持。
--enable-ssl
开启HTTPS支持。Apache 2.x开始源码包中已携带mod_ssl,不需要单独安装,只需在configure时添加--enable-ssl参数即可(注意系统需要有OpenSSL的开发包,如果没有,可以通过命名yum install openssl-devel安装)。如果--enable-ssl报错如:undefined reference to ap_thread_stacksize,可以尝试make distclean,然后再次configure。
--enable-rewrite
开启Rewrite模块。
--with-mpm=worker
mpm(Multi Process Module),默认是prefork,建议使用默认工作方式。

Apache安装完毕后的检查

查看Apache的安装目录:

$ ls ~/tools/apache-2.4.3/
bin  build  cgi-bin  conf  error  htdocs  icons  include  logs  man  manual  modules

首先需要关注conf配置文件目录。conf/httpd.conf是Apache主要的配置文件。

bin目录

bin中是一系列的可执行文件。常用的Apache二进制文件包括:

apachectl
Apache服务的控制工具,用它执行启动、暂停、重启等操作。
httpd
Apache服务的主程序,通常通过apachectl来调用httpd,而不是直接调用。
apxs
安装Apache模块的工具。
htcacheclean
清除Apache缓存。
rotatelogs
切换日志工具。

logs目录

logs是日志文件目录。包括正常访问日志(access_log)、错误日志(error_log)、pid文件(httpd.pid)、SSH访问日志(ssl_request_log):

$ ls logs
access_log  error_log  httpd.pid  ssl_request_log

modules目录

modules是Apache的模块文件(多为.so共享文件)。

手工编译Apache模块。找到Apache模块路径,使用apxs(APache eXtenSion tool)编译Apache扩展模块。Apache模块路径在:download/httpd-x.x.x/modules 中,有几个类别。需要安装模块时find一下再用apxs安装即可。通常使用如下命令编译Apache模块:

$ apxs -cia mod_deflate.c
c
编译
i
安装。将.so文件放入Apache可以找到的位置(即modules目录)。
a
启动。将模块加入httpd.conf中。

其他目录

htdocs是默认的网站根目录。

运行Apache

启动Apache

# apachectl start

查看Apache加载了哪些模块

$ apachectl -D DUMP_MODULES

重启/关闭Apache

# apachectl restart
# apachectl stop

安装完成Apache后,如果网站支持PHP,且默认访问页面为index.php,应该修改配置:

<IfModule dir_module>
    DirectoryIndex index.html index.php
</IfModule>

如果没有index.html/index.php,Apache可能把网站根目录下的所有文件/目录都列出来了,要拒绝列出文件/目录,把下面这行注释掉:

Options Indexes FollowSymLinks

CentOS 6.2 64bits平台编译Apache 2.4.3版本

Apache 2.4.3依赖几个软件包:apr、apr-util、pcre(支持正则表达式),需要先编译这些软件包。写了个简单的编译脚本(详细过程参考这里):

#!/bin/bash

INST=/home/bailing/tools
APR=$INST/apr-1.4.6
APRUTIL=$INST/apr-util-1.5.1
PCRE=$INST/pcre-8.31
./configure --prefix=$INST/apache-2.4.3 --enable-ssl --enable-so --enable-rewrite --with-apr=$APR --with-apr-util=$APRUTIL --with-pcre=$PCRE

Apache使用笔记

启用gzip压缩

在httpd.conf中添加以下配置:

SetOutputFilter DEFLATE
AddOutputFilterByType DEFLATE text/html text/css text/plain text/xml application/x-javascript application/x-httpd-php
BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4\.0[678] no-gzip
BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
BrowserMatch \bMSI[E] !no-gzip !gzip-only-text/html
SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$ no-gzip
Header append Vary User-Agent env=!dont-vary

注意,一定要先安装了deflate和headers模块

download/httpd-2.2.21/modules/filters/mod_deflate.c 
download/httpd-2.2.21/modules/metadata/mod_headers.c

这里涉及到的配置命令:

Invalid command 'Header', perhaps misspelled or defined by a module not included in the server configuration

在启用Apache压缩时,有一行配置命令如下:

Header append Vary User-Agent env=!dont-vary

重启Apache(apachectl restart)时报错:

Invalid command 'Header', perhaps misspelled or defined by a module not included in the server configuration

这个错误是由于没有加载mod_headers模块所致。回到Apache的下载路径,安装模块:

$ cd download/httpd-2.2.19/modules/metadata
$ apxs -cia mod_headers.c

安装完成后,检查httpd.conf文件,多了一行:

LoadModule headers_module     modules/mod_headers.so

再次重启Apache,没有问题。

Apache版本变迁

Apache 2.4.3

NameVirtualHost指令不再推荐使用:

AH00548: NameVirtualHost has no effect and will be removed in the next release

分享

0