我们目前正在使用node_redis客户端访问redis.我需要在redis奴隶面前使用HAProxy,在我的情况下是3个.我安装了HAProxy并将其配置为负载均衡redis从站.但是当我尝试从node_redis客户端创建到HAProxy的连接时,我无法创建连接并且收到错误
Error: Redis reply parser error: Error: Protocol error, got "H" as reply type byte
at HiredisReplyParser.execute (/home/user1/doosra/node-exp/node_modules/redis/lib/parser/hiredis.js:32:31)
at RedisClient.on_data (/home/user1/doosra/node-exp/node_modules/redis/index.js:440:27)
at Socket.<anonymous> (/home/user1/doosra/node-exp/node_modules/redis/index.js:70:14)
at Socket.emit (events.js:67:17)
at TCP.onread (net.js:347:14)
Run Code Online (Sandbox Code Playgroud) 我最近从AWS ELB切换到HAProxy.我在负载均衡器(HAProxy 1.5dev19)上终止SSL.
自切换以来,我在HAProxy日志中不断收到一些SSL连接错误(占请求总数的5-10%).重复出现三种类型的错误:SSL握手期间连接关闭SSL握手期间超时SSL握手失败(很少发生这种情况)
我正在使用免费的StartSSL证书,所以我首先想到的是有些主机在接受此证书时遇到了问题,而且我之前没有看到这些错误,因为ELB没有提供日志记录.唯一的问题是一些主机最终确实有成功的连接.
我可以没有任何错误连接到服务器,所以我不知道如何在我的最终复制这些错误.
我试图了解这两者之间的基本用例,以及何时优先使用另一种。
任何与实际用例相关的链接都很好
使用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传递给其他后端服务?
我有一个Sentry应用程序,在url上正确运行:mydomain.com:11011.
我有一个用CDN创建的项目:http:// XXX:YYY@mydomain.com:11011/2
使用此配置,此URL与HAProxy一起提供:
listen sentry *:11011
mode tcp
server app1 localhost:9005 maxconn 32
Run Code Online (Sandbox Code Playgroud)
哨兵的配置:
SENTRY_KEY = 'foo'
SENTRY_PUBLIC = True
SENTRY_URL_PREFIX = 'http://mydomain.com:11011' # No trailing slash!
SENTRY_WEB_HOST = 'localhost'
SENTRY_WEB_PORT = 9005
SENTRY_WEB_OPTIONS = {
'workers': 1, # the number of gunicorn workers
'worker_class': 'gevent',
}
Run Code Online (Sandbox Code Playgroud)
但是当我从同一台服务器上尝试Raven测试时,我的身份验证有问题:
$ raven test http://XXX:YYY@mydomain.com:11011/2
HTTPError: HTTP Error 401: UNAUTHORIZED
Run Code Online (Sandbox Code Playgroud)
也失败了:
$ raven test http://XXX:YYY@localhost:9005/2
HTTPError: HTTP Error 401: UNAUTHORIZED
Run Code Online (Sandbox Code Playgroud)
可能是什么问题呢?谢谢.
这个问题让我感到疯狂,所以也许有人可以帮我理解问题所在.我有一个tomcat web应用程序正面向HAProxy.HAProxy也在进行SSL卸载,并配置为使用粘性会话.我正在使用Tomcat的会话复制功能,这似乎工作正常.会话出现在两个appservers上.
出于某种原因,Tomcat为每个Web请求生成一个新的JSESSIONID,然后将旧会话的内容复制到新会话中.也就是说,我的会话内容仍在新会话中,但会生成新ID并将其发送回客户端.但它只对我的Web应用程序执行此操作.它不会对/ manager应用程序执行此操作.
我已经尝试了本书中的每一个技巧,比如在我的context.xml中设置它:
<Valve className="org.apache.catalina.authenticator.BasicAuthenticator" changeSessionIdOnAuthentication="false" />
Run Code Online (Sandbox Code Playgroud)
并在我的Context元素上设置这些属性:
<Context path="/myapp" reloadable="false" override="true" useNaming="false" allowLinking="true" useHttpOnly="false" sessionCookiePath="/" sessionCookiePathUsesTrailingSlash="false">
Run Code Online (Sandbox Code Playgroud)
而且,结果仍然是一样的.Tomcat为每个请求生成一个新的会话ID,并将旧会话的内容复制到新的id中.
我怀疑它与HAProxy有关,除了/ manager应用程序也在HAProxy后面,它没有表现出这种行为.
为什么Tomcat这样做,我该怎么做才能阻止它呢?
我正在尝试根据下面 POST 正文中标识的 URL 将以下请求路由到适当的服务器。我希望通过使用 HAProxy 的反向代理来实现这一点。
例如,我想将所有请求定向到 HAProxy,而不是让 HAProxy 检查 POST 正文中是否存在某些值(例如通知 url 值“pingpong”),如果是这种情况,请将流量路由到我将指定的内点在配置中。
POST /someURL/file.jsp HTTP/1.1
Host: 10.43.90.190:80
Content-Type: application/json
Connection: keep-alive
Accept: */*
Content-Length: 256
{"Info": {"groupName":"thisgroup1","Id":"M1234R456","id2":"TUP1234",
"countryCode":"USA","carrierCode":"USAIC","e164Address":"123456768789",
"notificationURL":"http:\/\/www.pingpong.com\/notify",
"timestamp":"2014-03-04T17:33:30.000Z"}}
Run Code Online (Sandbox Code Playgroud)
有什么方法可以使用 acl 来搜索请求正文中的内容“乒乓”,并根据这个值,我会适当地路由它吗?
谢谢!
以下请求经常超时:
<body rid='57993057' xmlns='http://jabber.org/protocol/httpbind' sid='1db840cbfd20e3922f594cc2017421a1858cca7a'><a xmlns='urn:xmpp:sm:3' h='9'/></body>
Run Code Online (Sandbox Code Playgroud)
控制台日志显示:
请求的资源上不存在"Access-Control-Allow-Origin"标头.
我正在使用带有haproxy的ejabberd服务器.
我对 HTTP 协议和一点点 HAProxy 非常熟悉,但我以前从未真正搞过 URL 重写和重定向。现在,我有 2 个“简单”的 HTTP 重定向要求,我一直很难弄清楚。
https://appserver.example.com应重定向到https://appserver.example.com/myapp/webapp/?auth=saml将用户指向saml登录页面。https://appserver.example.com/?auth=standard应该重定向到https://appserver.example.com/myapp/webapp/?auth=standard要求 1 工作正常:
myuser:~ myuser$ curl -I https://appserver.example.com
HTTP/1.1 301 Moved Permanently
Content-length: 0
Location: https://appserver.example.com/myapp/webapp/?auth=saml
Connection: close
myuser:~ myuser$
Run Code Online (Sandbox Code Playgroud)
但我在如何实施#2 上遇到了困难。正如我所想,关键是添加一个acl,然后在匹配http-request redirect prefix时添加另一行。acl
acl is_auth_std path /?auth=standard
http-request redirect prefix /myapp/webapp/?auth=standard code 301 if is_auth_std
Run Code Online (Sandbox Code Playgroud)
但显然这还不够。/?auth=standard仍然重定向到假定的根 URL:
myuser:~ myuser$ curl -I https://appserver.example.com/?auth=standard
HTTP/1.1 301 Moved Permanently
Content-length: 0
Location: https://appserver.example.com/myapp/webapp/?auth=saml
Connection: close …Run Code Online (Sandbox Code Playgroud)