apache 负载均衡http 配置
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>
配置mod_cluster 模块
- linux-x86_64 mod_cluster binaries,一组httpd的so模块,下载后得到压缩包mod_cluster-1.2.6.Final-linux2-x64-so.tar.gz,只包含mod_advertise.so, mod_manager.so, mod_proxy_cluster.so, mod_slotmem.so 四个so文件,还需要单独安装httpd
- linux-x86_64 httpd binaries,一个已内置mod_cluster的httpd,下载后得到压缩包mod_cluster-1.2.6.Final-linux2-x64.tar.gz,解压后会得到一个安装配置完成的httpd位于opt/jboss目录下,不需要再单独安装httpd
直接下载so模块(版本有问题)
wget https://ghproxy.com/https://github.com/modcluster/mod_cluster/releases/download/1.3.1.Final/mod_cluster-1.3.1.Final-linux2-x64-so.tar.gz
解压缩后拷贝到 /usr/local/apache/modules下
[root@apache mod_cluster-1.3.1]# tar -zxvf mod_cluster-1.3.1.Final-linux2-x64-so.tar.gz /bin/cp *.so /usr/local/apache/modules/
重启apache
./apachectl restart