无法做端口映射如何允许外网访问服务器
例如我们公司在本地局域网中设置了一台电脑/服务器, 该电脑使用Apache + PHP + Mysql环境并且安装了客户管理系统(CRM)。公司员工都可以在本地局域网内访问此管理系统。但是,我们希望该系统同时可以在外网被访问,这样我们员工就可以在家里能访问客户管理系统了。要实现这个功能其实非常简单,那就是在路由器上面进行端口映射,并使用DDNS动态域名解析服务。
完成这些操作,即可输入动态域名如http://unifore.ddns.net 来访问系统,而不是本地IP地址 http://192.168.1.2。 但是,有很多中国电信猫不支持端口映射,或者设置好了还是无法允许外网访问,你又不想购买一台新的路由器,遇到这种情况可以使用Ngrok, Pagekite 反向代理软件/服务。
Ngrok, Pagekite的原理我不是很清楚,可能就是本地电脑安装的客户端把电脑的IP地址和端口号上传给远程服务器,远程服务器存储了客户端网络信息供外网用户来连接,类似于P2P服务器。这些反向代理可实现无需端口转发,无需使用DDNS就可以使本地部署的网站让外网能直接访问。 Ngrok和Pagekite软件被广泛应用于微信开发中。
此次我们选择了国内的Ngrok免费服务,该网站这样描述Ngrok服务的 – “一条命令解决的外网访问内网问题,本地WEB外网访问、本地开发微信、TCP端口转发。”
下载Ngrok客户端
下载地址: NGrok 下载客户端使用, 根据电脑系统选择合适自己的客户端,我的电脑是Windows 64位系统,所以下载: Win 64Bit版本
解压文件夹并运行bat文件
解压文件夹到电脑,文件夹包括两个文件;sunny.exe以及Sunny-Ngrok启动工具.bat文件, 不需要直接运行sunny.exe,而是直接双击Sunny-Ngrok启动工具.bat即可。 如果提示“sunny.exe非内部外部程序” 错误,请确保两个文件在同一个文件夹里,或者右击sunny.exe属性 > 兼容性 > 勾选 以管理员身份运行此程序。
运行Sunny-Ngrok启动工具.bat
后将提示输入“客户端ID”。
注册Ngrok服务
使用Ngrok客户端必须注册并购买隧道服务,Ngrok.cc提供提供10M服务器隧道免费,及100M服务器隧道付费服务。
登陆注册: http://www.ngrok.cc/login
用注册邮箱和密码登录Sunny-Ngrok后台管理,在左侧菜单中选择 [隧道管理] > [开通隧道], 选择你的套装,点击立即购买。 Ngrok.cc提供香港100M VIP服务器,10元每月,以及香港免费服务器。强烈建议你选择付费的,因为连接速度更快。
Ngrok隧道设置
- 隧道名称: 自定义名称
域名类型: 选择使用前置域名,或使用自定义域名
使用前置域名(Ngrok可免费分配一个二级域名给你
自定义域名 (自己已经注册过的域名,或者在自己的二级域名,请把域名CNAME解析到server.ngrok.cc).
- http验证用户名: 进行http映射的时候如需要授权访问请输入账号
- http验证密码:进行http映射的时候如需要授权访问请输入密码
- 本地端口:127.0.0.1:80 (默认), 本地映射端口,如需修改其他端口,则输入 127.0.0.1:8000
完成添加后,在隧道列表中即可查看到隧道ID,也就是你要使用的客户端ID,如下图所示:
Windows系统下开机自动运行Ngrok
运行Sunny-Ngrok启动工具.bat
后将提示输入“客户端ID”。在CMD窗口输入隧道ID号并回车,这个时候你的服务器就可被外网访问了。
当然,很多时候,我们想让程序能开机自动运行,那么如何才能实现呢?
要实现开机自动运行Ngrok客户端,必须:
1.编辑”Sunny-Ngrok启动工具.bat“这个文件,修改代码。
a.选中该文件,并右击>编辑, 可看到该批处理的代码。
b.对代码进行修改: 删除”set /p clientid= 输入需要启动的客户端id,多个客户端id请使用英文逗号(,)隔开:” 以及”PAUSE” 代码。 使用注册的隧道ID替换”%clientid%“ 代码。并且,把”sunny.exe“ 更换为文件路径。修改后,保存。
2.把Sunny-Ngrok启动工具.bat
放置到电脑【启动】文件夹里。
开始 > 所有程序 > 启动, 右击【打开】。 把修改好的”Sunny-Ngrok启动工具.bat” 文件拖到(粘贴)到此文件夹。