转自:http://blog.lazybee.me/wechat-development/
微信接入是个很头疼的东西,主要原因是 webhook 的 url 必须是服务器地址,无法在开发机上调试。
目前为止我用的方案是在服务器上抓包在本地模拟,配合单元测试把功能开发完成后,再放到服务器上调试,但调试过程中难免要对代码做修改,体验很不好。
最近受不了这么折腾,脑洞大开地想把服务器上的请求直接 proxy 到本地,然后发现 ssh 自带了这个功能。
主要的东西就是 ssh 的 -R 参数,这里假设微信后台填的 webhook URL 是 http://wechat.lazybee.me,本地开发环境开的端口是 http://127.0.0.1:8000,整个转发流程是这个样子的
1. Nginx 把 wechat.lazybee.me 的请求转发到其它端口,比如 10000 端口。(因为 80 端口上还有其它服务在跑,不能暴力转发 80 端口所有请求)
server { listen 80; server_name wechat.lazybee.me; location / { proxy_pass http://127.0.0.1:10000; proxy_set_header X-Real-IP $remote_addr; } }
2. 在本地开一个到服务器的转发通道。(要求服务器开启 sshd 服务)
ssh lazybee.me -R 10000:127.0.0.1:8000
本地win7 cmd 中输入:
ssh -R 10000:127.0.0.1:8000 -l root 120.24.120.100
输入密码
netstat -na 查看是10000端口在监听
3. 让本地开发环境监听 8000 端口。
这样就可以直接在本地边开发边测试了,当然别忘了根据微信的规则配置 OAuth2.0网页授权 等参数。
何连接内网sshd服务器2008-06-14 23:46原文:[绝对原创] ssh 这个强大的工具。
(以下方法不分平台,都适用)
案例一、
内网主机 A ,开了 http,ftp ,http ,vnc,sshd,socks5,cvs 等服务。无合法 ip 地址。
外网主机 B ,开了 sshd 服务。有合法 ip : 218.xxx.xxx.xxx
我们的目的是让 B 能访问 A 上的各种服务。
步骤:
A 知道 B ip 后,先用 ssh ssh 的参数,请看 -R listen-port:host:port Forward remote port to local address-L local (本地) -R 1234:localhost:21 其实做了个“端口转发(forward)"。
意思是主机 A 把本地的 21端口(对应ftp服务)映射为 B 的1234 端口(任意未被占用),同时 A 监听 B 的1234 端口。
在 B 上用 netstat -al | grep 1234 ,你能看到这个监听连接。
任何发送到 B 1234 端口的请求将被传送到 A的 21 端口。
B 用 ftp 工具(任意,如gftp) 连本地的 1234 端口,输入 A 的 ftp 用户和密码。
ftp localhost 1234
千万不要觉的奇怪,为什么连的是本地的地址。
举个不恰当例子,相当于 A 在 B 的房间里装了个窃--听**器(监听端口),那么 B 在房间里说的话就通过窃**听*//器传送到了 A。