本地浏览器连接Google Compute Engine远程Neo4j服务器失败求助
解决本地浏览器连接GCE上Neo4j的WebSocket超时问题
咱一步步来排查你遇到的这个net::ERR_CONNECTION_TIMED_OUT问题,你已经改了neo4j.conf,那咱从几个关键环节逐个验证:
1. 确认Neo4j配置是否真的生效
先确保你修改的neo4j.conf里这几个核心参数是正确的,并且重启了服务:
dbms.default_listen_address=0.0.0.0:允许Neo4j监听所有网卡的请求,而不是仅本地dbms.connector.bolt.listen_address=0.0.0.0:7687:Bolt协议(WebSocket依赖这个)的监听地址,必须开放到所有IPdbms.connector.http.listen_address=0.0.0.0:7474:HTTP端口,浏览器访问的入口
修改完后一定要重启Neo4j,用命令:
# 如果是systemd管理的系统(比如Ubuntu 18.04+) sudo systemctl restart neo4j # 或者用Neo4j自带的脚本 neo4j restart
2. 检查GCE的防火墙规则(90%的概率是这里的问题!)
GCE默认会阻止外部对非标准端口的访问,你必须手动添加防火墙规则开放7474和7687端口:
- 登录GCE控制台,找到你的实例所在的VPC网络,进入「防火墙」页面
- 点击「创建防火墙规则」,填这些信息:
- 名称:比如
allow-neo4j-traffic(随便取) - 目标:选「实例标签」,给你的Neo4j实例加个标签(比如
neo4j-server),这里就填这个标签 - 来源IP范围:如果是自己测试,填你本地的公网IP更安全;如果是临时调试,可填
0.0.0.0/0(生产环境别这么干) - 协议和端口:勾选「tcp」,填入
7474,7687
- 名称:比如
- 保存后等个1-2分钟让规则生效
3. 验证GCE实例内部的端口监听状态
你用了netstat --listen,可以更精准地查Neo4j的端口是否真的在监听:
执行这条命令:
netstat -tulpn | grep neo4j
正常应该能看到类似这样的输出:
tcp6 0 0 :::7687 :::* LISTEN 1234/java tcp6 0 0 :::7474 :::* LISTEN 1234/java
如果看不到,说明Neo4j没正常启动,去看日志排查:
# systemd系统看日志 journalctl -u neo4j # 或者直接看Neo4j的日志文件 cat neo4j/logs/neo4j.log
4. 本地网络和浏览器的排查
- 先在本地终端用工具测试端口是否能通:
如果通不了,要么是GCE防火墙没配,要么是实例内部的本地防火墙拦了# 用telnet telnet xx.xx.xx.xx 7687 # 或者用nc(更直观) nc -zv xx.xx.xx.xx 7687 - 浏览器访问的时候,直接用
http://xx.xx.xx.xx:7474,不要手动输ws://地址——浏览器会自动通过HTTP页面建立WebSocket连接 - 检查浏览器的代理设置,有些代理会拦截WebSocket请求,试试关掉代理再连接
5. 实例内部本地防火墙的检查
如果GCE防火墙开了还是不通,看看实例上的本地防火墙(比如Ubuntu的ufw):
执行sudo ufw status,如果显示active,就添加规则:
sudo ufw allow 7474/tcp sudo ufw allow 7687/tcp sudo ufw reload
内容的提问来源于stack exchange,提问作者nikhil024
相关产品推荐
相关产品推荐

