欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

宁皓网 NGINX + SSH Tunnel 把本地开发环境公布到互联网上 通道 隧道 还包括 ssl https的配置 有大用 有大大用

NGINX + SSH Tunnel 把本地开发环境公布到互联网上

作者:王皓
发布于:2016-12-29 09:59
更新于:2018-06-15 22:48

gongjimin 在论坛上介绍了另一个方法:http://talk.ninghao.net/t/nginx-ssh/4716

在调试一些接口的时候,你的网站应用要跟其它的一些外部服务进行交流,你发给它一点数据,它也会返回给你一点数据。但是如果是在本地开发环境上调试,你只能发送给外部服务数据,而外部服务返回来的数据你的本地环境是收不到的。因为你的本地环境并没有一个固定的公网 IP 地址。

我不想直接在服务器上去调试,因为复杂而且不方便,忽然想到了之前用过的 BrowserSync 工具,有一个 Tunnel 选项,可以把在本地创建的服务器公布到互联网上。我又想到了 SSH 有个 Tunnel 功能,原来用它作为本地电脑的代理用,我想大概可以用它,让我的在公网上的一台服务器接待请求,再把请求转到我的本地开发环境上,然后就去搜索关键词 NGINX,SSH,Tunnel ,找到了答案。

用 SSH 在本地电脑与公网服务器之间打开一个通道,配置公网服务器的 NGINX,把收到的请求转到本地电脑与公网服务器的这个通道上。

需求

  1. 一台连接到公网的服务器

  2. 公网服务器上安装了 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 地址 (-p ssh的端口)

示例:

ssh -vnNT -R 7689:localhost:3000 root@42.120.40.68 (-p 22000)

在上面这个例子里,7689 指的是公网服务器的端口,localhost 后面的 3000 是本地电脑用的端口。root 是登录到公网服务器的用户,42.120.40.68 是公网服务器的 IP 地址。

因为我们配置了公网服务器的 NGINX,访问 dev.ninghao.net ,把请求转到服务器上的 7689 端口,这个端口跟我们的本地电脑上的 3000 端口是连接到一块儿的。所以,你在本地开发环境上搭建的服务器,应该使用 3000 这个端口提供服务。也就是,当有人访问 dev.ninghao.net 这个地址的时候,用户得到的响应是你的本地开发环境上的服务器提供的。



下面是 宁皓网作者本来配置的 通道 隧道 内容 ,还包括 ssl (https) 的配置 

image.png

nginx

评论

cn4jd

laragon客户端中的ngrok功能就可以实现皓哥的需求

3 年 4 个月 以前

王皓 author

嗯 ~ 试试看。

3 年 4 个月 以前

Loyalsoldier

ngrok 这个工具之前用过。版本太多,都不知道哪个才是官方版……

3 年 4 个月 以前

srqz

如果链接中断,如何实现自动连接?

3 年 4 个月 以前

王皓 author

或许可以在本地电脑上做些操作。具体怎么做,我没有试过。

3 年 4 个月 以前

fm3647 member

太棒了!~ 真的成功了。
每次都有惊喜哦!~

3 年 4 个月 以前

王皓 author

哈哈,恭喜恭喜 :)

3 年 4 个月 以前

fm3647 member

有个疑问,这个占流量吗?
我现在用的VPN有个月流量限制。。。
经常这么使用的话怕会流量超了。

3 年 4 个月 以前

Loyalsoldier

VPN 的话,确实会费流量。因为 VPN 是全局的,系统所有流量都会流过 VPN。

3 年 4 个月 以前

rockts member

我咋就
502 Bad Gateway
nginx/1.13.6

2 年 2 个月 以前

王皓 author

这个错误是,nginx 代理连接到你本地服务的时候遇到的问题,你的本地服务就是上面说的 gateway。你用的具体的方法可以贴到论坛上,把你的详细步骤写出来。

2 年 2 个月 以前

rockts member

这个问题我重启电脑解决了,谢谢了

2 年 2 个月 以前

baitongda member

这个做为发布给外面的机子测试可以用是吗。

2 年 2 个月 以前

王皓 author

是的,主要是让本地的开发环境可以在互联网被访问到。

2 年 2 个月 以前

huangxinbo member

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ 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.

2 年 2 个月 以前

王皓 author

在 /c/Users/Administrator/.ssh/known_hosts,这个文件里,找到你要登录到的服务器的 ip 地址,把这条记录删除掉,然后重新再试一下就行了。

2 年 2 个月 以前

huangxinbo member

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

2 年 2 个月 以前

huangxinbo member

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提示上面的错误

2 年 2 个月 以前

ofunion

@王皓 443端口配置的方法一样吗 把服务器端 改成
server {
listen 443;
server_name dev.ninghao.net;
...
连接时改成 ssh -vnNT -R 7689:localhost:443 root@42.120.40.68

但是不行呀,提示无法与服务器建立安全连接,是要在服务端安装ssl证书吗? 我看你的小程序课程中确实用了 https 的本地网站做测试的,我怎么不行?

1 年 9 个月 以前

ofunion

已解决 服务端需要添加ssl证书,另外proxy_pass 中的 http 改成https

1 年 9 个月 以前

ofunion

最后发现微信开发视频里已经有这个补充介绍了, 在 微信小程序-》内容列表 -》修正: 通道配置

1 年 9 个月 以前

王皓 author

好的 :)

1 年 8 个月 以前

kris7i

本地是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 个月 1 周 以前