我有这样的haproxy配置:
frontend api
mode http
default_backend tomcat
backend tomcat
mode http
balance roundrobin
option httpchk HEAD / HTTP/1.0
server tomcat1 10.0.0.1:1234 weight 1 maxconn 512 check
server tomcat2 10.0.0.2:1234 weight 1 maxconn 512 check
Run Code Online (Sandbox Code Playgroud)
这可行,但网址必须像:http://api.example.com/project/api/get-something我们想以某种方式设置haproxy以便网址http://api.example.com/api/get-something会得到相同的结果.
我试着添加url前缀:
server tomcat1 10.0.0.1:1234/project/ weight 1 maxconn 512 check
server tomcat2 10.0.0.2:1234/project/ weight 1 maxconn 512 check
Run Code Online (Sandbox Code Playgroud)
但它不受支持.有没有办法只使用haproxy才能做到这一点?我不想只为代理tomcat而设置apache.
尝试在1.5-dev17上启用ssl时获取段错误
Ubuntu Server 12.04
尝试使用私钥和CA捆绑连接并用作单个crt几乎可以想到的每个变体,还尝试使用私钥和ca-file作为CA捆绑包拆分crt.
/etc/haproxy/haproxy.cfg
global
maxconn 4096
daemon
defaults
mode http
contimeout 5000
clitimeout 50000
srvtimeout 50000
option forwardfor
retries 3
option redispatch
option http-server-close
frontend http
bind *:80
reqadd X-Forwarded-Proto:\ http
default_backend unicorn
frontend https
bind *:443 ssl crt /path/to/private.key ca-file /path/to/bundle.crt
reqadd X-Forwarded-Proto:\ https
default_backend unicorn
backend unicorn
server unicorn 127.0.0.1:8080 check
listen stats :8081
mode http
stats enable
stats scope unicorn
stats realm Haproxy\ Statistics
stats uri /
stats auth haproxy:YOURPASSWORDHERE
Run Code Online (Sandbox Code Playgroud)
gdb输出
Reading symbols from …Run Code Online (Sandbox Code Playgroud) 我正在使用带有龙卷风的Haproxy作为websocket.如果我直接连接龙卷风我的连接工作正常,但如果我使用HAproxy与下面的配置然后连接50秒后关闭.我的Haproxy配置文件如下.
global
daemon
maxconn 4032
pidfile /var/run/haproxy.pid
defaults
mode http
timeout connect 5000ms
timeout client 50000ms
timeout server 50000ms
option http-server-close
maxconn 4032
frontend http-in
bind *:80
acl is_websocket hdr_end(host) -i WebSocket
use_backend servers if is_websocket
default_backend servers
option redispatch
option http-server-close
maxconn 2000
contimeout 500000
clitimeout 500000
srvtimeout 500000
contimeout 500000
timeout contimeout 500000
timeout connect 500000
backend servers
server server1 127.0.0.1:8886 maxconn 4032
Run Code Online (Sandbox Code Playgroud)
现在通过使用上面的配置,我的websocket连接在50秒后自动丢失.我想做持久连接,所以有没有办法在HAproxy中建立连接?
我必须将haproxy放在我已运行的Apache Web服务器前面.haproxy和apache web-server都在不同的Cent-OS6.4机器上.我已经安装了haproxy-1.5-dev19.el6.x86_64并且它可以正常使用http,但是使用https得到以下错误: - "502 Bad Gateway:服务器返回了无效或不完整的响应".
haproxy日志如下所示:
Nov 7 05:49:56 localhost haproxy[9925]: XX.XX.XXX.XX:51949
[07/Nov/2013:05:49:55.204] https-in~ abc-https/server1
1595/0/1/-1/1597 502 714 - - PHNN 2/2/0/0/0 0/0 "GET / HTTP/1.1"
Nov 7 05:49:57 localhost haproxy[9925]: XX.XX.XXX.XX:51947
[07/Nov/2013:05:49:55.972] https-in~ abc-https/server1
1523/0/1/-1/1525 502 714 - - PHNN 1/1/0/0/0 0/0 "GET /favicon.ico HTTP/1.1"
Run Code Online (Sandbox Code Playgroud)
Web服务器上的SSL日志(代理后面的请求):
10.0.0.218 - - [06/Nov/2013:22:42:34 -0800] **"GET /"** 400 510
10.0.0.218 - - [06/Nov/2013:22:42:34 -0800] "GET /" 400 510
Run Code Online (Sandbox Code Playgroud)
SSL登录Web服务器(直接请求):
XX.XX.XX.XX - - [06/Nov/2013:22:48:42 -0800] **"GET / HTTP/1.1"** 200 19553
Run Code Online (Sandbox Code Playgroud)
您可以在Web服务器上看到代理与无代理之间的区别.
下面是我的haproxy.cfg文件: …
我发现当流量很高时,使用这样的命令仍然有失败的请求
haproxy -f /etc/haproxy.cfg -p /var/run/haproxy.pid -sf $(cat /var/run/haproxy.pid)
Run Code Online (Sandbox Code Playgroud)
热重新加载更新的配置文件.
以下是使用webbench的压力测试结果:
/usr/local/bin/webbench -c 10 -t 30 targetHProxyIP:1080
Webbench – Simple Web Benchmark 1.5
Copyright (c) Radim Kolar 1997-2004, GPL Open Source Software.
Benchmarking: GET targetHProxyIP:1080
10 clients, running 30 sec.
Speed=70586 pages/min, 13372974 bytes/sec.
**Requests: 35289 susceed, 4 failed.**
Run Code Online (Sandbox Code Playgroud)
我跑命令
haproxy -f /etc/haproxy.cfg -p /var/run/haproxy.pid -sf $(cat /var/run/haproxy.pid)
Run Code Online (Sandbox Code Playgroud)
在压力测试期间多次.
在haproxy文档中,它提到了
他们将收到SIGTTOU 611信号,要求他们暂时停止收听端口,以便新的612进程可以抓住它们
所以有一个时间段旧的进程没有在PORT上监听(比如说80)并且新的进程还没有开始收听PORT(比如80),并且在这个特定的时间段内,它将导致新的进程连接失败,有意义吗?
那么是否有任何方法可以使haproxy的配置重新加载,而不会影响现有连接和新连接?
我想使用haproxy部署一个ftp代理服务器.这是场景:
ftp client <---> ftp-proxy-server(ip:10.0.1.1)<---> ftp-server(ip:172.126.1.1)
ftp服务器侦听端口21的控制命令,数据端口范围[20100-20199]
我在ftp-proxy-server上有haproxy配置:
listen ftp-proxy-server 10.0.1.1:21
mode tcp
server ftp-server 172.126.1.1:21
listen ftp-proxy-server 10.0.1.1:20100-20199
mode tcp
server ftp-server 172.126.1.1:20100-20199
Run Code Online (Sandbox Code Playgroud)
这是问题,我可以从ftp-client成功登录ftp服务,但无法执行输出"连接被拒绝"消息的ls命令.我想原因是从ftp-proxy-server到ftp-server的端口映射是随机的.所以当ftp-client获得一个保留端口(例如20101),但是ftp-proxy-server可能会将它映射到另一个端口(例如20109),这不是分配给ftp-client的端口ftp-server.
我想到一个配置100个侦听的解决方案,一个侦听一个端口,但编写配置文件很复杂.是一个简单的配置选项来逐个映射端口?就像10.0.1.1:20001 - > 172.126.1.1:20001,10.0.1.1:20002 - > 172.126.1.1:20002一样.
欢迎回答:)
我们在Amazon EC2上设置了haproxy(v 1.5.1),它正在完成两项工作
我们服务器上的ulimit是128074,并发连接是~3000.
我们的配置文件如下所示.我们面临的问题是haproxy日志中的时间Tq非常高(2-3秒).配置或我们遗漏的东西有什么问题吗?
global
daemon
maxconn 64000
tune.ssl.default-dh-param 2048
log 127.0.0.1 local0 debug
defaults
mode http
option abortonclose
option forwardfor
option http-server-close
option httplog
timeout connect 9s
timeout client 60s
timeout server 30s
stats enable
stats uri /stats
stats realm Haproxy\ Statistics
stats auth username:nopass
frontend www-http
bind *:80
maxconn 64000
http-request set-header U-Request-Source %[src]
reqadd X-Forwarded-Proto:\ http
errorfile 503 /var/www/html/sorry.html
acl host_A hdr_dom(host) -f /etc/A.lst
acl host_B hdr_dom(host) -f /etc/B.lst
use_backend www-A if …Run Code Online (Sandbox Code Playgroud) 我正在使用haproxy来平衡一组服务器.我正在尝试向haproxy配置添加维护页面.我相信我可以通过使用'backup'修饰符在后端定义服务器声明来实现此目的.问题是,我如何使用远程托管在AWS S3存储桶(静态网站)上的维护页面,而不实际将用户重定向到该页面(即haproxy服务器'redir'定义).
如果我有服务器:a,b,c.所有服务器都停机进行维护,然后我希望所有请求都由服务器定义d(标有'backup')解析为S3上的静态地址.请注意,我不希望路径继承并在s3上进行评估,它应始终呈现静态维护页面.
我们正在尝试使用HAProxy + Lua构建传入请求验证平台.我们的用例是创建一个LUA脚本,它基本上会对Validation API进行套接字调用,并且基于Validation API的响应,我们希望将请求重定向到后端API,如果验证失败,我们希望从LUA脚本返回请求权限.例如,对于200响应,我们希望将请求重定向到后端api,对于404,我们希望返回请求.从文档中,我了解Lua-Haproxy集成有各种默认函数.
core.register_action() --> I'm using this. Take TXN as input
core.register_converters() --> Essentially used for string manipulations.
core.register_fetches() --> Takes TXN as input and returns string; Mainly used for representing dynamic backend profiles in haproxy config
core.register_init() --> Used for initialization
core.register_service() --> You have to return the response mandatorily while using this function, which doesn't satisfy our requirements
core.register_task() --> For using normal functions. No mandatory input class. TXN is required to fetch header details …Run Code Online (Sandbox Code Playgroud) 如果您在Openshift3中扩展Pod,则来自同一客户端IP地址的所有请求都将发送到与会话关联的容器.
是否有任何配置可以禁用粘性会话?如何在Openshift中管理内部HAProxy的选项?
haproxy ×10
amazon-ec2 ×1
amazon-s3 ×1
containers ×1
docker ×1
ftp ×1
https ×1
lua ×1
networking ×1
openshift ×1
openssl ×1
reload ×1
session ×1
ssl ×1
tornado ×1
validation ×1
websocket ×1