gongjimin 在论坛上介绍了另一个方法:http://talk.ninghao.net/t/nginx-ssh/4716
在调试一些接口的时候,你的网站应用要跟其它的一些外部服务进行交流,你发给它一点数据,它也会返回给你一点数据。但是如果是在本地开发环境上调试,你只能发送给外部服务数据,而外部服务返回来的数据你的本地环境是收不到的。因为你的本地环境并没有一个固定的公网 IP 地址。
我不想直接在服务器上去调试,因为复杂而且不方便,忽然想到了之前用过的 BrowserSync 工具,有一个 Tunnel 选项,可以把在本地创建的服务器公布到互联网上。我又想到了 SSH 有个 Tunnel 功能,原来用它作为本地电脑的代理用,我想大概可以用它,让我的在公网上的一台服务器接待请求,再把请求转到我的本地开发环境上,然后就去搜索关键词 NGINX,SSH,Tunnel ,找到了答案。
用 SSH 在本地电脑与公网服务器之间打开一个通道,配置公网服务器的 NGINX,把收到的请求转到本地电脑与公网服务器的这个通道上。
需求
- 一台连接到公网的服务器。
- 公网服务器上安装了 NGINX。
配置
先在公网服务器上添加一个 NGINX 配置:
upstream tunnel { server 127.0.0.1:7689; } server { listen 80; server_name dev.ninghao.net; location / { proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_redirect off; proxy_pass http://tunnel; } }
上面用 NGINX 创建了一个代理,如果有人访问 dev.ninghao.net,NGINX 会把请求转给 tunnel,这个 tunnel 指的就是这台公网服务器,端口号是 7689,一会儿我们要用到这个端口跟本地电脑进行通信。
通道
我们要在本地电脑与公网服务器之间,使用 SSH 打开一个通道。要执行的命令像这样:
ssh -vnNT -R 服务器端口:localhost:本地端口 服务器用户名@服务器 IP 地址
示例:
ssh -vnNT -R 7689:localhost:3000 root@42.120.40.68
在上面这个例子里,7689 指的是公网服务器的端口,localhost 后面的 3000 是本地电脑用的端口。root 是登录到公网服务器的用户,42.120.40.68 是公网服务器的 IP 地址。
因为我们配置了公网服务器的 NGINX,访问 dev.ninghao.net ,把请求转到服务器上的 7689 端口,这个端口跟我们的本地电脑上的 3000 端口是连接到一块儿的。所以,你在本地开发环境上搭建的服务器,应该使用 3000 这个端口提供服务。也就是,当有人访问 dev.ninghao.net 这个地址的时候,用户得到的响应是你的本地开发环境上的服务器提供的。
nginx
评论
laragon客户端中的ngrok功能就可以实现皓哥的需求
7 年 11 个月 以前
嗯 ~ 试试看。
7 年 11 个月 以前
ngrok 这个工具之前用过。版本太多,都不知道哪个才是官方版……
7 年 11 个月 以前
如果链接中断,如何实现自动连接?
7 年 11 个月 以前
或许可以在本地电脑上做些操作。具体怎么做,我没有试过。
7 年 11 个月 以前
太棒了!~ 真的成功了。
每次都有惊喜哦!~
7 年 10 个月 以前
哈哈,恭喜恭喜 :)
7 年 10 个月 以前
有个疑问,这个占流量吗?
我现在用的VPN有个月流量限制。。。
经常这么使用的话怕会流量超了。
7 年 10 个月 以前
VPN 的话,确实会费流量。因为 VPN 是全局的,系统所有流量都会流过 VPN。
7 年 10 个月 以前
我咋就
502 Bad Gateway
nginx/1.13.6
6 年 9 个月 以前
这个错误是,nginx 代理连接到你本地服务的时候遇到的问题,你的本地服务就是上面说的 gateway。你用的具体的方法可以贴到论坛上,把你的详细步骤写出来。
6 年 9 个月 以前
这个问题我重启电脑解决了,谢谢了
6 年 9 个月 以前
这个做为发布给外面的机子测试可以用是吗。
6 年 9 个月 以前
是的,主要是让本地的开发环境可以在互联网被访问到。
6 年 9 个月 以前
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.
The fingerprint for the RSA key sent by the remote host is
SHA256:FzVk7gZhIyvKvPFa/wkSoOLZdEX1cE5LRh6N4ZKpeXQ.
Please contact your system administrator.
6 年 9 个月 以前
在 /c/Users/Administrator/.ssh/known_hosts,这个文件里,找到你要登录到的服务器的 ip 地址,把这条记录删除掉,然后重新再试一下就行了。
6 年 9 个月 以前
Offending ECDSA key in /c/Users/Administrator/.ssh/known_hosts:4
RSA host key for 120.78.204.124 has changed and you have requested strict checking.
Host key verification failed.
win10 ,cmder
6 年 9 个月 以前
Offending ECDSA key in /c/Users/Administrator/.ssh/known_hosts:4 RSA host key for 120.78.204.124 has changed and you have requested strict checking. Host key verification failed.
win 10 ,cmder提示上面的错误
6 年 9 个月 以前
@王皓 443端口配置的方法一样吗 把服务器端 改成
server {
listen 443;
server_name dev.ninghao.net;
...
连接时改成 ssh -vnNT -R 7689:localhost:443 root@42.120.40.68
但是不行呀,提示无法与服务器建立安全连接,是要在服务端安装ssl证书吗? 我看你的小程序课程中确实用了 https 的本地网站做测试的,我怎么不行?
6 年 3 个月 以前
已解决 服务端需要添加ssl证书,另外proxy_pass 中的 http 改成https
6 年 3 个月 以前
最后发现微信开发视频里已经有这个补充介绍了, 在 微信小程序-》内容列表 -》修正: 通道配置
6 年 3 个月 以前
好的 :)
6 年 3 个月 以前
本地是vagrant 网站:192.168.33.10:6371 这样可以访问
本地host:绑定域名:local.****.com
线上服务器也加入
upstream tunnel {
server 127.0.0.1:7689;
}
server {
listen 80;
server_name local.*****.com;
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;
4 年 10 个月 以前
因为其它设备无法访问 192.168.33.10 这个地址,这个地址是你的主机与 Vagrant 管理的虚拟机之间创建的一个私有网络的 IP 地址。如果你的网站是在 Vagrant 里运行,你可以设置一个端口转发,或者为虚拟机设置一个公共的 IP 地址。端口转发可能更方便一些,比如你可以让主机上的 6371 转发到在你的虚拟机上的 6371 这个端口。
4 年 10 个月 以前
请问这个通道在连接一段时间后是不是会自动断掉,我这里一开始可以连接成功,后面提示remote port forwarding failed for listen port
4 年 8 个月 以前
这是因为 ssh 配置的问题,你可以参考这个贴子配置一下:https://superuser.com/questions/699676/how-to-prevent-ssh-from-disconnec...
4 年 8 个月 以前
谢谢皓哥,百度到的资料都不靠谱,还是皓哥发的这个好,百度上都说要使用autossh,整的都不是问题的核心
4 年 8 个月 以前