博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Httpd Nginx Haproxy反向代理
阅读量:5081 次
发布时间:2019-06-12

本文共 10611 字,大约阅读时间需要 35 分钟。

Apache反向代理

部署httpd反向代理

准备工作:    三台虚拟机Ip地址分配:    linux-node1:192.168.1.5 (源码编译httpd,并且配置proxy用于代理后端的httpd服务)    node1:192.168.1.3    node2:192.168.1.4node1,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.servicelinux-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 starthttpd中的mod_proxy官方文档http://httpd.apache.org/docs/current/mod/mod_proxy.html切换到源码编译的conf配置文件目录下# cd /usr/local/httpd/conf/ 备份配置文件# cp httpd.conf httpd.conf.bakhttpd2.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 demoLoadModule proxy_module modules/mod_proxy.soLoadModule proxy_connect_module modules/mod_proxy_connect.soLoadModule proxy_http_module modules/mod_proxy_http.soLoadModule proxy_fcgi_module modules/mod_proxy_fcgi.soLoadModule proxy_balancer_module modules/mod_proxy_balancer.soLoadModule lbmethod_byrequests_module modules/mod_lbmethod_byrequests.soLoadModule lbmethod_bytraffic_module modules/mod_lbmethod_bytraffic.soLoadModule lbmethod_bybusyness_module modules/mod_lbmethod_bybusyness.soLoadModule slotmem_shm_module modules/mod_slotmem_shm.soProxyRequests Off
BalancerMember http://192.168.1.3:8080 BalancerMember http://192.168.1.4:8080
ProxyPass /demo balancer://myclusterProxyPassReverse /demo balancer://mycluster
SetHandler balancer-manager Order Deny,Allow Allow from all
编辑配置httpd.conf配置文件,取消注释并添加haproxy的配置文件ServerName linux-node1.com:80LoadModule socache_shmcb_module modules/mod_socache_shmcb.so#haproxy demoInclude 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访问的效果图

Jobhczv.gif

修改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 demoLoadModule proxy_module modules/mod_proxy.soLoadModule proxy_connect_module modules/mod_proxy_connect.soLoadModule proxy_http_module modules/mod_proxy_http.soLoadModule proxy_fcgi_module modules/mod_proxy_fcgi.soLoadModule proxy_balancer_module modules/mod_proxy_balancer.soLoadModule lbmethod_byrequests_module modules/mod_lbmethod_byrequests.soLoadModule lbmethod_bytraffic_module modules/mod_lbmethod_bytraffic.soLoadModule lbmethod_bybusyness_module modules/mod_lbmethod_bybusyness.soLoadModule slotmem_shm_module modules/mod_slotmem_shm.soProxyRequests Off
BalancerMember http://192.168.1.3:8080 BalancerMember http://192.168.1.4:8080
SetHandler balancer-manager Order Deny,Allow Allow from all
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
检测配置文件# /usr/local/httpd-2.4.25/bin/httpd -t重启httpd服务# /usr/local/httpd-2.4.25/bin/httpd -k graceful

代理虚拟主机的效果如下

GyKjBxh.gif

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效果

jjaZVCm.gif

nginx的一些特性

优点:

  1. web服务器,使用较为广泛,大家都会用
  2. 工作在7层的服务,Loacltion设置复杂的基于HTTP的负载均衡
  3. 性能强大,网络依赖小,可以解决C10K的问题
  4. 安装配置简单
  5. 支持热启动

缺点:

  1. 健康检擦单一
  2. 负载均衡算法少
  3. 不能动态管理
  4. 没有集群upstream的状态页面

haproxy:

优点:

  1. 专门做反响代理负载均衡
  2. 负载均衡算法 >= 8
  3. 性能 >= nginx
  4. 支持动态管理,通过和Haproxy的socket进行通信,可以进行管理
  5. 有比较丰富得dashboard页面
  6. 比较强大的七层功能

缺点:

  1. 配置没有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 密码:dxsfhaproxy的安装包下载到/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 -vHA-Proxy version 1.7.5 2017/04/03Copyright 2000-2017 Willy Tarreau 
复制启动脚本# 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 daemondefaults 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_backendbackend 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的效果

vqoj6uU.gif

如何在七层设置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 2mdefaults    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 1backend 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的节点上

ZIovT02.gif

使用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

转载于:https://www.cnblogs.com/demon89/p/proxy.html

你可能感兴趣的文章
对象与类
查看>>
《奸的好人2》财色战场----笔记
查看>>
BZOJ 1834网络扩容题解
查看>>
bzoj1878
查看>>
【Vegas原创】Mysql绿色版安装方法
查看>>
Thrift Expected protocol id ffffff82 but got 0
查看>>
分享《去哪儿网》前端笔试题
查看>>
2013-07-04学习笔记二
查看>>
CP15 协处理器寄存器解读
查看>>
【codeforces 787B】Not Afraid
查看>>
【9111】高精度除法(高精度除高精度)
查看>>
【hihocoder 1312】搜索三·启发式搜索(普通广搜做法)
查看>>
JavaFX中ObservableValue类型
查看>>
杭电 1097 A hard puzzle
查看>>
[转载]INFORMIX锁机制及如何剖析其锁申辩(第二部门)
查看>>
Andriod-项目stymqjlb-学习笔记2-原型
查看>>
Web AppDomain
查看>>
JQuery创建规范插件
查看>>
AD 域服务简介(三)- Java 对 AD 域用户的增删改查操作
查看>>
Unity中Text渐变色,和Text间距
查看>>