情况如下:
我有许多Web服务器,比如10.我需要使用(软件)负载均衡器,它可以使用反向代理服务器实现,如HAProxy或Varnish.现在,我们所服务的所有流量都是通过https而不是http,所以Varnish是不可能的.
现在,我想将用户的请求分成几个类别,这些类别取决于请求的一个输入(POST)参数.根据该参数,我需要在服务器之间划分请求,基于此,(即使所有其他输入(POST)参数相同),不同的服务器将以不同的方式提供服务.
所以,我需要定义一个自定义负载平衡算法,这样,对于该参数的特定值,我将负载除以特定的3(比方说),对于某些其他值,将请求分为特定的2和其他值( s),剩下的5.
由于我不能使用清漆,因为它不能用于终止ssl(定义自定义算法在VCL中很容易),我正在考虑使用HA-Proxy.
所以,这是一个问题:
任何人都可以帮助我如何使用HA-Proxy定义自定义负载平衡功能?
我研究了很多,但我找不到任何这样的文件.因此,如果HA-Proxy不可能,您是否可以将我转介给其他一些反向代理服务,它也可以用作负载均衡器,以满足上述两个标准?(ssl终止和定义自定义负载平衡的能力).
编辑:
这个问题是我之前提出的一个问题.用于https的清漆
我似乎无法完成这件事。我仍然在我的日志中看到 cloudflare IP。目前,我有一个负载均衡器,它位于 Cloudflare 后面。
目前,这是与 forwardfor 相关的块:
option forwardfor except 127.0.0.1
option forwardfor except 204.93.240.0/24
option forwardfor except 204.93.177.0/24
option forwardfor except 199.27.128.0/21
option forwardfor except 173.245.48.0/20
option forwardfor except 103.22.200.0/22
option forwardfor except 141.101.64.0/18
option forwardfor except 108.162.192.0/18
option forwardfor header X-Real-IP
reqadd X-Forwarded-Proto:\ http
Run Code Online (Sandbox Code Playgroud)
有人知道从 Cloudflare 获取真实 IP 的正确配置吗?或者可能相当于 nginx 的 set_real_ip_from cloudflareIP 和/或 real_ip_header CF-Connecting-IP 到 haproxy?谢谢。
我们有1个负载均衡器,后面有3个成员:
主要平衡器:www.website.com成员:web1.website.com,web2.website.com和web3.website.com
目前我们在loadbalancer上使用nginx,但我们想用HAProxy替换它.
Nginx使用以下行将没有www(domain.com)的域重写到www.domain.com:
server {
server_name domain.com;
listen 1.2.3.4:80;
rewrite ^(.*) http://www.domain.com$1 permanent;
}
Run Code Online (Sandbox Code Playgroud)
如何使用HAproxy进行管理?
我的haproxy配置:
frontend http 1.2.3.4:80
default_backend www_cluster
acl is_www hdr_end(host) -i www.domain.com
use_backend www_cluster if is_www
backend www_cluster
balance roundrobin
cookie SERVERID insert nocache indirect
option httpchk HEAD / HTTP/1.0
option httpclose
option forwardfor
server web1 1.2.3.5:82 cookie WEB1 check
server web2 1.2.3.6:82 cookie WEB2 check
server web3 1.2.3.7:82 cookie WEB3 check
Run Code Online (Sandbox Code Playgroud)
TIA!
我试图了解这两者之间的基本用例,以及何时优先使用另一种。
任何与实际用例相关的链接都很好
我的HAproxy配置中有一个简单的条件(我试过这个用于前端和后端):
acl no_index_url path_end .pdf .doc .xls .docx .xlsx
rspadd X-Robots-Tag:\ noindex if no_index_url
Run Code Online (Sandbox Code Playgroud)
它应该将no-robots标头添加到不应编入索引的内容中.但是WARNING在解析配置时它给了我这个:
acl 'no_index_url' will never match because it only involves keywords
that are incompatible with 'backend http-response header rule'
Run Code Online (Sandbox Code Playgroud)
和
acl 'no_index_url' will never match because it only involves keywords
that are incompatible with 'frontend http-response header rule'
Run Code Online (Sandbox Code Playgroud)
根据文档,rspadd可以在前端和后端使用.的path_end是在中实施例中使用的前端.为什么我会收到此错误,这是什么意思?
HAProxy是否支持域名到后端映射以进行基于路径的路由.
目前它支持vhost的地图:
frontend xyz
<other_lines>
use_backend backend1 if { hdr(Host) -i myapp.domain1.com }
use_backend backend2 if { hdr(Host) -i myapp.domain2.com }
Run Code Online (Sandbox Code Playgroud)
可以使用地图重写为:
frontend xyz
<other_lines>
use_backend %[req.hdr(host),lower,map_dom(/path/to/map,default)]
Run Code Online (Sandbox Code Playgroud)
以地图文件的内容为:
#domainname backendname
myapp.domain1.com backend1
myapp.domain2.com backend2
Run Code Online (Sandbox Code Playgroud)
但是,如果路由基于路径,如下例所示:
frontend xyz
acl host_server_myapp hdr(host) -i myapp.domain.com
acl path_path1 path_beg /path1
acl path_path2 path_beg /path2
use_backend backend1 if host_server_myapp path_path1
use_backend backend2 if host_server_myapp path_path2
Run Code Online (Sandbox Code Playgroud)
是否可以为此用例进行映射?使用base而不是hdr(host)可能会给出整个路径,但它不具有域的灵活性,因为它base是字符串比较.还有其他方法可以将其转换为haproxy地图.
使用HAProxy,我正在尝试(TCP)负载平衡Rserve(在TCP套接字中侦听用于调用R脚本的服务)在2个节点中的端口6311上运行.
下面是我的配置文件.当我运行HAProxy时,它的状态没有任何问题.但是当我连接到平衡节点时,低于错误.配置有什么问题?
Handshake failed: expected 32 bytes header, got -1
#---------------------------------------------------------------------
# Global settings
#---------------------------------------------------------------------
global
log 127.0.0.1 local2
chroot /var/lib/haproxy
pidfile /var/run/haproxy.pid
maxconn 4000
user haproxy
group haproxy
daemon
# turn on stats unix socket
stats socket /var/lib/haproxy/stats
#---------------------------------------------------------------------
# common defaults that all the 'listen' and 'backend' sections will
# use if not designated in their block
#---------------------------------------------------------------------
defaults
mode tcp
log global
option httplog
option dontlognull
option http-server-close
#option forwardfor except 127.0.0.0/8
option redispatch
retries 3
timeout …Run Code Online (Sandbox Code Playgroud) 我正在尝试在我们的系统中为微服务架构实现反向代理。
代理服务器是HAProxy,可与SSL终止一起使用,并且需要使用Https和Kerberos身份验证将请求代理到后端服务器。我成功终止了代理服务器上的ssl并将请求传递给https服务器(我需要终止才能将请求的内容按它们的主体路由到特定的后端服务),但是无法通过后端服务器上的kerberos进行身份验证。
是否可以在代理服务器上实现Kerberos身份验证,然后将TGT传递给其他后端服务?
我有一个已部署的 emberjs 应用程序,在 google chrome 浏览器中,我收到 2 个 .js 文件的以下错误。
无法在资源 'http://staging.org.com/assets/vendor-0ada2c9fb4d3e07ad2f0c6a990945270.js' 的 'integrity' 属性中找到有效的摘要,计算出的 SHA-256 完整性为 'Sb4Xc/Oub27QW0MKlq.Mg7mg7s' 资源被屏蔽了
当我检查文件时,我可以看到有问题的两个 .js 文件的脚本标签。我不是 100% 确定这种完整性检查是如何工作的。您可以在下面看到 sha 的完整性属性。
<script src="/assets/vendor-0ada2c9fb4d3e07ad2f0c6a990945270.js" integrity="sha256-s3XY9h9v9IThygF6UkWRvWZsf7zeTqYJ1rLfDgg1bS0= sha512-k3lfqdeZw3OcsECfD3t99Hidh6IoRlFSoIu5nJk0FkLYHwx0q/rddirj4jh4J73dmLwKfG9mx0U5Zf6ZzRBsvA==" ></script>
<script src="/assets/g-web-56670cf0485cf52f54589091e2a25cc8.js" integrity="sha256-jNmWqO61OPijscQ5cHVSbB1Ms5wKX78ZACYdhrUo3X4= sha512-oiksgRFsqgHaCvXPvd3SAsUuX4zPeVClQBIgrOgIKNBMa3hPqCHknoFqDGRtSyfN4EdIkfk/x1zSqBqRvONAGQ==" ></script>
Run Code Online (Sandbox Code Playgroud)
emberjs 应用程序是使用 docker 映像构建的,部署到 kubernetes 并且运行 haproxy 的 aws elb 正在处理该应用程序的路由,以便当我导航到staging.x.com它时,路由到该服务(emberjs web 应用程序)的 kubernetes 中的内部 dns。
有什么值得注意的;
ember serve在本地运行可以正常工作并且应用程序加载正常。该问题仅发生在我部署的登台环境中。
var (
httpClient *http.Client
)
const (
MaxIdleConnections int = 20
RequestTimeout int = 5
)
// init HTTPClient
func init() {
client := &http.Client{
Transport: &http.Transport{
MaxIdleConnsPerHost: MaxIdleConnections,
},
Timeout: time.Duration(RequestTimeout) * time.Second,
}
return client
}
func makeRequest() {
var endPoint string = "https://localhost:8080/doSomething"
req, err := http.NewRequest("GET", ....)
response, err := httpClient.Do(req)
if err != nil && response == nil {
log.Fatalf("Error sending request to API endpoint. %+v", err)
} else {
// Close the connection to …Run Code Online (Sandbox Code Playgroud) haproxy ×10
ssl ×2
apache ×1
architecture ×1
cloudflare ×1
ember-cli ×1
ember.js ×1
go ×1
http ×1
https ×1
javascript ×1
keep-alive ×1
kerberos ×1
kubernetes ×1
rewrite ×1
rserve ×1
tcp ×1