【问题标题】:neo4j HA healthcheck end-points return 401 through AWS load balancerneo4j HA 健康检查端点通过 AWS 负载均衡器返回 401
【发布时间】:2015-12-22 01:35:19
【问题描述】:

我在 AWS EC2 (Linux) 的私有子网中的 2 个虚拟机上运行 4 个节点(2 个集群节点、2 个仲裁节点)neo4j 2.2.5 企业集群。我能够启动集群并让成员加入它们。 我还配置了一个 AWD 弹性负载均衡器来访问不同机器的 7474 端口。负载均衡器健康检查配置如下端点。

      /db/manage/server/ha/available

但是,服务器返回 401 未授权,因为它们不包含授权标头。我不确定 AWS 是否允许您为运行状况检查传递身份验证值。是否可以让 neo4j 不需要“仅”这些健康检查 URL 的身份验证? (我不想为整个数据库禁用身份验证)。 谢谢, NN

【问题讨论】:

    标签: amazon-web-services neo4j load-balancing amazon-elb


    【解决方案1】:

    AWS ELB 不支持自定义标头,我建议您使用 HAproxy 代替 ELB - 这是对配置的精彩描述 - http://blog.armbruster-it.de/2015/08/neo4j-and-haproxy-some-best-practices-and-tricks/

    【讨论】:

      【解决方案2】:

      2.3.3 中提供以下内容:

      http://neo4j.com/docs/stable/ha-configuration.html#config_dbms.security.ha_status_auth_enabled

      dbms.security.ha_status_auth_enabled

      说明:需要授权才能访问 HA 状态端点。

      有效值:dbms.security.ha_status_auth_enabled 是一个布尔值。

      默认值:真

      将其更改为 false 将允许在没有安全性的情况下访问 HA 状态检查端点。我目前正在使用它作为将 AWS ELB 与 Neo4j 一起使用的一种方式,它工作得很好。

      【讨论】:

      • 谢谢托马斯!这应该是这个问题的公认答案。编辑:刚刚注意到 OP 的版本约束.. 无论如何这对那些运行最新 2.x 的人很有用
      【解决方案3】:

      需要将这两个变量设置为neo4j.conf中的false,这两个变量的默认值为true

      这些变量帮助ELB进行健康检查而无需身份验证

      dbms.security.ha_status_auth_enabled=false
      dbms.security.causal_clustering_status_auth_enabled=false
      

      用于设置弹性负载均衡器

      1. 负载均衡器需要配置以下监听器

      2. 设置两个弹性负载均衡器。一个用于读取,用于neo4j桌面,另一个用于将数据写入neo4j

      对于状态端点,请根据 Neo4j 版本检查 URL - https://neo4j.com/docs/operations-manual/current/monitoring/causal-cluster/http-endpoints/

      ELB 用于读取数据。

      健康检查 - http:7474/db/manage/server/causalclustering/available

      ELB 用于写入数据。

      健康检查 - http:7474/db/manage/server/causalclustering/writable

      【讨论】:

        【解决方案4】:

        回答您的问题 - 在 Neo4j 中,不可能仅针对一条路径禁止身份验证。正如我们看到的there - 白名单是硬编码的,不能扩展。


        也许您可以使用nginx 作为您的反向代理?

        解决办法:

        • 将 nginx 放在 Neo4j 实例的前面。
        • 配置标准代理设置
        • /db/manage/server/ha/available自动添加授权头

        有几篇文章可以帮助您进行设置:

        示例(未测试):

        location /db/manage/server/ha/available {
            proxy_set_header HOST "Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==";
        
            proxy_pass http://localhost:7474/db/manage/server/ha/available;
        }
        

        【讨论】:

        • 感谢您的建议!我很喜欢。我试过了,但不幸的是 neo4j 似乎不喜欢那个 auth 标头。它在响应中显示错误的标题
        • 我不确定应该如何准确地传递 Auth 标头。另外,请检查您发送的加密密码是否正确。
        【解决方案5】:

        其实 FylmTM 的解决方案是正确的方法!这只需要一些小的调整 - 请参见下文..

        location /db/manage/server/ha/available {
        proxy_set_header Authorization "Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==";
        proxy_pass_header  Authorization;
        proxy_pass http://ip-10-0-1-98:7474/db/manage/server/ha/available;
        

        }

        这解决了上述问题,您可以使用 AWS ELB 进行健康检查! 现在我仍然需要弄清楚为什么我在这些 url 上收到 404 错误(请参阅下面的这篇文章)

        neo4j HA cluster end points return 404

        【讨论】:

          猜你喜欢
          • 2021-04-20
          • 2020-01-12
          • 2013-04-11
          • 1970-01-01
          • 2016-08-05
          • 2021-08-14
          • 2019-08-27
          • 2015-08-04
          • 1970-01-01
          相关资源
          最近更新 更多