Httpd Nginx Haproxy反向代理
Apache反向代理
部署httpd反向代理
准备工作:
三台虚拟机Ip地址分配:
linux-node1:192.168.1.5 (源码编译httpd,并且配置proxy用于代理后端的httpd服务)
node1:192.168.1.3
node2:192.168.1.4
node1,node2主机分别安装httpd服务
# yum install -y httpd
编辑node1,node2节点上的httpd.conf配置文件
# vim /etc/httpd/conf/httpd.conf
修改监听端口号为8080,用于linux-node1的代理转发
Listen 8080
分别在node1,node2节点上执行
# echo "node1" >> /var/www/html/index.html
# echo "node2" >> /var/www/html/index.html
启动httpd服务
#systemctl start httpd.service
linux-node1主机上的操作如下:
安装所需要的依赖关系,httpd的运行环境
# yum install -y apr-devel apr-util-devel pcre-devel openssl-devel
下载httpd的源码安装包
# cd /usr/local/src && wget -c http://apache.fayea.com//httpd/httpd-2.4.25.tar.bz2
解压httpd的tar包
# tar -jxvf httpd-2.4.25.tar.bz2
切换到解压目录
# cd httpd-2.4.25/
指定httpd的安装目录并监测编译环境
# ./configure --prefix=/usr/local/httpd-2.4.25 --enable-so --enable-modules="all"
源码编译安装httpd
# make -j 2 && make install
软连接httpd2.4.25到/usr/local/httpd
# ln -sv /usr/local/httpd-2.4.25/ /usr/local/httpd
启动httpd服务
# /usr/local/httpd/bin/httpd -k start
httpd中的mod_proxy官方文档
http://httpd.apache.org/docs/current/mod/mod_proxy.html
切换到源码编译的conf配置文件目录下
# cd /usr/local/httpd/conf/
备份配置文件
# cp httpd.conf httpd.conf.bak
httpd2.2 proxy的中文参考文档
http://www.jinbuguo.com/apache/menu22/mod/mod_proxy.html
创建proxy的配置文件
# vim /usr/local/httpd/conf/extra/httpd-proxy.conf
添加如下内容
#www.linux-node1.com proxy demo
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_connect_module modules/mod_proxy_connect.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so
LoadModule proxy_balancer_module modules/mod_proxy_balancer.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
LoadModule slotmem_shm_module modules/mod_slotmem_shm.so
ProxyRequests Off
<Proxy balancer://mycluster>
BalancerMember http://192.168.1.3:8080
BalancerMember http://192.168.1.4:8080
</Proxy>
ProxyPass /demo balancer://mycluster
ProxyPassReverse /demo balancer://mycluster
<Location /manager>
SetHandler balancer-manager
Order Deny,Allow
Allow from all
</Location>
编辑配置httpd.conf配置文件,取消注释并添加haproxy的配置文件
ServerName linux-node1.com:80
LoadModule socache_shmcb_module modules/mod_socache_shmcb.so
#haproxy demo
Include conf/extra/httpd-proxy.conf
检查下配置文件中语法是否正确
# /usr/local/httpd/bin/apachectl -t
启动httpd服务
# /usr/local/httpd/bin/httpd -k start
查看代理效果,浏览器输入
http://192.168.1.5/demo
proxy代理demo访问的效果图
修改hosts文件
# vim /etc/hosts
添加短域名和长域名解析
192.168.1.5 linux-node1.com www.linux-node1.com
设置访问虚拟主机的代理服务
# vim /usr/local/httpd/conf/extra/httpd-proxy.conf
全部修改为如下内容
#www.linux-node1.com proxy demo
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_connect_module modules/mod_proxy_connect.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so
LoadModule proxy_balancer_module modules/mod_proxy_balancer.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
LoadModule slotmem_shm_module modules/mod_slotmem_shm.so
ProxyRequests Off
<Proxy balancer://mycluster>
BalancerMember http://192.168.1.3:8080
BalancerMember http://192.168.1.4:8080
</Proxy>
<Location /manager>
SetHandler balancer-manager
Order Deny,Allow
Allow from all
</Location>
<VirtualHost *:80>
ServerAdmin webmaster@linux-node1.com
DocumentRoot "/usr/local/httpd-2.4.25/htdocs/"
ServerName www.linux-node1.com
ServerAlias linux-node1.com
ErrorLog "logs/www.linux-node1.com-error_log"
CustomLog "logs/www.linux-node1.com-access_log" common
ProxyPass / balancer://mycluster
ProxyPassReverse / balancer://mycluster
</VirtualHost>
检测配置文件
# /usr/local/httpd-2.4.25/bin/httpd -t
重启httpd服务
# /usr/local/httpd-2.4.25/bin/httpd -k graceful
代理虚拟主机的效果如下
Nginx反向代理
部署Nginx反向代理
准备工作:
三台虚拟机Ip地址分配:
linux-node1:192.168.1.5 (源码编译nginx,并且配置proxy用于代理后端的httpd服务)
node1:192.168.1.3
node2:192.168.1.4
分别在node1,node2节点上安装nginx服务
# yum -y install nginx
修改nginx的配置文件
# vim /etc/nginx/nginx.conf
修改server端中的监听端口为8080,用于反向代理
listen 8080 default_server;
listen [::]:8080 default_server;
检测配置文件是否正确
# nginx -t
分别在node1,node2节点上重定下输出,用于测试
# echo "node1" >> /usr/share/nginx/html/index.html
# echo "node2" >> /usr/share/nginx/html/index.html
分别启动node1,node2节点上的nginx服务
# systemctl start nginx.service
以下为linux-node1上的操作
nginx反向代理的官网文档
http://nginx.org/en/docs/http/load_balancing.html
安装部署准备工作
关闭httpd,如果有nginx的,请先关闭nginx
添加www用户,用于给nginx服务器运行使用
# useradd -s /sbin/nologin -M www
下载nginx稳定版的源码编译包
# cd /usr/src/ && wget http://nginx.org/download/nginx-1.12.0.tar.gz
解压缩nginx的压缩包
# tar -zxvf nginx-1.12.0.tar.gz
进入到nginx的解压目录
# cd nginx-1.12.0/
监测nginx的安装环境
# ./configure --prefix=/usr/local/nginx-1.12.0 --user=www --group=www --with-http_ssl_module --with-http_stub_status_module --with-file-aio
编译安装nginx
# make -j 2 && make install
最佳实现方式,创建软连接
# ln -sv /usr/local/nginx-1.12.0/ /usr/local/nginx
编辑nginx.conf配置文件
# vim /usr/local/nginx-1.12.0/conf/nginx.conf
在nginx.conf的配置文件中的http段中添加如下内容
upstream backend {
server 192.168.1.3:8080 weight=1 max_fails=3 fail_timeout=30s;
server 192.168.1.4:8080 weight=2 max_fails=3 fail_timeout=30s;
}
在nginx.conf的配置文件中的server段中的location添加如下内容
location / {
root html;
index index.html index.htm;
proxy_pass http://backend;
}
检查nginx.conf的配置文件语法
# /usr/local/nginx-1.12.0/sbin/nginx -t
启动ngxin服务
# /usr/local/nginx-1.12.0/sbin/nginx
验证proxy代理,浏览器输入
http://192.168.1.5
Nginx的proxy效果
nginx的一些特性
优点:
- web服务器,使用较为广泛,大家都会用
- 工作在7层的服务,Loacltion设置复杂的基于HTTP的负载均衡
- 性能强大,网络依赖小,可以解决C10K的问题
- 安装配置简单
- 支持热启动
缺点:
- 健康检擦单一
- 负载均衡算法少
- 不能动态管理
- 没有集群upstream的状态页面
haproxy:
优点:
- 专门做反响代理负载均衡
- 负载均衡算法 >= 8
- 性能 >= nginx
- 支持动态管理,通过和Haproxy的socket进行通信,可以进行管理
- 有比较丰富得dashboard页面
- 比较强大的七层功能
缺点:
- 配置没有nginx简单
LVS+Haproxy+Nginx
LVS+Nginx
Haproxy反向代理
部署haproxy代理
准备工作:
五台虚拟机Ip地址分配
linux-node1:192.168.1.5 (编译安装haproxy,nginx并且监听在80端口,forntend)
linux-node1:192.168.1.3 (安装nginx,监听8080端口,backend)
linux-node2:192.168.1.4 (安装nginx,监听8080端口,backend)
linux-node3:192.168.1.120 (安装nginx,监听8080端口,backend)
linux-node4:192.168.1.121 (安装nginx,监听8080端口,backend)
以下操作都在192.168.1.5上操作
下载haporxy1.7.5最新稳定版
链接:http://pan.baidu.com/s/1c1Ue1Ni 密码:dxsf
haproxy的安装包下载到/usr/local/src/下
解压haproxy
# tar -zxvf haproxy-1.7.5.tar.gz
进入到haproxy目录
# cd haproxy-1.7.5/
检查编译环境
# make TARGET=linux2628 PREFIX=/usr/local/haproxy-1.7.5
执行编译安装
# make install
注:
编译安装的haproxy的启动命令默认安装到了/usr/local/sbin下
把haproxy拷贝一份到/usr/sbin下,haproxy的脚本中指定了/usr/sbin目录,避免日后的麻烦,so...你懂的
# cp /usr/local/sbin/haproxy /usr/sbin
监测haproxy的版本,以确定能正常使用
# haproxy -v
HA-Proxy version 1.7.5 2017/04/03
Copyright 2000-2017 Willy Tarreau <willy@haproxy.org>
复制启动脚本
# cp /usr/local/src/haproxy-1.7.5/examples/haproxy.init /etc/init.d/haproxy
给haproxy的启动脚本加执行权限
# chmod +x /etc/init.d/haproxy
添加haproxy的系统用户
# useradd -r haproxy
创建haproxy的配置文件目录
# mkdir /etc/haproxy
创建启动haproxy的虚拟根目录
# mkdir /var/lib/haproxy
设置rsyslog.conf的配置文件
# vim /etc/rsyslog.conf
开启如下内容
$ModLoad imudp
$UDPServerRun 514
在添加# Save boot messages also to boot.log段中添加
local3.* /var/log/haproxy.log
重启rsyslog服务
# systemctl restart rsyslog
官方权威文档
http://www.haproxy.org/download/1.7/doc/configuration.txt
创建haproxy.cfg配置文件
# vim /etc/haproxy/haproxy.cfg
添加如下内容
global
log 127.0.0.1 local3 info
chroot /var/lib/haproxy
user haproxy
group haproxy
daemon
defaults
log global
mode http
option httplog
option dontlognull
timeout connect 5000
timeout client 50000
timeout server 50000
frontend www_demon_com
bind *:80
stats uri /haproxy?stats
default_backend www_demon_com_backend
backend www_demon_com_backend
#source cookie SERVERID
option forwardfor header X-REAL-IP
option httpchk GET /index.html
balance roundrobin
server linux-node1 192.168.1.120:8080 check inter 2000 rise 3 fall 3 weight 2
server linux-node2 192.168.1.121:8080 check inter 2000 rise 3 fall 3 weight 1
注意:
option httplog 记录http请求的日志信息
option dontlognull 不记录空请求日志信息
check inter 2000 健康检查时间2s
rise 3 重试3次
fall 3 失败3次
weight 2 权重 (性能好的服务器,可以给的值大一些,这样调度的时候,会把更多的请求分配到这台节点服务器)
option httpchk GET /index.html 健康检查
启动haproxy服务
# /etc/init.d/haproxy start
查看haproxy.log的日志
# tail -f /var/log/haproxy.log
浏览器查看haproxy的状况
http://192.168.1.5/haproxy?stats
看下haproxy的效果
如何在七层设置haproxy
在192.168.1.5的haproxy的节点上配置如下信息
编辑haproxy.cfg的配置文件,用于根据url中正则匹配代理到后端服务器中
# vim /etc/haproxy/haproxy.cfg
添加如下内容
global
log 127.0.0.1 local3 info
chroot /var/lib/haproxy
user haproxy
group haproxy
daemon
stats socket /var/lib/haproxy/haproxy.sock mode 600 level admin
stats timeout 2m
defaults
log global
mode http
option httplog
option dontlognull
timeout connect 5000
timeout client 50000
timeout server 5000
frontend www_demon_com
mode http
bind *:80
stats uri /haproxy?stats
default_backend www_demon_com_backend
#acl is_other_demon_com hdr_end(host) other.demon.com
#use_backend other_www_demon_com_backend if is_other_demon_com
acl is_static_reg url_reg /*.(css|jpg|png|js|jpeg|giz|zip)$
#acl is_static_path path_end .gif .png .js
use_backend other_www_demon_com_backend if is_static_reg
backend www_demon_com_backend
#source cookie SERVERID
option forwardfor header X-REAL-IP
option httpchk GET /index.html
balance roundrobin
server linux-node1 192.168.1.3:8080 check inter 2000 rise 3 fall 3 weight 2
#server linux-node2 192.168.1.4:8080 check inter 2000 rise 3 fall 3 weight 1
backend other_www_demon_com_backend
#source cookie SERVERID
option forwardfor header X-REAL-IP
option httpchk GET /index.html
balance roundrobin
#server linux-node1 192.168.1.3:8080 check inter 2000 rise 3 fall 3 weight 2
server linux-node2 192.168.1.4:8080 check inter 2000 rise 3 fall 3 weight 1
注意:
acl 后面的名称用于判断判断后端代理集群组名称的
option httplog 生产环境中的http的日志请求可以关闭,关闭以后,只会记录访问ip:port以及haproxy的前端名称
在linux-node2(192.168.1.4)节点上通过重定向的方式生成js文件用于测试
# echo "hello" > /usr/share/nginx/html/hello.js
演示代理效果,当有js为后缀名称的访问都会代理到192.168.1.4的节点上,上,其他的请求都会到192.168.1.3的节点上
使用socat查看haproxy的监控状态
安装socat
# yum install -y socat
使用socat查看haproxy的监控状态
# echo "show info" | socat stdio /var/lib/haproxy/haproxy.sock
利用socat关闭linux-node1节点,需要告诉他在后端的哪个集群组中(www_demon_com_backend)
# echo "disable server www_demon_com_backend/linux-node1 " | socat stdio /var/lib/haproxy/haproxy.sock
再次开启linux-node1节点
# echo "enable server www_demon_com_backend/linux-node1 " | socat stdio /var/lib/haproxy/haproxy.sock
Httpd Nginx Haproxy反向代理的更多相关文章
- Nginx、haproxy反向代理设置
Nginx反向代理配置: #user nobody; worker_processes ; events { worker_connections ; } http { include mime.ty ...
- Nginx 笔记与总结(15)nginx 实现反向代理 ( nginx + apache 动静分离)
在 nginx 中,proxy 用来实现反向代理,upstream 用来实现负载均衡. 例如有两台服务器,nginx 服务器作为代理服务器,执行 .html 文件,apache 服务器上执行 .php ...
- nginx的反向代理功能和缓存功能
html { font-family: sans-serif } body { margin: 0 } article,aside,details,figcaption,figure,footer,h ...
- haproxy反向代理配置示例
*/ .hljs { display: block; overflow-x: auto; padding: 0.5em; color: #333; background: #f8f8f8; } .hl ...
- NGINX如何反向代理Tomcat并且实现Session保持
简介 LNMT=Linux+Nginx+MySQL+Tomcat: Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器: 在中小型系统和并发访问用户不是很多的场合下被 ...
- Nginx的反向代理和负载均衡服务
Nginx (engine x) 是一个高性能的HTTP和反向代理服务,也是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行. ...
- Nginx之反向代理配置(二)
前文我们聊了Nginx的防盗链.反向代理以及开启nginx代理缓存,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/12417130.html:今天我们继续说ng ...
- 利用Nginx实现反向代理web服务器
一.Nginx简介 Nginx是一个很强大的高性能Web服务器和反向代理服务器,它具有很多非常优越的特性: 可以高并发连接 内存消耗少 成本低廉 配置文件非常简单 支持Rewrite重写 内置的健康检 ...
- Windos环境用Nginx配置反向代理和负载均衡
Windos环境用Nginx配置反向代理和负载均衡 引言:在前后端分离架构下,难免会遇到跨域问题.目前的解决方案大致有JSONP,反向代理,CORS这三种方式.JSONP兼容性良好,最大的缺点是只支持 ...
随机推荐
- spring整合axis2(最小配置化)的示例
参考文档: http://blog.csdn.net/xinhaoluan/article/details/3605234 环境配置: spring-framework-3.2.7 axis2-1.6 ...
- Watson Conversation Service Implementation Methodology
Watson Conversation Service Implementation Methodology In order to implement the WCS successfully. Y ...
- Mac之OS系统下搭建JavaEE环境 <四> 之IntelliJ IDEA 的内存优化
1.代开IntelliJ IDEA 的显示内容 2. 打开idea.vmoptions文件 路径为Contens——bin——idea.vmoptions 修改之前会复制一份备份原配置 原配置 修改后 ...
- java IO之 序列流 集合对象Properties 打印流 流对象
序列流 也称为合并流. SequenceInputStream 序列流,对多个流进行合并. SequenceInputStream 表示其他输入流的逻辑串联.它从输入流的有序集合开始,并从 第一个输入 ...
- hibernate总结-持续更新
简介 hibernate官网:Hibernate Hibernate 是一个开放源代码的对象关系映射框架,它对 JDBC 进行了非常轻量级的对象封装,使得 Java 程序员可以随心所欲的使用对象编程思 ...
- CSS3-loading动画(三)
分享继续,图片看得不真切 在线演示demo:http://liyunpei.xyz/loading.html 十一.效果十一 四个小球分别包含于四个正方形div,将小球相对于正方形定位(top:0:l ...
- JavaScript一个google地图获取
<script type="text/javascript"> /** * 返回一个新创建的<img>元素,该元素用于在获取到地理位置信息后,显示一张Goo ...
- 次小生成树学习+例题 poj 1679 The Unique MST
次小生成树学习: 顾名思义,次小生成树,就是将图的所有生成树排序后,权值第二小的生成树. 次小生成树的朴素求法是很好想的,即首先求出最小生成树,之后枚举最小生成树中的所有边,将当前枚举的边" ...
- 扩展entity framework core 实现默认字符串长度,decimal精度,entity自动注册和配置
报道越短,事情越严重!文章越短,内容越精悍! 文章以efcore 2.0.0-preview2.测试验证通过.其他版本不保证使用,但是思路不会差太远.源代码 目标: 1.实现entity的自动发现和m ...
- easyUI日期框返回到月份,选择日期也只到月份
easyUI日期框返回到月份,选择日期也只到月份,不是原创,引用了园友的一篇文章,自己写下来,以便不时之需,谢谢. 1 $(function () { $('#date').datebox({ onS ...