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

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


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

  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.fjun.org,NGINX 会把请求转给 tunnel,这个 tunnel 指的就是这台公网服务器,端口号是 7689,一会儿我们要用到这个端口跟本地电脑进行通信。

通道


我们要在本地电脑与公网服务器之间,使用 SSH 打开一个通道。要执行的命令像这样:

ssh -vnNT -R 服务器端口:localhost:本地端口 服务器用户名@服务器 IP 地址

示例

ssh -vnNT -R 7689:localhost:3000 root@140.120.40.128

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


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

本作品采用《CC 协议》,转载必须注明作者和本文链接
每一天都要进步一点点!
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
讨论数量: 6

收藏一下,这个在开发第三方服务的回调时很有用。

7年前 评论

server_name test.fjun.org;
访问 dev.fjun.org
2个地址不对应

7年前 评论

这个真是简单粗暴又有效

7年前 评论
hellloveyy

我觉得还是ngrok 调试微信比较靠谱快速,当然这两种方法都需要你有一个 快速 的服务器不然全是扯淡

6年前 评论
Fjun

@hellloveyy 说的不错 :stuck_out_tongue_winking_eye:

6年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!