【问题标题】:Running Neo4J (web) behind a reverse proxy and connecting to "bolt://localhost:7687"在反向代理后面运行 Neo4J (web) 并连接到“bolt://localhost:7687”
【发布时间】:2019-06-10 22:53:41
【问题描述】:

我在 Traefik 后面的 Docker 中运行 Neo4J。 Web 界面 (7474) 在 https 上公开,按预期工作。

通过网络界面,我尝试连接到 bolt://localhost:7687,我希望它可以工作,毕竟它在同一个容器中运行。相反,我收到了消息:

"ServiceUnavailable: WebSocket 连接失败。由于您的网络浏览器的安全限制,此 Neo4j 驱动程序无法获得失败的原因。请使用您的浏览器开发控制台确定失败的根本原因。常见的原因包括数据库不可用,使用错误的连接 URL 或临时网络问题。如果您启用了加密,请确保您的浏览器配置为信任 Neo4j 配置使用的证书。WebSocket readyState 为:3"

反向代理使用由我们公司 CA 签署的内部证书。 Neo4J 容器具有可用的根证书。 连接的客户端也有可用的根证书。

当尝试连接到容器本身中的 localhost:7687 时,它按预期工作; Cypher shell 也是如此。

GitHub 上也有一些关于可能导致这些问题的 Java 版本的帖子 - 我已尝试使用 Oracle JDK 8、OpenJDK 8(HotSpot 和 J9)。

浏览器似乎也不相关 - 所描述的问题在 FF、Chrome 和 Safari 中重现。

【问题讨论】:

  • 直接访问bolt://localhost:7687会有什么结果?
  • 按预期工作。容器中的 Cypher Shell 也是如此。

标签: docker https neo4j reverse-proxy traefik


【解决方案1】:

我遇到了同样的情况,这是我的解决方案,以便使用 Traefik 2.0.2 在 docker swarm 中运行 Neo4j 实例(在我的例子中是 Bloodhound)。由于 Traefik 的新路由器概念,它非常冗长且难以阅读,因为您必须定义五个路由器。但至少它可以工作,并使您能够通过 wss 和 bolt 访问 Web 界面和实际数据库。也许可以简化我的配置。

此外,我在 Traefik 的文件提供程序提供的动态配置文件中指定了由内部 PKI 签名的 redirectScheme 中间件和证书。

HTH!

version: '3.7'

services:
  neo4j:
    image: neo4j:latest
    networks:
      - traefiknet
    volumes:
      - type: volume
        source: data
        target: /data
      - type: volume
        source: logs
        target: /logs
      - type: volume
        source: conf
        target: /conf
    environment:
      - NEO4J_AUTH=neo4j/somepassword
      - NEO4J_ACCEPT_LICENSE_AGREEMENT=yes
    deploy:
      replicas: 1
      restart_policy:
        condition: any
      placement:
        constraints:
          - node.hostname == node-02
      labels:
        - traefik.http.services.neo4j.loadbalancer.server.port=7474
        - traefik.http.routers.neo4j.rule=Host(`neo4j.dockerswarm.domain.com`)
        - traefik.http.routers.neo4j-secure.rule=Host(`neo4j.dockerswarm.domain.com`)
        - traefik.http.routers.neo4j.service=neo4j
        - traefik.http.routers.neo4j-secure.service=neo4j
        - traefik.http.routers.neo4j.middlewares=httpsredirection@file
        - traefik.http.routers.neo4j-secure.tls=true
        - traefik.http.routers.neo4j.entrypoints=web
        - traefik.http.routers.neo4j-secure.entrypoints=web-secure

        - traefik.http.services.neo4jdb.loadbalancer.server.port=7687
        - traefik.http.routers.neo4jdb.rule=Host(`neo4jdb.dockerswarm.domain.com`)
        - traefik.http.routers.neo4jdb-secure.rule=Host(`neo4jdb.dockerswarm.domain.com`)
        - traefik.http.routers.neo4jdb.service=neo4jdb
        - traefik.http.routers.neo4jdb-secure.service=neo4jdb
        - traefik.http.routers.neo4jdb.middlewares=httpsredirection@file
        - traefik.http.routers.neo4jdb-secure.tls=true
        - traefik.http.routers.neo4jdb.entrypoints=web
        - traefik.http.routers.neo4jdb-secure.entrypoints=web-secure

        - traefik.tcp.services.neo4jdb.loadbalancer.server.port=7687
        - traefik.tcp.routers.neo4jdb.rule=HostSNI(`neo4jdb.dockerswarm.domain.com`)
        - traefik.tcp.routers.neo4jdb.service=neo4jdb
        - traefik.tcp.routers.neo4jdb.tls=true

networks:
  traefiknet:
    external: true

volumes:
  data:
  logs:
  conf:

【讨论】:

    猜你喜欢
    • 2014-07-22
    • 2013-05-16
    • 2023-03-25
    • 1970-01-01
    • 1970-01-01
    • 2022-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多