美文网首页微信开发运营程序员
【SSH 内网穿透 + NGINX 反向代理】搭建微信本地开发环

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

作者: haolisand | 来源:发表于2017-02-05 10:44 被阅读5221次
配图来自知乎[@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>

相关文章

网友评论

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

    本文链接:https://www.haomeiwen.com/subject/ftrmbttx.html