我之前安装了HAProxy负载ballancing.如何检查在mu ubuntu之前安装的haproxy版本是什么?
由于某些依赖 Host 标头才能正常运行的遗留应用程序,我需要一个能够重写 Host 标头并将其传递给下游(后端)的 Ingress(代理等)。是否有支持此功能的入口控制器?
例子:
最终用户通过foo.com/afor backenda和foo.com/bfor backend访问我们的网站b。但由于a和b是遗留应用程序,它只接受:
a 接受连接时 Host: a.foo.comb 接受连接时 Host: b.foo.com所以我有一个相对直接的服务器堆栈,利用SSL卸载和HTTP负载均衡器.设置看起来像这样:
(client) -> (SSL offload - stud) -> (balancer - haproxy) -> (http server - apache)
Run Code Online (Sandbox Code Playgroud)
我的问题不是关于堵塞这一切.它运作得很好,老实说,我很清楚它是如何直接设置它的.我还要补充说,HTTP客户端直接连接到haproxy,从而绕过SSL卸载.并且为了记录,上述每个部分都有冗余的合作伙伴.
问题有点抽象.我将从演示开始.客户端通过设置发出请求https://myserver.tld/scp(删除了一些标题以保持清晰)
GET /scp HTTP/1.1
Host: myserver.tld
(headers added by haproxy)
X-Forwarded-For: [original::client:ip]
X-Forwarded-Proto: https
Run Code Online (Sandbox Code Playgroud)
并且服务器响应
HTTP/1.1 301 Moved Permanently
Date: Wed, 03 Jul 2013 03:16:25 GMT
Server: Apache/2.2.15 (CentOS)
Location: http://myserver.tld/scp/
Content-Length: 344
Content-Type: text/html; charset=iso-8859-1
Run Code Online (Sandbox Code Playgroud)
所以Apache mod_dir正在使用尾部斜杠向同一个URL发送重定向.这样做是正确的.那不是问题.问题是HTTPS协议丢失了.同样,我认为Apache重定向到HTTP URL是正确的,毕竟,从上述堆栈接收的连接是常规的HTTP连接.
因此,从Apache的角度来看,客户端请求了常规的HTTP连接.HTTPS标志以及所有其他SSL信息都处于关闭状态,因为会话的SSL部分由stud处理.
虽然(在Apache内部)我有一个有效的X-Forwarded-Proto头,我找不到告诉Apache原始客户端连接是HTTPS的方法,并且目录斜杠重定向mod_dir应该使用https://协议.我错过了什么?
我想出的唯一的事情就是重写Location内部HAProxy的转发的连接来取代HTTPS头http://用https://,但我真的不认为这种做法是很优雅.我更喜欢Apache(并且(不要伤害我)PHP进一步向下)以获得通知并将连接视为普通的HTTPS连接.
请帮忙!
PS - …
由于CORS(跨源资源共享),服务器正在接收数千个OPTIONS请求.现在,每个选项请求都被发送到其中一个服务器,这有点浪费,因为知道HAProxy可以在没有Web服务器帮助的情况下自己添加CORS头.
frontend https-in
...
use_backend cors_headers if METH_OPTIONS
...
backend cors_headers
rspadd Access-Control-Allow-Origin:\ https://www.example.com
rspadd Access-Control-Max-Age:\ 31536000
Run Code Online (Sandbox Code Playgroud)
但是为了实现这一点,我需要在cors_headers后端指定至少一个实时服务器,该服务器仍将接收请求.
如何在不指定任何服务器的情况下处理后端中的请求?如何将请求传播到服务器,同时将响应发送到浏览器并保持连接活动?
这是我的配置文件
listen solr 0.0.0.0:8983
mode http
balance roundrobin
option httpchk GET "/solr/select/?q=id:1234" HTTP/1.1
server solr_slave 1.1.1.1:8983 maxconn 5000 weight 256 check
server solr_master 2.2.2.2:8983 maxconn 5000 weight 1 check
Run Code Online (Sandbox Code Playgroud)
问题是我的solr服务器使用基本的http密码身份验证进行保护,因此运行状况检查始终失败
我怎么告诉haproxy在健康检查期间使用这些凭据?
我正在尝试将端点添加到发送Server Sent Events的现有应用程序.通常可能没有约5分钟的事件.我希望配置该端点不会切断我的服务器,即使响应在~1分钟内没有完成,但是如果服务器无法响应则所有其他端点都会超时.
有没有一种简单的方法来支持HAProxy中的服务器发送事件?
我从Openshift创建了一个基本的Nodejs应用程序并随机,该服务在几天内终止了几次.没有来自我的Nodejs模块的错误消息,只有在自动安装的haproxy中.
来自haproxy.log的消息是:
[WARNING] 184/001333 (193501) : Server express/local-gear is DOWN for maintenance.
[WARNING] 184/010106 (483047) : config : log format ignored for proxy 'stats' since it has no log address.
[WARNING] 184/010106 (483047) : config : log format ignored for proxy 'express' since it has no log address.
[WARNING] 184/010106 (483047) : Server express/local-gear is DOWN, reason: Layer4 connection problem, info: "Connection refused", check duration: 0ms. 0 active and 0 backup servers left. 0 sessions active, 0 requeued, 0 remaining …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用为其他服务器签名的证书.我有私钥和证书.
我的PEM文件顺序是:
subject=/C=***/L=*****/O=**********/CN=*********
issuer=/C=***/O=*****Inc/CN=********Secure Server CA
-----BEGIN CERTIFICATE-----
-----END CERTIFICATE-----
subject=/C=US/O=******** Inc/CN=********* SHA2 Secure Server CA
issuer=/C=US/O=********* Inc/OU=*********/CN=******** Global Root CA
-----BEGIN CERTIFICATE-----
-----END CERTIFICATE-----
subject=/C=US/O=********* Inc/OU=***********/CN=*********** Global Root CA
issuer=/C=US/O=********* Inc/OU=************/CN=******** Global Root CA
-----BEGIN CERTIFICATE-----
-----END CERTIFICATE-----
-----BEGIN RSA PRIVATE KEY-----
-----END RSA PRIVATE KEY-----
Run Code Online (Sandbox Code Playgroud)
当我试图将它部署到我的haproxy时,我收到了这个错误.
[ALERT] 188/141626 (2322) : parsing [/etc/haproxy/haproxy.cfg:32] : 'bind *:443' : inconsistencies between private key and certificate loaded from PEM file ................
[ALERT] 188/141626 (2322) : Error(s) found in configuration file : /etc/haproxy/haproxy.cfg …Run Code Online (Sandbox Code Playgroud) 我们的haproxy负载均衡器为其后端打开了数千个连接,即使它的设置说每个服务器实例打开不超过10个连接(见下文).当我取消注释"选项http-server-close"后端连接的数量下降但是我希望保持活动后端连接.
为什么maxconn不受尊重http-keep-alive?我验证ss了打开的后端连接处于ESTABLISHED状态.
defaults
log global
mode http
option http-keep-alive
timeout http-keep-alive 60000
timeout connect 6000
timeout client 60000
timeout server 20000
frontend http_proxy
bind *:80
default_backend backends
backend backends
option prefer-last-server
# option http-server-close
timeout http-keep-alive 1000
server s1 10.0.0.21:8080 maxconn 10
server s2 10.0.0.7:8080 maxconn 10
server s3 10.0.0.22:8080 maxconn 10
server s4 10.0.0.16:8080 maxconn 10
Run Code Online (Sandbox Code Playgroud) 我需要在公共内部托管的URL下在内部和外部集成多个Web应用程序.内部部署应用程序与haproxy位于同一数据中心,但非现场应用程序只能通过http代理访问,因为运行haproxy的服务器无法直接访问Internet.因此我必须使用http Internet代理,SOCKS也可能是一个选项.
我如何告诉haproxy后端只能通过代理到达?我宁愿不使用像socksify/proxifier/proxychains/tsocks/...这样的额外组件,因为这会带来额外的开销.
当我在具有直接Internet连接的计算机上运行它时,我可以使用此配置,它可以正常工作:
frontend main
bind *:8000
acl is_extweb1 path_beg -i /policies
acl is_extweb2 path_beg -i /produkte
use_backend externalweb1 if is_extweb1
use_backend externalweb2 if is_extweb2
backend externalweb1
server static www.google.com:80 check
backend externalweb2
server static www.gmx.net:80 check
Run Code Online (Sandbox Code Playgroud)
(显然这些不是我要说的网址,这只是一个例子)
Haproxy能够检查外部应用程序并将流量路由到它们:
在我工作的公司的安全环境中,我必须使用代理,并且haproxy无法连接到外部应用程序.如何让haproxy在http代理后面使用那些外部Web应用程序服务器(不需要身份验证),同时通过公共http页面/浏览器提供对它们的访问?
haproxy ×10
ssl ×2
apache ×1
connection ×1
cors ×1
envoyproxy ×1
express ×1
html5 ×1
http ×1
http-proxy ×1
kubernetes ×1
networking ×1
nginx ×1
node.js ×1
openshift ×1
version ×1