我有一个在nginx和php-fpm上运行的drupal站点,在多个服务器之间进行haproxy平衡.
我为haproxy设置了两个服务:http和https.
如果我去http://subdomain.domain.com,它工作正常.
如果我去https://subdomain.domain.com,它也可以正常工作.如果我然后回到http它现在重定向到https.这发生在firefox和chrome中,但不是在IE中.
是否有某些设置可以自动重定向到https,如果它知道它存在的话?也许如果设置了安全标头?
我试过看LiveHTTPHeaders,但此时只显示https部分.
我试过看Chrome,它说:
t=1312233405229 [st= 0] +REQUEST_ALIVE [dt=192]
t=1312233405229 [st= 0] URL_REQUEST_START_JOB [dt= 0]
--> load_flags = 1114241 (ENABLE_LOAD_TIMING | MAIN_FRAME | VALIDATE_CACHE | VERIFY_EV_CERT)
--> method = "GET"
--> priority = 0
--> url = "http://subdomain.domain.com/"
t=1312233405229 [st= 0] +URL_REQUEST_START_JOB [dt= 0]
--> load_flags = 1114241 (ENABLE_LOAD_TIMING | MAIN_FRAME | VALIDATE_CACHE | VERIFY_EV_CERT)
--> method = "GET"
--> priority = 0
--> url = "http://subdomain.domain.com/"
t=1312233405229 [st= 0] URL_REQUEST_REDIRECTED
--> location …Run Code Online (Sandbox Code Playgroud) 我一直在寻找心跳等高可用性解决方案,并在haproxy负载均衡器出现故障时保持故障转移.我意识到虽然我们希望高可用性,但是在这个时间点并不是真正要求在任何时候运行2个负载均衡器实例的支出程度,以便我们获得即时故障转移(特别是一磅)在我们的设置中将是多余的).
我的替代解决方案是,如果当前负载均衡器已停止工作,则从AMI启动新的负载均衡器EC2实例,并将其与我们的域名指向的弹性IP相关联.这应该确保停机时间仅限于启动新实例和关联弹性IP所需的时间,这是因为我们目前的情况似乎是高可用性的合理成本效益解决方案,特别是因为我们可以轻松地实现多个av区.我希望使用以下步骤执行此操作:
我知道如何在我的脚本中运行命令来启动和关闭EC2实例,将弹性IP地址与实例关联,并ping服务器.
我的问题是这里有什么合适的ping?标准ping是否足够定期,什么是良好的间隔?或者这是一种相当简单的方法,我应该做一个更聪明的健康检查?
如果有人预见到这种方法有任何问题,请随时发表评论
我正在使用HAProxy 1.4.22.我有以下haproxy.conf文件:
global
maxconn 100000
daemon
defaults
mode http
retries 1
contimeout 8000
clitimeout 120000
srvtimeout 120000
stats enable
stats uri /haproxy-stats
stats auth admin:****************
option httpchk
frontend http-in
bind 16.9.13.39:80
maxconn 100000
acl is_l1 hdr_end(host) -i l1.mydomain.com
acl is_l2 hdr_end(host) -i l2.mydomain.com
acl is_l3 hdr_end(host) -i l3.mydomain.com
acl is_l0 hdr_end(host) -i mydomain.com
use_backend lora1 if is_l1
use_backend lora2 if is_l2
use_backend lora3 if is_l3
use_backend lora0 if is_l0
default_backend lora0
backend lora0
balance roundrobin
option forwardfor except 127.0.0.1 # …Run Code Online (Sandbox Code Playgroud) 我在 haproxy.cfg 的默认部分有这个选项:
option dontlog-normal
option dontlognull
Run Code Online (Sandbox Code Playgroud)
但是在日志文件中仍然有这种类型的日志行:
localhost haproxy[28330]: Connect from XXX.XXX.XXX.XXX:2536 to YYY.YYY.YYY.YYY:80 (http-in/HTTP)
Run Code Online (Sandbox Code Playgroud)
如何在日志中禁用此行?
我目前在LAN上运行多个低功耗服务器.他们都运行不同的服务,但其中一些是相似的.我还拥有3个域,并为这些域提供了许多子域.
好吧,正如我之前所说的,我的一些服务真的很相似,并且运行在同一个端口上(我有一个Owncloud服务器,我的网站托管在另一个上).这意味着如果我想将owncloud.mydomain.com转到我的Owncloud服务器,并且www.mydoamain.com转到我的网络服务器,我有一点问题.这两个子域都只是去我家,服务使用相同的端口.我无法真正区分每个子域的流量.
编辑:它还需要能够指导许多类型的流量,如SSH,HTTPS和FTP
我只是在不同的端口上运行不同的服务,但不是最佳的.这意味着看起来很奇怪,人们将更难以使用我的任何服务,而这通常是我不喜欢的.
我在同一台服务器上考虑过类似的服务,但它们是一些非常糟糕的服务器.我宁愿不必做任何类似的事情.此外,由于服务器有点旧,很高兴知道如果其中一个服务器死了,至少我会有其他服务.我认为这个选项并不好.
最好的解决方案:我听说有一项服务具有我正在寻找的名为haproxy的确切功能.我唯一的问题是我不知道如何使用这项服务,我特别不知道如何得到我想要的用途.
我很乐意让haproxy工作,我只需要知道如何按照我需要的方式设置它.如果有人有关于如何专门做我想要的教程的链接(我已经找到了如何让haproxy工作,而不是我想要的方式)那么我会非常感激.我会自己寻找,但我已经拥有,我甚至不知道该搜索什么.谁能帮我吗?
谢谢
我们在CentOS 5.9机器上托管了haproxy 1.3.26,它具有2.13 GHz Intel Xeon处理器,作为许多服务的http和tcp负载均衡器,提供~2000请求/秒的峰值吞吐量.它已经运行了2年,但逐渐增加了流量和服务数量.
我们观察到即使在重新加载旧的haproxy过程后仍然存在.在进一步调查中,我们发现旧进程在TIME_WAIT状态下有许多连接.我们也看到了,netstat并且lsof花了很长时间.在引用http://agiletesting.blogspot.in/2013/07/the-mystery-of-stale-haproxy-processes.html时,我们介绍了option forceclose它,但它搞乱了各种监控服务,因此还原了它.经过进一步挖掘,我们意识到,在/proc/net/sockstat接近200K插座是tw(TIME_WAIT)状态,这在令人惊讶的是/etc/haproxy/haproxy.cfg maxconn已被指定为31000,并ulimit-n为64000.我们有timeout server和timeout client为300s我们改变30s,但没有太大用处.
现在的疑虑是: -
如何使用在应用服务器上设置的cookie在haproxy中路由请求?
例: SESS=<hash-of-username>
在任何情况下,haproxy都不应自行插入cookie.
所以我在Jetty servlet面前使用HAProxy.目前的目标只是在配置完所有内容后进行概念验证,加载和压力测试.但是我在配置haproxy时遇到问题.我知道这不是我的应用程序的问题,因为我有运行nginx(tengine),一切正常.所以它必须与haproxy配置或haproxy工作的方式不适合我的需要.
所以我的客户端尝试做的是使用两个不同的连接连接到haproxy并保持它们打开.1.连接分块流模式以进行上传.2.连接正常模式并建立下载通道.
这是我的haproxy.conf文件的样子:
global
log /dev/log local0
log /dev/log local1 notice
chroot /var/lib/haproxy
stats socket /run/haproxy/admin.sock mode 660 level admin
stats timeout 30s
user haproxy
group haproxy
daemon
# Default SSL material locations
# ca-base /etc/ssl/certs
# crt-base /etc/ssl/private
# Default ciphers to use on SSL-enabled listening sockets.
# For more information, see ciphers(1SSL).
ssl-default-bind-ciphers kEECDH+aRSA+AES:kRSA+AES:+AES256:RC4-SHA:!kEDH:!LOW:!EXP:!MD5:!aNULL:!eNULL
maxconn 2048
defaults
log global
mode http
option forwardfor
option http-server-close
option httplog
option dontlognull
timeout connect 5000
timeout client 50000
timeout server …Run Code Online (Sandbox Code Playgroud) 我只是看看HAproxy的来源,了解它是如何实现的,我看到一个有趣的数据结构叫做弹性二进制搜索树.它似乎对二叉搜索树非常熟悉.但我想知道为负载均衡器选择这种数据结构的不同之处和原因是什么.
我正在尝试使用HAProxy进行速率限制.我需要跟踪几个端点并单独限制它们.到目前为止,我使用的是通用计数器.但是,只有3个,sc0到sc2.
在文档中,它提到这些计数器上的所有操作都采用可选的表参数,但是,如果我可以跟踪不同表上的不同内容,但使用相同的计数器,则不清楚.
换句话说:全局或每个粘性表是3个通用计数器的限制吗?
如果经过适当的表格定义和跟踪指令,我会这样做
sc1_inc_gpc0(table1)
(并且,在不同的条件下)
sc1_inc_gpc0(table2)
然后有2个acl规则
acl X sc1_get_gpc0(table1) gt 1
acl Y sc1_get_gpc0(table2) gt 1
这两个人acl是否会独立工作,或者他们会对所有效果进行同样的反击?
谢谢大家的帮助!(如果您想知道:由于多种原因,目前我无法使用与HAProxy不同的解决方案进行速率限制)