You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为Docker部署的Neo4j添加基础前缀以实现代理端口路由?

配置代理服务器将Docker部署的Neo4j路由到HTTPS

我来帮你搞定Docker部署的Neo4j通过代理转HTTPS的事儿,咱们分浏览器UI和Bolt协议两部分来配置——毕竟这俩的处理逻辑不太一样,得分别调整~

1. 先调整Neo4j容器的基础前缀配置

要让Neo4j知道自己是通过代理的HTTPS地址对外提供服务,得在启动Docker容器时设置几个关键环境变量:

  • NEO4J_SERVER_BASE_URI:指定Neo4j浏览器UI的外部HTTPS访问前缀,比如你的域名是your-domain.com,代理前缀设为/neo4j,那这个值就填https://your-domain.com/neo4j
  • NEO4J_dbms_connector_http_advertised__address:告诉Neo4j对外暴露的HTTP地址,填your-domain.com:443/neo4j就行(443是HTTPS默认端口)

给你个Docker启动命令的示例,直接改改参数就能用:

docker run -d \
  --name neo4j \
  -p 7474:7474 \
  -p 7687:7687 \
  -e NEO4J_AUTH=neo4j/your-secure-password \
  -e NEO4J_SERVER_BASE_URI="https://your-domain.com/neo4j" \
  -e NEO4J_dbms_connector_http_advertised__address="your-domain.com:443/neo4j" \
  neo4j:latest

2. 配置代理服务器(以常用的Nginx为例)

代理要同时处理两种请求:浏览器的HTTP/HTTPS请求,以及Bolt的二进制协议请求,得分开配置。

2.1 浏览器UI的HTTPS反向代理

在Nginx的站点配置里加这段,实现前缀重写和反向代理:

location /neo4j/ {
    # 把请求转发到本地的Neo4j HTTP端口
    proxy_pass http://localhost:7474/;
    # 传递必要的请求头,让Neo4j识别真实请求信息
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    
    # 重写路径:把代理的/neo4j前缀去掉,转发给Neo4j的根路径
    rewrite ^/neo4j/(.*)$ /$1 break;
}

2.2 Bolt协议的代理配置

Bolt是二进制协议,没法用普通的HTTP location配置,得用Nginx的stream模块做TCP转发+SSL终止。在Nginx的主配置文件(比如nginx.conf)里加这段:

stream {
    server {
        # 监听HTTPS的Bolt端口(这里用默认的7687,也可以改成自定义端口比如7688)
        listen 7687 ssl;
        # 填你的SSL证书和密钥路径
        ssl_certificate /path/to/your/ssl/cert.pem;
        ssl_certificate_key /path/to/your/ssl/key.pem;
        
        # 把加密后的TCP流量转发到Docker映射的Neo4j Bolt端口
        proxy_pass localhost:7687;
    }
}

3. 验证配置是否生效

  • 打开浏览器访问https://your-domain.com/neo4j,应该能正常看到Neo4j的登录界面,输入你设置的账号密码就能进入
  • 用Neo4j客户端(比如Neo4j Desktop或者代码里的驱动)连接bolt+s://your-domain.com:7687,测试Bolt连接是否正常(注意是bolt+s协议,因为用了SSL加密)

一些额外注意点

  • 确保Docker容器的7474、7687端口已经正确映射到宿主机,防火墙也开放了对应的端口
  • 代理服务器的SSL证书必须是有效的(比如用Let's Encrypt的免费证书),否则浏览器和Bolt客户端会报错
  • 如果用的是Apache等其他代理服务器,逻辑类似:HTTP部分做前缀重写和反向代理,Bolt部分做TCP转发+SSL终止

内容的提问来源于stack exchange,提问作者Benjamin Tobalt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 03:39:37