编译安装httpd2.4
1,准备安装环境
开发包组
yum groupinstall Development tools
yum groupinstall Server Platform Development

编译apache依赖的包
# yum install pcre-devel -y

还有apr 和apr-util要新版的如果有就yum安装没有就源码安装
apr-1.5.0.tar.bz2
apr-util-1.5.3.tar.bz2
源码安装
# tar -xf apr-1.5.0.tar.bz2 -C /usr/local/src/
# tar -xf apr-util-1.5.3.tar.bz2 -C /usr/local/src/
进入解压后的目录执行安装
先安装apr
# ./configure --prefix=/usr/local/apr/
# make
# make install
再安装apr-util
# ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr
# make
# make install

2, 安装httpd2.4
解压
# tar -xf httpd-2.4.9.tar.bz2 -C /usr/local/src
查看帮助
./configure --help
执行./configure
# ./configure --prefix=/usr/local/apache --sysconfdir=/etc/httpd2.4/
--enable-so --enable-cgi --enable-rewrite --enable-ssl --with-zlib
--with-pcre --enable-modules=most --enable-mpms-shared=all --with-mpm=event
--with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util/

--enable-so 支持动态加载模块
--enable-ssl 支持https
--enable-cgi 支持cgi脚本执行
--enable-rewrite 支持url重写
--with-zilb 压缩库的API
--with-pcre 支持正则表达式
--enable-mpms-shared=all 编译全部的mpm
--enable-mpms=event 默认的mpm为event
--enable-modules=most 支持大多数常用的模块

# make && make install

3, 输出命令
# vim /etc/profile.d/httpd.sh
写入
export PATH=/usr/local/apache/bin:$PATH
编译安装httpd2.4_httpd2.4.9然后 执行
# . /etc/profile.d/httpd.sh
让配置生效

5, 导入man页
# vim /etc/man.config
写入
MANPATH /usr/local/apache/man
编译安装httpd2.4_httpd2.4.9_02

6,输出头文件
# ln -sv /usr/local/apache/include/ /usr/include/httpdl

7,测试启动
# apachectl start

配置站点发布目录为/www/htdocs/
创建目录
# mkdir -pv /www/htdocs
编辑主配置文件
# vim httpd.conf
DcoumentRoot "/www/htdocs/"

添加httpd用户
# useradd -r httpd -s /sbin/nologin
编辑主配置文件
# vim httpd.conf
User httpd
Group httpd

8,配置虚拟主机
8.1 注释掉主配置文件的“DocumentRoot”
#
#DocumentRoot "/www/htdocs"
编译安装httpd2.4_httpd2.4.9_038.2启用虚拟主机
# Virtual hosts
Include /etc/httpd2.4//extra/httpd-vhosts.conf

8.3编辑虚拟主机配置文件

编译安装httpd2.4_httpd2.4.9_04


为各虚拟主机创建DocumentRoot
mkdir -pv /www/htdocs/{net,org}
创建主页
echo "<html><body><h1> org It works !</h1></body></html>" > /www/htdocs/org/index.html
echo "<html><body><h1> net It works !</h1></body></html>" > /www/htdocs/net/index.html
在浏览器测试先修改hosts文件
C:\Windows\System32\drivers\etc\hosts

编译安装httpd2.4_httpd2.4.9_05
重启服务
# apachectl restart
测试

编译安装httpd2.4_httpd2.4.9_06

编译安装httpd2.4_httpd2.4.9_07
9,配置https
自建CA
cd /etc/pki/CA
准备文件
# touch index.txt crlnumber serial
生成私钥
# openssl genrsa -out private/cakey.pem
生成证书
# openssl req -new -x509 -key private/cakey.pem -out cacert.pem

为httpd创建私钥
cd /etc/httpd2.4/
# openssl genrsa -out httpd.key
生成证书签署请求
# openssl req -new  -key httpd.key -out httpd.csr
签证书
# openssl ca -in httpd.csr -out httpd.crt

修改httpd主配置文件启用ssl
# Secure (SSL/TLS) connections
Include /etc/httpd2.4//extra/httpd-ssl.conf

编译安装httpd2.4_httpd2.4.9_08
编辑httpd-ssl.conf
SSLCertificateFile "/etc/httpd2.4//httpd.crt"
SSLCertificateKeyFile "/etc/httpd2.4//httpd.key"
DocumentRoot "/www/htdocs/ssl"

mkdir /www/htdocs/ssl
echo "<html><body><h1> ssl It works !</h1></body></html>" > /www/htdocs/net/index.html
修改C:\Windows\System32\drivers\etc\hosts
写入192.168.100.9 www.ssl.org
导入CA证书给浏览器cacert.pem
测试

编译安装httpd2.4_httpd2.4.9_09
10,配置目录认证
# vim /etc/httpd2.4/extra/httpd-ssl.conf
编译安装httpd2.4_httpd2.4.9_10<Directory "/www/htdocs/ssl/home">
   Options None
   Allowoverride Authconfig
   AuthName "root home"
   AuthType Basic
   AuthUserfile /etc/httpd2.4/.passwd
   Require valid-user

</Directory>

准备密码文件
# htpasswd -c -m /etc/httpd2.4/.passwd xy
重启服务

测试

编译安装httpd2.4_httpd2.4.9_11

编译安装httpd2.4_httpd2.4.9_12


11,配置服务器状态说明页
编辑主配置文件
启用模块和配置文件
LoadModule status_module modules/mod_status.so
# Real-time info on requests and configuration
Include /etc/httpd2.4//extra/httpd-info.conf

# vim /etc/httpd2.4//extra/httpd-info.conf
<Location /server-status>
   SetHandler server-status
   Require host .example.com
   Require ip 192.168.100.100
</Location>
ExtendedStatus On

测试

编译安装httpd2.4_httpd2.4.9_13
12,配置cgi
加载cgi模块支持
创建目录
mkdir /www/htdocs/cgi-bin/
编辑配置文件
定义cgi别名:ScriptAlias /cgi-bin/ "/www/htdocs/cgi-bin/"
定义目录属性:
<Directory "/www/htdocs/cgi-bin/">
   AllowOverride None
   Options ExecCgi
   Require all granted
</Directory>
编译安装httpd2.4_httpd2.4.9_14准备测试文件
# cp /usr/local/apache/cgi-bin/test-cgi.sh /www/htdocs/cgi-bin/
写入#!/bin/bash

编译安装httpd2.4_httpd2.4.9_15
重启服务测试


编译安装httpd2.4_httpd2.4.9_16
13,配置启用event
编辑主配置文件
# vim httpd.conf
LoadModule mpm_event_module modules/mod_mpm_event.so
启用下面一项
# Server-pool management (MPM specific)
Include /etc/httpd2.4//extra/httpd-mpm.conf
编译安装httpd2.4_httpd2.4.9_17编辑配置文件
# vim /etc/httpd2.4/extra/httpd-mpm.conf
<IfModule mpm_event_module>
   StartServers             3  /*启动进程数*/
   MinSpareThreads         75  /*最小空闲线程数*/
   MaxSpareThreads        250  /*最大空闲线程数*/
   ThreadsPerChild         25  /*单进程可生成多少线程*/
   MaxRequestWorkers      400  /*最大并发请求数*/
   MaxConnectionsPerChild   0  /*进程生命周期*/
</IfModule>
apache 三种工作模式
prefiork:由root启动一个httpd父进程监听在80端口,由此父进程生成多个子进程响应用户请求
        各个子进程独立存在。
        优点:由于进程独立存在,所以一个进程崩溃不会影响其他进程,较稳定
        缺点:由于每个进程只响应一个请求,资源占用比较高。
worker :由root启动一个httpd父进程监听在80端口,由此父进程生成多个子进程(这些
        子进程并不工作),当有用户请求时由子进程生成多个线程,一个线程响应一个请求
        优点:由于线程可共享资源,所以资源占用较低。
        缺点:线程之间影响,稳定性较低,线程之间需要切换。而且生成线程的进程并不提供服务
                所以并不能提高多少效率
event :由root启动一个httpd父进程监听在80端口,由此父进程生成多个线程
       一个线程响应多个请求。线程之间不需要切换,提高了效率,而且节约了资源
       线程之间影响


14,配置压缩

编辑主配置文件
加载模块
LoadModule deflate_module modules/mod_deflate.so

在配置文件最后一行有
Setoutputfilter DEFLATE
AddOutputFilterByType DEFLATE text/html

AddOutputFilterByType DEFLATE text/css

AddOutputFilterByType DEFLATE text/xml

AddOutputFilterByType DEFLATE text/plain

AddOutputFilterByType DEFLATE application/xml
AddOutputFilterByType DEFLATE application/x-javascript
AddOutputFilterByType DEFLATE text/javascript
DeflateCompressionLevel 6 (压缩等级)