我在 HAProxy 设置了一堆侦听其他各种端口的应用程序服务器方面取得了一些初步成功。
我现在有另一个网络服务器在一个端口上侦听,我想对我的配置进行哪些更改以按主机名传输流量。
以下是当前设置,假设:
Run Code Online (Sandbox Code Playgroud)global log 127.0.0.1 local0 log 127.0.0.1 local1 notice maxconn 4096 debug #quiet #user haproxy #group haproxy defaults log global mode http option httplog option dontlognull retries 3 redispatch maxconn 2000 contimeout 5000 clitimeout 50000 srvtimeout 50000 listen appservers 0.0.0.0:80 mode http balance roundrobin option httpclose option forwardfor #option httpchk HEAD /check.txt HTTP/1.0 server inst1 0.0.0.0:8081 cookie server01 check inter 2000 fall 3 server inst2 0.0.0.0:8082 …
我有 HAproxy 的问题。
我使用 HAproxy 作为负载均衡器,它将传入的 http 请求分发到 5 个 Web 服务器。通常,客户端请求会通过负载均衡器的 IP 转发到 Web 服务器。但是我需要从 Web 服务器请求某些内容的客户端 IP 或真实 IP。因为我们需要记录真实客户端的 IP。
我尝试在 Web 服务器上获取客户端的 IP,但到目前为止我无法成功。我总是看到负载均衡器的 IP。
我使用 x-forward-for 选项,但没有解决问题。之后,我找到了另一个选项“ source 0.0.0.0:80 usesrc clientip ”,但在尝试运行 HAproxy 时出错,这是关于使用 HAproxy 的 USE_TPROXY 选项的编译需求。我做到了,我用 USE_TPROXY 选项重新编译了 HAproxy,但没有改变任何东西。我该怎么做才能了解真实客户的 IP。
我的 linux 内核版本是 2.6.32-34 我的意思是内核支持透明代理。我使用 UBUNTU 10.4 LTS
我的配置文件在这里
global
maxconn 100000
uid 99
gid 99
daemon
defaults
option forwardfor except 127.0.0.1
mode http
(1)source 0.0.0.0:80 interface hdr_ip(x-forwarded-for,-1)
(2)source 0.0.0.0:80 usesrc clientip
contimeout 5000
clitimeout …Run Code Online (Sandbox Code Playgroud) HAProxy 为您提供了将模式设置为 TCP 或 HTTP 的选项。它还允许您设置端口。
那么为什么允许我在 HTTP 和 TCP 之间进行选择,如果它也让我选择端口呢?当然,如果我想要 HTTP,我可以只选择 TCP 和端口 80?
为什么只有 TCP 和 HTTP?似乎暗示 HTTP 不是 TCP。为什么没有 TCP、HTTP、SNMP、FTP 等等等等。
为什么只是 HTTP 和 TCP?如果 HTTP 是 TCP,为什么要选择这两个选项中的任何一个?发现很混乱,真的很难找到任何关于负载均衡非http(s)服务的信息。
我们希望能够按需添加更多后端服务器。现在我没有看到一种方法可以在不重新启动 haproxy 的情况下将更多后端服务器添加到配置文件中。
负载平衡器设置有两个后端。
请求 URI 将如下所示:
http://example.com/answers/submit
http://example.com/tag-02/answers/submit
Run Code Online (Sandbox Code Playgroud)
如何根据请求 URI 的格式,以将请求发送到两个后端中的一个或另一个的方式配置 haproxy?请求之间的唯一区别在于/tag-02/请求 URI。
对此有一些解释的 haproxy 配置文件将不胜感激,因为我是 haproxy 的新手。
这是一个奇怪的。
我已经通过以下方式安装了 CentOS 6 的 EPEL
# rpm -Uvh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
Run Code Online (Sandbox Code Playgroud)
尝试安装 HAProxy:
# yum update
# yum install haproxy
Run Code Online (Sandbox Code Playgroud)
但收到:
Loaded plugins: fastestmirror, security
Loading mirror speeds from cached hostfile
* base: ftp.heanet.ie
* epel: fedora.mirror.nexicom.net
* extras: ftp.heanet.ie
* updates: ftp.heanet.ie
Setting up Install Process
No package haproxy available.
Error: Nothing to do
Run Code Online (Sandbox Code Playgroud)
不明白为什么找不到haproxy!帮助?
我目前正在使用 1.5dev-17 重新配置 HAProxy。我想做的是在没有后端用于特定请求时返回 404 错误。
我们当前的配置使用 default_backend 路由到我们的 django 应用服务器,但是当有大量探测请求(如笔测试)与其他配置的后端都不匹配时,我们的 django 服务器在尝试时会停止为这些无效请求提供服务,最终返回 404。
我想从 HAProxy 提供 404,而不是委托给 django 后端。我目前正在通过黑客实现这一目标:
frontend www
...
default_backend nomatch
backend nomatch
errorfile 503 /var/www/http/404.http
Run Code Online (Sandbox Code Playgroud)
在 404.http 文件中,我在标题中设置了 404 状态代码。这有效,但感觉非常错误。使用 HAProxy 有没有更好的方法来实现这一点?或者我应该使用常规后端并让它处理 404 响应?
我有 haproxy 1.5.8,它将一些请求(基于路径)代理给我们无法控制的第三方。
由于后端服务器的IP在启动时是一次性解析的,如果IP改变就会中断。
如果有解决方法吗?在 nginx 中,可以声明一个内部变量并将其缓存 X 秒。我没有为 HAProxy 找到类似的解决方案。
有什么关于什么时候应该使用roundrobin和什么时候使用的建议leastconn吗?
我roundrobin目前正在使用并观察到我的后端服务器的负载分布不均匀。当然可能还有其他问题,但我们想leastconn尝试一下,但由于它是一个关键任务服务器,我想在进行更改之前咨询其他经验。
有什么想法可以分享吗?
我ppa:vbernat/haproxy-1.5根据http://haproxy.debian.net/在 ubuntu 14.04 上通过 apt-get 安装了 haproxy 1.5
问题是它登录/var/log/syslog而不是/var/log/haproxy.log
设置基本上是默认设置:
/etc/haproxy/haproxy.cfg
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
ssl-default-bind-options no-sslv3
defaults
log global
mode http
option httplog
option dontlognull …Run Code Online (Sandbox Code Playgroud)