#HA-Proxy version 1.3.22 2009/10/14 Copyright 2000-2009 Willy Tarreau <w@1wt.eu>
global
maxconn 10000
spread-checks 50
user haproxy
group haproxy
daemon
stats socket /tmp/haproxy
log localhost local0
log localhost local1 notice
defaults
mode http
maxconn 50000
timeout client 10000
option forwardfor except 127.0.0.1
option httpclose
option httplog
listen dcaustin 0.0.0.0:80
mode http
timeout connect 12000
timeout server 60000
timeout queue 120000
balance roundrobin
option httpchk GET /index.html
log global
option httplog
option dontlog-normal
server web1 10.10.10.101:80 maxconn 300 check …Run Code Online (Sandbox Code Playgroud) 我有 haproxy,需要向没有直接连接的服务器提供 smtp。
这是我的配置的一部分:
listen smtp 10.12.23.10:3025
mode tcp
server smtp 172.30.33.12:25
#tcp-request inspect-delay 2s
acl white_list src 10.146.5.247 10.146.5.201
tcp-request content accept if white_list
tcp-request content reject
Run Code Online (Sandbox Code Playgroud)
任何连接到端口的尝试都会被拒绝。如果我删除行tcp-request content reject- 适用于所有人,但默认情况下 haproxy 接受一切。只允许两个或更多服务器进入的正确方法是什么?
我也试过以下几行:
tcp-request content reject unless whitelist
tcp-request content reject if !whitelist
Run Code Online (Sandbox Code Playgroud)
如果有帮助,我有 haproxy 1.4.18。
我正在使用 Haproxy 对复制的 mysql 主服务器进行负载平衡。我还使用 Heartbeat 和 Pacemaker 进行 Active/Active ip 故障转移,并在两个负载均衡器上使用两个虚拟 ip,以实现 Web 服务器的高可用性。我使用起搏器中的位置在每个负载均衡器上保留一个 VIP,我使用指向 VIP 的循环 DNS 域来负载均衡负载均衡器。到目前为止一切看起来都很好!
| LB1 : | 循环-->| 1.2.3.4 | 心跳起搏器 | 代理 | 192.168.1.1
Run Code Online (Sandbox Code Playgroud)| | | | || LB2 : | 循环-->| 5.6.7.8 | 心跳起搏器 | 代理 | 192.168.1.2
crm配置显示
node $id="394647e0-0a08-451f-a5bf-6c568854f8d1" lb1
node $id="9e95dc4f-8a9a-4727-af5a-40919ac902ba" lb2
primitive vip1 ocf:heartbeat:IPaddr2 \
params ip="1.2.3.4" cidr_netmask="255.255.255.0" nic="eth0:0" \
op monitor interval="40s" timeout="20s"
primitive vip2 ocf:heartbeat:IPaddr2 \
params ip="5.6.7.8" cidr_netmask="255.255.255.0" nic="eth0:1" \
op monitor …Run Code Online (Sandbox Code Playgroud) 在我的 HAProxy 负载均衡器中,我有以下配置块:
defaults
mode http
log global
option httplog clf
option dontlognull
option http-server-close
option forwardfor except 127.0.0.0/8
option redispatch
frontend main_http *:80
option forwardfor except 127.0.0.1
option httpclose
default_backend backend_http
backend backend_http
balance roundrobin
option httpchk
server node1 10.0.0.64:80 check port 80
server node2 10.0.0.65:80 check port 80
server node3 10.0.0.66:80 check port 80
Run Code Online (Sandbox Code Playgroud)
在节点 (Tomcat) 上,我以这种格式记录请求(与第一个字段中的 x-forwarded-for 和真正的 REMOTE_ADDR 相结合):
pattern='%{X-Forwarded-For}i - %u %t "%r" %s %b "%{Referer}i" "%{User-Agent}i" %a'
Run Code Online (Sandbox Code Playgroud)
这似乎适用于大多数请求,但在某些情况下,我假设客户端位于代理后面,我看到第一个字段包含这些值的请求(每行代表一个真实请求,我破坏了真实 IP隐私):
10.83.103.44, 10.83.103.44
10.83.198.52, 10.83.198.52
10.53.109.36, …Run Code Online (Sandbox Code Playgroud) 我在多个其他服务器上的应用程序前面使用 HAproxy。我想在本地 nginx 实例中设置一个 vhost,它仅为每个请求提供 503(在所有后端都关闭时用作“备份”服务器)。我知道如何设置自定义错误页面(如当我的代理应用程序服务器关闭时如何让 Nginx 返回 HTTP 503?)但是我如何才能使每个对 nginx 的请求都返回 503?
我正在尝试设计一种架构来处理大量 TCP 套接字连接,但我对这种架构的局限性表示怀疑。
我将不得不处理大约 20k 个并发TCP 连接,这些连接是长轮询连接,它们将保持连接很长时间,并且每分钟发送一次数据。
使用线程是没有问题的,因为 20k 线程会耗尽系统资源。我打算使用gevent来处理如此多的并发连接,或者甚至使用haproxy和 2 个服务器(w/gevent)来处理每个连接 10k 个连接。这有道理吗?有没有人有一些建议或有使用具有 10K+ 连接的gevent 的经验?有没有人知道处理这些连接的硬件要求?我看到一些基准测试显示了 5k 并发连接上 gevent 的大量连接超时,这对我的问题来说不是很有希望。
注意:我已经阅读了关于 C10k 问题和“百万用户彗星应用程序”的建议。
我试图在一个端口 (8080) 上捕获 http 流量并将其重定向到一个内部端口 (12345)。我的 haproxy.cfg 中有以下内容
frontend rest_front
bind *:8080
#reqadd X-Forwarded-Proto:\ http
#reqadd X-Forwarded-Port:\ 12345
acl host_rest hdr(host) -i mypublicserver.myhost.com
stats uri /haproxy?stats
acl url_blog path_beg /blog
# figure out which one to use
use_backend rest_cluster if host_rest
backend rest_cluster
server rest_server_host myinternalserver.myotherhost.com:12345 check
Run Code Online (Sandbox Code Playgroud)
当我测试与 mypublicserver.myhost.com 的连接时,我在日志文件中看到以下内容...
Aug 10 14:18:35 myproxy haproxy[30258]: <IP_ADDRESS>:56779 [10/Aug/2017:14:18:35.309] rest_front rest_front/<NOSRV> -1/-1/-1/-1/2 503 213 - - SC-- 1/0/0/0/0 0/0 "GET /somepage.html HTTP/1.1"
Run Code Online (Sandbox Code Playgroud)
我不明白为什么后端没有被击中。我使用的 URL 是http://mypublicserver.myhost.com:8080/somepage.html,它应该触发 acl。
我是 StackExchange 的新手,正在尝试寻找一些有关配置问题的帮助。我需要为 HAProxy 创建一个配置,它允许我将 Tomcat 应用程序上下文路径动态代理到子域。子域/路径不能硬编码,应设置为变量。我已经查看了整个站点中建议的其他内容,但没有一个涉及这个特定问题。到目前为止,我已经从各种现有建议中汇总了此配置。
这就是我需要的。
http://site1.domain.com/pathhttp://<ip>:8080/site1/path当 tomcat 应用程序返回指向资产的链接时,它们也会有一个需要重定向的路径。
https://site1.example.com/site1/image.jpghttps://site1.example.com/image.jpg我已经使用本网站的示例和其他指南获得了这么多,但我在这方面的知识有限。我不确定如何删除路径中的 site1。
# Frontend Definition
frontend tomcat_contexts
bind *:80
bind *:443 ssl crt /etc/haproxy/cert.pem
acl http ssl_fc,not
http-request redirect scheme https if http
reqadd X-Forwarded-Proto:\ https
default_backend cluster
# Backend Definition
backend cluster
balance roundrobin
cookie JSESSIONID prefix nocache
# Perform Subdomain url rewrite
http-request set-var(req.subdomain) req.hdr(host),lower,regsub(\.example\.com$,) if { hdr_end(host) -i .domain.com }
http-request …Run Code Online (Sandbox Code Playgroud) 我希望根据我接收流量的端口将我的自定义 http 端口流量重定向到自定义 https 端口
我有多个绑定语句:
bind 1.2.3.4:7777
bind 1.2.3.4:8888
bind 1.2.3.4:9999 ssl crt /etc/haporxy/somecert.crt
Run Code Online (Sandbox Code Playgroud)
我试过的:
acl is7777 dst_port 7777
http-request redirect code 301 https://%[req.hdr(Host)]:9999%[capture.req.uri] if is7777
Run Code Online (Sandbox Code Playgroud)
但是,当我查看 Chrome 开发工具中的日志时,我总是看到 req.hdr(Host) 的值保留了旧端口的值,因此我被重定向到
https://1.2.3.4:7777/:9999/.
Run Code Online (Sandbox Code Playgroud)
如何仅获取域名并将其重定向到所需的目标端口 9999
此外,像这样的事情:
http-request replace-value Host (.*):7777 \1:9999
Run Code Online (Sandbox Code Playgroud)
由于稍后有多个重定向,因此中断了应用程序流程。我需要从 7777(http) 转到 9999(https) 。haproxy 版本:1.5
我正在尝试通过容器 A(10.10.1.3,haproxy,以透明代理模式设置)将容器 B(10.10.1.2,使用 mysql 的自定义二进制文件并在端口 4242 上运行)的 tcp 流量路由到外部世界,它们共享10.10.1.0/24桥接模式下的相同用户定义的 docker 网络
容器 B 不暴露端口,只暴露容器 A。
在容器 B 上:
# ip route show
default via 10.10.1.1 dev eth0
10.10.1.0/24 dev eth0 proto kernel scope link src 10.10.1.2
# ip route replace default via 10.10.1.3
# ip route show
default via 10.10.1.3 dev eth0
10.10.1.0/24 dev eth0 proto kernel scope link src 10.10.1.2
Run Code Online (Sandbox Code Playgroud)
在容器 A(haproxy)上:
sysctl -w net.ipv4.ip_forward=1
sysctl -w net.ipv4.ip_nonlocal_bind=1
iptables -t mangle -N DIVERT
iptables -t mangle -A …Run Code Online (Sandbox Code Playgroud)