如何在Navicat中配置HTTP通道以穿透防火墙连接数据库?

夏晨酱_2123

夏晨酱_2123

2026-06-22

570人浏览

原创

HTTP隧道本质是PHP脚本中转TCP流量,非真正基于HTTP协议;Navicat通过上传tunnel.php到公网Web服务器,由其连接内网数据库(如192.168.1.100:3306)并透传请求,需确保PHP≥5.6、sockets扩展启用、allow_url_fopen开启、脚本权限644且数据库地址填内网IP而非localhost。

HTTP隧道不是走HTTP协议,而是用PHP脚本中转TCP流量

navicat 的「http 隧道」功能实际不依赖 http 协议本身,它只是把 tunnel.php(或 ntunnel_mysql.php)当作一个 tcp 流量转发器。脚本运行在公网 web 服务器上,由它主动连接内网数据库(如 192.168.1.100:3306),再把 navicat 的请求包一层层透传过去。所以它能绕过防火墙限制,本质是“让数据库看起来像在 web 服务器本地”。

常见错误现象包括:Connection refused、Script not found、浏览器访问 tunnel.php 返回 PHP 错误或下载弹窗——这些问题几乎都跟脚本没真正跑起来有关。

  • PHP 版本必须 ≥ 5.6(Navicat 官方硬性要求),且 allow_url_fopen = On
  • Linux 下需确认 sockets 扩展已启用(extension=sockets 在 php.ini 中未被注释)
  • tunnel.php 文件权限设为 644,所在目录不能被 .htaccess 拒绝访问(例如别放 /admin/ 子目录下)
  • 脚本里硬编码的数据库地址必须填内网 IP(如 192.168.1.100),不能写 localhost 或 127.0.0.1(那是 Web 服务器本机)

Navicat 15 中 HTTP 隧道配置的关键字段填什么

配置入口在「连接设置 → SSH 标签页」,注意不是「常规」或「高级」页,更不是 SSH 设置本身——这里 UI 设计容易误导人。填错位置会导致 Navicat 完全忽略 HTTP 隧道选项。

  • HTTP 隧道 URL:必须是完整可访问地址,如 https://your-domain.com/ntunnel_mysql.php;必须带 http:// 或 https://,末尾不能有斜杠
  • 目标主机:填内网数据库真实 IP(如 192.168.1.100),不是 Web 服务器 IP,也不是 localhost
  • 目标端口:填 MySQL/PostgreSQL/SQLite 实际监听端口(MySQL 默认 3306,但内网可能改过)
  • 用户名 和 密码:填数据库账号凭据,不是 Web 登录凭证;Navicat 不会把它们发给 PHP 脚本,脚本里也不读取这些字段

填完后,先别急着点测试。打开浏览器直接访问那个 HTTP 隧道 URL,应返回纯文本 OK 或空白响应;任何 PHP 报错、404、500 或文件下载行为,都说明脚本未就绪。

navicatmysql
navicatmysql

Navicat For MySQL

下载

SQLite 连接时路径和权限最容易出错

SQLite 不是服务型数据库,ntunnel_sqlite.php 必须能以 Web 进程身份读写数据库文件。很多人填了绝对路径却失败,根本原因是 PHP 进程无权访问该路径,或路径相对于脚本位置算错了。

  • 数据库文件路径必须是相对于 ntunnel_sqlite.php 所在目录的相对路径(例如脚本在 /var/www/html/,db 文件在同级 data/test.db,就填 data/test.db)
  • 若填绝对路径(如 /home/user/db.sqlite),需确保 Web 用户(如 www-data 或 apache)对该路径有读+执行权限(execute 权限对目录是必须的)
  • PHP 必须启用 SQLite3 扩展:Ubuntu/Debian 下运行 sudo apt install php-sqlite3,CentOS/RHEL 下用 sudo yum install php-sqlite
  • Apache/Nginx 日志里若出现 Permission denied 或 no such file or directory,优先检查文件路径拼写和父目录的 x 权限

为什么连得上却查不出数据?注意字符集和超时设置

HTTP 隧道本质是长连接 + 多次 HTTP 请求模拟 TCP 流,中间环节多,比直连或 SSH 隧道更容易触发超时或编码异常。尤其当查询返回大量结果、含中文字段、或数据库启用了严格模式时。

  • Navicat「高级」选项卡中,Initial charset 建议设为 utf8mb4,否则中文可能乱码或报错 Illegal mix of collations
  • PHP 脚本默认执行时间短(max_execution_time = 30),大数据量导出易中断;需在 ntunnel_*.php 开头加 set_time_limit(300)
  • Web 服务器(如 Nginx)可能有 fastcgi_read_timeout 限制,默认 60 秒;若备份大库卡住,需同步调高该值
  • 某些 CDN 或 WAF(如 Cloudflare)会拦截非标准 HTTP 请求体,导致隧道静默失败;调试阶段建议暂时关闭

最常被忽略的是:HTTP 隧道无法支持所有 MySQL 协议特性,比如存储过程调试、部分 PREPARE 语句、以及实时 binlog 订阅——它只保证基础 CRUD 和结构同步可用。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

navicat 防火墙

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
数据库三范式
数据库三范式

数据库三范式是一种设计规范,用于规范化关系型数据库中的数据结构,它通过消除冗余数据、提高数据库性能和数据一致性,提供了一种有效的数据库设计方法。本专题提供数据库三范式相关的文章、下载和课程。

2023.06.29

2505

3

如何删除数据库
如何删除数据库

删除数据库是指在MySQL中完全移除一个数据库及其所包含的所有数据和结构,作用包括:1、释放存储空间;2、确保数据的安全性;3、提高数据库的整体性能,加速查询和操作的执行速度。尽管删除数据库具有一些好处,但在执行任何删除操作之前,务必谨慎操作,并备份重要的数据。删除数据库将永久性地删除所有相关数据和结构,无法回滚。

2023.08.14

3781

10

vb怎么连接数据库
vb怎么连接数据库

在VB中,连接数据库通常使用ADO(ActiveX 数据对象)或 DAO(Data Access Objects)这两个技术来实现:1、引入ADO库;2、创建ADO连接对象;3、配置连接字符串;4、打开连接;5、执行SQL语句;6、处理查询结果;7、关闭连接即可。

2023.08.31

2731

3

MySQL恢复数据库
MySQL恢复数据库

MySQL恢复数据库的方法有使用物理备份恢复、使用逻辑备份恢复、使用二进制日志恢复和使用数据库复制进行恢复等。本专题为大家提供MySQL数据库相关的文章、下载、课程内容,供大家免费下载体验。

2023.09.05

907

5

vb中怎么连接access数据库
vb中怎么连接access数据库

vb中连接access数据库的步骤包括引用必要的命名空间、创建连接字符串、创建连接对象、打开连接、执行SQL语句和关闭连接。本专题为大家提供连接access数据库相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.09

2427

5

数据库对象名无效怎么解决
数据库对象名无效怎么解决

数据库对象名无效解决办法:1、检查使用的对象名是否正确,确保没有拼写错误;2、检查数据库中是否已存在具有相同名称的对象,如果是,请更改对象名为一个不同的名称,然后重新创建;3、确保在连接数据库时使用了正确的用户名、密码和数据库名称;4、尝试重启数据库服务,然后再次尝试创建或使用对象;5、尝试更新驱动程序,然后再次尝试创建或使用对象。

2023.10.16

2447

4

vb连接access数据库的方法
vb连接access数据库的方法

vb连接access数据库方法:1、使用ADO连接,首先导入System.Data.OleDb模块,然后定义一个连接字符串,接着创建一个OleDbConnection对象并使用Open() 方法打开连接;2、使用DAO连接,首先导入 Microsoft.Jet.OLEDB模块,然后定义一个连接字符串,接着创建一个JetConnection对象并使用Open()方法打开连接即可。

2023.10.16

2813

3

vb连接数据库的方法
vb连接数据库的方法

vb连接数据库的方法有使用ADO对象库、使用OLEDB数据提供程序、使用ODBC数据源等。详细介绍:1、使用ADO对象库方法,ADO是一种用于访问数据库的COM组件,可以通过ADO连接数据库并执行SQL语句。可以使用ADODB.Connection对象来建立与数据库的连接,然后使用ADODB.Recordset对象来执行查询和操作数据;2、使用OLEDB数据提供程序方法等等。

2023.10.19

2241

3

mdf文件导入数据库的方法
mdf文件导入数据库的方法

mdf文件导入数据库的方法有使用SQL Server Management Studio、使用SQL Server命令行工具、使用SQL Server Integration Services等方法。想了解更多mdf文件导入数据库的方法的相关内容,可以阅读本专题下面的文章。

2023.10.23

2373

5

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Linux网络安全之防火墙技术汇总
Linux网络安全之防火墙技术汇总

共31课时 | 4.1万人学习