• 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的一些特性

    优点:

    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 密码: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
  • 相关阅读:
    获取成本
    销售订单跟踪成本
    装机
    这就是用战术上的勤奋掩盖战略上的懒惰
    CPA-计划(参考)
    大帝名言
    BZOJ 2100: [Usaco2010 Dec]Apple Delivery spfa
    BZOJ 2834: 回家的路 Dijkstra
    BZOJ 4070: [Apio2015]雅加达的摩天楼 根号分治+spfa
    BZOJ 4152: [AMPPZ2014]The Captain Dijkstra+贪心
  • 原文地址:https://www.cnblogs.com/demon89/p/proxy.html
Copyright © 2020-2023  润新知