【SSH 内网穿透 + NGINX 反向代理】搭建微信本地开发环境

配图来自知乎[@TOM 朱](https://www.zhihu.com/people/tom-zhu-36)

微信开发由于微信服务器要主动发送消息,所以 Web Server 必须暴露在公网环境中。

本地开发经常在内网,虽然有各种 ngrok 等第三方产品,不过要么付费使用官方服务、要么自己搭建服务麻烦、要么使用通过个人搭建的服务不安全,不如直接使用 ssh 实现内网穿透来得简单。

当然,此方案隐含了一个条件是需要有台公网服务器,这个不管是租用云主机或者申请运营商的固定IP,或者使用动态DNS服务,应该不难做到。

SSH 内网穿透

这个主要通过 ssh 的远端端口转发功能(-R参数)实现。
为了在自动重连时避免每次输入密码,还需要配置 ssh 证书实现免密码登录。
实现方法如上所述比较简单,不过考虑网络不稳定,记载一些配置时要注意的地方。

Server

  • /etc/ssh/sshd_config
    ClientAliveInterval 30 # 主动向 Client 发消息的间隔
    ClientAliveCountMax 3 # 主动发消息失败重试次数,达到后断开连接
    

Client

  • ~/.ssh/config

    ServerAliveInterval 10 # 主动向 Server 发消息间隔,用作维持连接的心跳
    ExitOnForwardFailure yes # 转发失败后退出,便于重建连接
    
  • 具体命令(以下任选其一)

    1. 手动 autossh
    while (1)
    do
        ssh -NR <local host>:<local port>:<remote host>:<remote port> user@host
    done
    
    1. autossh(感觉此方法实际效果不如手动好)
    autossh -M 5678 -NR <local host>:<local port>:<remote host>:<remote port> user@host
    

NGINX 反向代理

这个比较简单,在 Server 侧正常部署 NGINX 站点后,直接将原来站点的配置文件中 location 配置节中指定为 proxy_pass 即可。

location / {
    proxy_pass http://<remote host>:<remote port>;
}

参考

  • 查看占用端口的进程,便于手动释放(kill)
$ sudo netstat -plant  | grep <remote port>
  • 确认内网穿透是否打通
$ curl http://<remote host>:<remote port>
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,422评论 19 139
  • 群晖NAS+frp发挥更大作用Posted by SunnyRx on October 21, 2016原文地址:...
    热心人士阅读 159,267评论 19 97
  • 实战 SSH 端口转发 通过本文的介绍,读者可以从中了解到如何应用 SSH 端口转发机制来解决日常工作 / 生活中...
    hopevow阅读 4,643评论 0 9
  • 程序员猪先生单身了快三十年了,无人问津,想来是因为他工作环境单一,生性木讷,内心又自有一套对爱情的苛刻标准,自然就...
    木小溪V阅读 3,821评论 26 16