本地开发环境公布到互联网上(nginx + SSH Tunnel)

调试一些接口的时候,网站应用要跟一些外部服务进行交流,你发给它一点数据,它也会返回给你一点数据。但是如果是在本地开发环境上调试,你只能发送给外部服务数据,而外部服务返回来的数据你的本地环境是收不到的,如何做外网服务器访问的请求转发到本地呢?

基本思路是使用SSH反向隧道,把运行在本地的一个服务发布到互联网上Linux服务器的一个本地端口,然后再用nginx反向代理来把这个本地端口发布到互联网。

我不想直接在服务器上去调试,因为复杂而且不方便,忽然想到了之前用过的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 这个地址的时候,用户得到的响应是你的本地开发环境上的服务器提供的。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,908评论 18 139
  • 第一章 Nginx简介 Nginx是什么 没有听过Nginx?那么一定听过它的“同行”Apache吧!Ngi...
    JokerW阅读 32,781评论 24 1,002
  • 国家电网公司企业标准(Q/GDW)- 面向对象的用电信息数据交换协议 - 报批稿:20170802 前言: 排版 ...
    庭说阅读 11,141评论 6 13
  • 你面对着山河一步步离开我 我无法转身离去 亦无法出口挽留 我感受着风起和云涌 我眼看着你的背影逐渐模糊 天气不好风...
    稳儿阅读 616评论 5 11
  • 美国大学的教学质量与设施是其他国家无法比拟的,但美国学校向来以较高的门槛让很多想留学的家长和孩子们望而却步。美国本...
    echo梁小厚阅读 353评论 0 0