相关文章推荐
成熟的皮蛋  ·  php - No Application ...·  1 年前    · 

nginx和ngrok配合进行内网web转发(试验)

今天遇到一个网友的问题:

1.电脑A处于内网无外网,提供web服务( 192.168.1.150 ),无权限。

2.电脑B处于内网可连接外网,有权限。

3.电脑C处于外网有公网固定IP。

需要在外网访问电脑A的web服务(后来实际情况为A提供两个不同的web服务)。

当时我的第一个想法是ngrok映射。后来看A没有权限又考虑在B上用nginx做反向代理把B的80端口反向到 192.168.1.150 ,然后再用ngrok映射B的80端口到外网。

只是一个想法,苦于没做过估计跟网友介绍的也不详细,于是开始了自己的试验之路

模拟问题的环境:

电脑A:192.168.1.150 提供内网HFS的文件服务(基于web下载扫描文件的服务)

电脑B:树莓派处于内网,然后安装nginx、编译ngrok。

电脑C:处于公网,运行ngrok服务端。

简单的介绍下各个配置:

电脑A无权限不做配置 ,保证web服务正常访问。

电脑C的ngrok服务端

运行命令:

ngrokd -domain=" n.des8.com " -httpAddr=":8080" -httpsAddr=":8081"

其中8080和8081分别为对外转发用的端口,如果你的服务器没有使用80端口可以用80端口提供服务,我的例子里因为电脑C运行着其他服务就改用8080端口了。

正常会出现上图的文字。

电脑B的nginx :(/etc/nginx/sites-available/default)

server {
listen 80;
listen [::]:80;
location / {
proxy_pass http://192.168.1.150 ;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}

电脑B的ngrok

/home/pi/ngrok/ngrok.cfg

server_addr: "电脑C绑定的域名(我的实例: n.des8.com ):4443"
trust_host_root_certs: false

运行命令:

pi@raspberrypi:~/ngrok $ ./ngrok -subdomain hfs -config=ngrok.cfg 80

其中hfs为子域名 80为本地需要转发的端口,4443为ngrok默认提供服务的端口。

出现类似上面的 online 就为成功映射。

现在外网访问 nfs.n.des8.com:8080 即可打开内网的nfs服务。

扩展一下:如果内网有多个web服务,可以配置电脑B的nginx按照域名配置多个server。同时后台对应域名开启多个ngrok客户端即可。(据说ngrok可以转发到本地局域网的其他机器我试验未成功)

编辑于 2016-04-25 17:11