nginx和ngrok配合进行内网web转发(试验)
![楚留香](https://picx.zhimg.com/f53223fe38a584e4c858aedb4b78c0d9_l.jpg?source=172ae18b)
![](https://picx.zhimg.com/v2-4812630bc27d642f7cafcd6cdeca3d7a.jpg?source=88ceefae)
今天遇到一个网友的问题:
1.电脑A处于内网无外网,提供web服务( http:// 192.168.1.150 ),无权限。
2.电脑B处于内网可连接外网,有权限。
3.电脑C处于外网有公网固定IP。
需要在外网访问电脑A的web服务(后来实际情况为A提供两个不同的web服务)。
当时我的第一个想法是ngrok映射。后来看A没有权限又考虑在B上用nginx做反向代理把B的80端口反向到 http:// 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=" http:// 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绑定的域名(我的实例:
http://
n.des8.com
):4443"
trust_host_root_certs: false
运行命令:
pi@raspberrypi:~/ngrok $ ./ngrok -subdomain hfs -config=ngrok.cfg 80
其中hfs为子域名 80为本地需要转发的端口,4443为ngrok默认提供服务的端口。
现在外网访问 http:// nfs.n.des8.com:8080 即可打开内网的nfs服务。
扩展一下:如果内网有多个web服务,可以配置电脑B的nginx按照域名配置多个server。同时后台对应域名开启多个ngrok客户端即可。(据说ngrok可以转发到本地局域网的其他机器我试验未成功)