apache安装

yum  install   gcc  gcc-c++ make cmake git wget  zip  unzip  bzip2 zlib-devel
Linux中安装Apache 编译出现问题:

解决办法:

1、下载所需要的软件包

wget http://archive.apache.org/dist/apr/apr-1.4.5.tar.gz
wget http://archive.apache.org/dist/apr/apr-util-1.3.12.tar.gz
wget http://jaist.dl.sourceforge.net/project/pcre/pcre/8.10/pcre-8.10.zip

3、解决APR not found报错
tar -zxf apr-1.4.5.tar.gz
cd apr-1.4.5
./configure --prefix=/usr/local/apr
make && make install
4、解决APR-util not found问题
tar -zxf apr-util-1.3.12.tar.gz
cd apr-util-1.3.12
./configure --prefix=/usr/local/apr-util -with-apr=/usr/local/apr/bin/apr-1-config
make && make install
5、解决pcre问题
unzip -o pcre-8.10.zip
cd pcre-8.10
./configure --prefix=/usr/local/pcre
make && make install
6、最后编译加上
./configure --prefix=/usr/local/apache/ --enable-deflate --enable-expires \
--enable-headers --enable-modules=most \
--enable-so --with-apr=/usr/local/apr/ --with-apr-util=/usr/local/apr-util/ --with-pcre=/usr/local/pcre/bin/pcre-config --with-mpn=worker \
--enable-rewrite && make && make install

--enable-deflate 提供对内容的压缩传输编码的支持(html js css) 提高传输速率,
--enable-expires 激活允许通过配置文件控制http 的'expires' 和 'cache-control' 头内容
--enable-headers 提供允许对http请求头的控制
--enable-modules=most 激活大多数的模块
--enable-so 让apapche可以支持大多数模块
--with-mpm=worker 工作在具备的两种模式 worker/prefork
--enable-rewrite 开启url重写

useradd -M -s /sbin/nologin apache


apache 配置

apache 虚拟主机, 反向代理以及负载均衡功能的实现

虚拟主机
#virtual hosts
Include conf/extra/httpd-vhosts.conf

<VirtualHost *:80>
Serveradmin xxxxxx
DocumentRoot /webdata/www1
ServerName www.www1.com
ErrorLog logs/error_log
CustomLog logs/access_log common
<Directory "/webdata/www1">
Options None
AllowOverride None
Require all granted
</Directory>
</VirtualHost>

<VirtualHost *:80>
Serveradmin xxxxxx
DocumentRoot /webdata/www2
ServerName www.www2.com
ErrorLog logs/error_log
CustomLog logs/access_log common
<Directory "/webdata/www2">
Options Indexes FollowSymLinks #列出所有文件, 不建议使用,会暴露目录所有内容
AllowOverride None
Require all granted
</Directory>
</VirtualHost>


<VirtualHost *:80>
Serveradmin xxxxxx
DocumentRoot /webdata/www3 #就访问不到
ServerName www.www3.com
ErrorLog logs/error_log
CustomLog logs/access_log common
</VirtualHost>


反向代理以及负载均衡功能的实现

要使用反向搭理功能, 首先需要动态开启apache的代理模块, 找到apache的配置文件httpd.conf, 添加如下模块到配置文件
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
LoadModule slotmem_shm_module modules/mod_slotmem_shm.so
可鞥还需要开启如下模块, 后面会用到

LoadModule lbmethod_byrequests_module modules/mod_lbmethod_byrequests.so
LoadModule lbmethod_bytraffic_module modules/mod_lbmethod_bytraffic.so
LoadModule lbmethod_bybusyness_module modules/mod_lbmethod_bybusyness.so


1. ProxyPass 指令
ProxyPass 指令用法如下:
ProxyPass [path] !|url
path参数为本地主机的url 路径, url 参数为代理的后端服务器的url的一部分, 不能包含查询参数, proxypass指令用于映射请求到后端服务器,
它主要是用作url前缀匹配, 不能有正则表达式, 它里面配置的path 实际上是一个虚拟的路径, 在反向代理到后端url后, path是不会带过去的.
最简单的代理示例是对所欧请求"/" 都映射到一个后端服务器上,
ProxyPass "/" "http://www.abc.com"

要在特定的url进行代理, 其它的所有请求都在本地处理, 可以配置如下:
ProxyPass "/images" "http://www.abc.com"
这个配置说明只有 /images 开头的路径才会代理转发, 假定访问的域名为 http://www.example.com, 当客户端请求 http://www.example.com/images/server.git
这个url后, /images这个路径没有带过去,

ProxyPass / image/ !
表示 /images/请求不被转发

2. ProxyPassReverse指令
此指令一般和proxypass 指令搭配使用, 此指令可使用 apache 调整http重定向应答中URL头里的url, 通过此指令, 可以避免在apache作为反向代理使用时后端服务器
的http 重定向造成绕过反向代理的问题,
ProxyPass /example http://www.abc.com
ProxyPassReverse /example http://www.abc.com

3. ProxyPassMatch 指令
此指令实际上是正则匹配模式的proxypass, 是基于URL的正则匹配, 而匹配上的规则部分是会带到后端的URL的,
ProxyPassMatch ^/images !
表示对/images的请求, 都不会被转发

ProxyPassMatch ^(/.*.gif) http://www.static.com/$1
表示对所有gif图片的请求, 都会转到后端服务器, 假定访问的域名为www.abc.com 当有如下访问请求时:
http://www.abc.com/img/abc.gif ,那么法相代理将会转换为下面的内部请求地址:
http://www.static.com/img/abc.gif

<VirtualHost *:80>
Serveradmin xxxxxx
DocumentRoot /webdata/www2
ServerName www.www2.com
ErrorLog logs/error_log
CustomLog logs/access_log common
<Directory "/webdata/www2">
Options Indexes FollowSymLinks #列出所有文件, 不建议使用,会暴露目录所有内容
AllowOverride None
Require all granted
</Directory>
</VirtualHost>

ProxyPass /a/b/c http://192.168.62.168
ProxyPassReverse /a/b/c/ http://192.168.62.168


负载均衡
apache 支持创建一个后端服务器节点组, 通过反向代理进行引用, 实现负载均衡功能,
<Proxy balancer://myserver>
BalancerMember http://1.1.1.1
BalancerMember http://2.2.2.2
ProxySet lbmethod=byrequests
</Proxy>

ProxyPass "/img" "balancer://myserver/img"
ProxyPassReverse "/img" "balancer://myserver/img"

httpd 有3种负载均衡算法,分别是
byrequests: 默认, 基于请求数量计算权重
bytraffic: 基于I/O流量大小计算权重
bybusyness: 基于挂起的请求(排队暂未处理) 数量计算权重

<Proxy balancer://myserver>
BalancerMember http://1.1.1.1
BalancerMember http://2.2.2.2 loadfactor=3 timeout=1
ProxySet lbmethod=byrequests
</Proxy>

ProxyPass "/img" "balancer://myserver/img"
ProxyPassReverse "/img" "balancer://myserver/img"

参数 loadfactor 表示apache 发送请求到后端服务器的权重,默认为1, 可以将该值设置为1 到100之间, 值越大,权重越高
才是 timeout 表示等待后端节点返回数据的超时时间, 单位为秒


在使用了apache负载均衡后,查看负载状态, apache提供了负载均衡状态显示页面.在httpd.conf 添加
<Location "/lbstatus">
SetHandler balancer-manager
Require hosts localhost
Require ip 172.16.230.120
</Location>