利用Nginx和Putty Tunnel实现本地侦听公网http请求-用以微信Programming

微信Programming需要指定一个公网的网址,直接在Server上面写代码,或者写完了传上去调试都是极不科学的做法。一来不方便,不直观。二来万一出问题Server挂了那不蛋疼菊紧的。

立马想到通过 SSH 把Server上的请求转发到本地,搜了一下资料,实现很简单,适用于Server为 LINUX 的情况。

本地PUTTY端设定:

putty-forward-remote-to-local

Source port: 连上后会在Server开的端口,稍后 Nginx 要把请求代理到这个商品上

Destination: 本地的机器和商品,putty 会把Server过来的请求转到到这个指定的端口上。
(如果本机也是 Linux ,那 putty 都省掉,直接一条 ssh test.com -R 8110:127.0.0.1:8080 搞定)
设定好了之后记得保存 session, 然后连接上Server,设置Nginx。

ServerNginx设定:配置 server 节指定代理规则:

1
2
3
4
5
6
7
8
9
server {
  listen 80;
  server_name test.com;

  location /weixin {
    proxy_pass http://127.0.0.1:8110;
    proxy_set_header X-Real-IP $remote_addr;
  }
}

test.com 替换成你自己的公网域名,保存后记得 restart 一下 Nginx

这样Nginx就会把所有 /weixin 的请求转发到本地 8110 端口,而这个 8110 又是映射到我们本机上的 8080 端口。

本机Node.js 测试脚本

1
2
3
4
5
6
7
var http = require('http');
http.createServer(function (req, res) {
  res.writeHead(200, {'Content-Type': 'text/plain'});
  res.end('Hello Worldn');
  console.log(req.url);
}).listen(8080, '127.0.0.1');
console.log('Server running at http://127.0.0.1:8080/');

保存为 server.js 然后执行 node server.js 本机开始侦听 8080 端口,这时浏览器输入 http://127.0.0.1:8080 能看到 hello world 说明本机正常鸟。

然后输入 http://test.com/weixin 应该也能看到 hello world 了。这个方法也可以用来调试支付宝等需要调用公网网址的程序。

如果上面的方法不适合你,刚好我在搜索的时候有发现另一个软件:ngrok ,貌似它是可以提供一个公网网址给你也是映射到本地端口。

Share Comments