Apache Web 服务器负载均衡

Posted

技术标签:

【中文标题】Apache Web 服务器负载均衡【英文标题】:Apache web server Load balancing 【发布时间】:2017-06-12 22:35:06 【问题描述】:

我们在安装了apache web服务器的out环境中有一个要求,其中ssl和非ssl端口分别配置为监听8080和4443。现在我想根据输入对请求进行负载平衡,如果传入的请求是 ssl,它应该将请求负载平衡到“https”,如果它不是 ssl,它应该将请求负载平衡到“http”。已尝试以下方法,但未按预期工作。有人可以帮忙吗?

   <Proxy balancer://mybalancerhttp>
            BalancerMember http://localhost1/
            BalancerMember http://localhost2/
            ProxySet lbmethod=byrequests
   </Proxy>

   ProxyPass / "balancer://mybalancerhttp/"
   ProxyPassReverse / "balancer://mybalancerhttp/"

   <Proxy balancer://mybalancerhttps>
            BalancerMember https://localhost1/
            BalancerMember https://localhost2/
            ProxySet lbmethod=byrequests
   </Proxy>

   ProxyPass / "balancer://mybalancerhttps/"
   ProxyPassReverse / "balancer://mybalancerhttps/"

谢谢

【问题讨论】:

【参考方案1】:

我遇到了类似的问题(/balancer-manager 仅适用于 HTTP,不适用于 HTTPS),在我的情况下,解决方案结果是将此配置添加到文件“ssl.conf”而不是“httpd.conf”中”。

【讨论】:

【参考方案2】:

这些指令很好,但您想根据客户请求决定发送到哪里。

最简单的方法是将每个代理密码集及其平衡器定义移动到它们自己的虚拟主机上。

这是

<VirtualHost *:8080>
ServerName yourhostname.example.com
   <Proxy balancer://mybalancerhttp>
            BalancerMember http://localhost1/
            BalancerMember http://localhost2/
            ProxySet lbmethod=byrequests
   </Proxy>

   ProxyPass / "balancer://mybalancerhttp/"
   ProxyPassReverse / "balancer://mybalancerhttp/"
</VirtualHost>

<VirtualHost *:4443>
ServerName yourhostname.example.com
SSLEngine on
SSLProxyEngine on
....certs and all needed directives
<Proxy balancer://mybalancerhttps>
            BalancerMember https://localhost1/
            BalancerMember https://localhost2/
            ProxySet lbmethod=byrequests
   </Proxy>

   ProxyPass / "balancer://mybalancerhttps/"
   ProxyPassReverse / "balancer://mybalancerhttps/"
</VirtualHost>

【讨论】:

谢谢!!我以同样的方式尝试过。但它没有按预期工作。它返回未找到的错误页面。如果尝试将流量路由到单个主机,而不是负载平衡,则其工作正常,如下所示。 ProxyPass / hostname1 ProxyPassReverse / hostname1 我告诉你的配置会起作用,如果你通过在 servername 中使用正确的名称加上端口进入正确的虚拟主机。当您使用 ProxyPass / 时,您正在代理所有内容,因此 404 将来自后端。修复名称并确保您没有其他任何干扰或登陆另一个虚拟主机。提示“apachectl -S” #这里是输出。 #VirtualHost配置:#*:8080是NameVirtualHost #默认服务器test.one.com (/opt/apache/conf/httpd.conf:484) #8080端口namevhost test.one.com (/opt/apache/conf/ httpd.conf:484) # 端口 8080 namevhost login.test.one.com (/opt/apache/conf/httpd.conf:510) #*:4443 是一个 NameVirtualHost # 默认服务器 test.one.com (/opt/ apache/conf/httpd.conf:537) # 端口 4443 namevhost test.one.com (/opt/apache/conf/httpd.conf:537) #Main DocumentRoot: "/opt/apache/htdocs" #Main ErrorLog: "/opt/apache/logs/error_log" #Mutex proxy-balancer-shm: using_defaults #Mutex ssl-stapling-refresh : using_defaults #Mutex ssl-stapling: using_defaults #Mutex proxy: using_defaults #Mutex ssl-cache: using_defaults #Mutex default: dir="/opt/apache/logs/" 机制=default #Mutex mpm-accept: using_defaults #Mutex cache- socache: using_defaults #PidFile: "/opt/apache/logs/httpd.pid" #Define: DUMP_VHOSTS 对不起,我不允许添加为单个评论,因此分开。不知道有什么问题

以上是关于Apache Web 服务器负载均衡的主要内容,如果未能解决你的问题,请参考以下文章

Apache web服务软件安装启动负载均衡反向代理配置

Nginx之二:负载均衡及高可用

单节点nginx为两台apache服务器提供负载均衡

Nginx负载均衡

Nginx一个实现负载均衡的强大web server

单节点nginx为两台apache服务器提供负载均衡(转载)