起因:
因为学校图书馆座位查询系统和微知作业与习题系统只有校园网才能查看(最开始公网是可以访问的),感觉很不方便。所以有了这个想法,用内网穿透实现公网访问内网的网站。
前期准备:
- 一台腾讯云服务器,加域名,Ubuntu 14.04
2.一台可访问公网和内网的机器:室友的树莓派 , Debian
3.一台只有内网可访问的机器(学校的服务器)
下面正式开始(我不会步步到位,会把已有的前人的经验分享出来,再补上一些坑和自己的经验)
- 搭建Ngrok服务器 ,参考:https://www.qcloud.com/community/article/915303001489140121
坑1 : git版本的问题,我make release-server 的时候,告诉我一个包还是什么的找不到。查了是git版本的问题,升级 git 到1.2 还是 1.3 之后就好了
坑2 :你得注意你机器1和机器2的OS和指令集架构是否一样,上面的文章中因为那个作者的都是ubuntu,所以无所谓。
在我的情景下,因为树莓派是linux,arm的。所以编译指令应是 GOOS=linux GOARCH=arm make release-client
(注意你的OS、ARCH然后替换就好了)
坑3 : 运行这个命令 ./ngrok -subdomain pub -proto=http -config=ngrok.cfg 80
的时候,你得明白subdomain的含义,比如你之前启动server端,domain 参数填的是ngrok.hfutoyj.cn 那么,现在你启动的这个tunnel你需要通过pub.ngrok.hfutoyj.cn来访问。如果你没有指定的话,它也会随机生成一串数字给你。
因为开启服务后,如果关闭就没了的。你可以用setsid或者unhup来使得服务在后台运行。我是用supervisor来管理的,因为更方便,服务器重启后也会自动帮你重启服务
剩下的就是配置树莓派Web Server了,我用的是Nginx.(大坑:因为是室友的机器,导致我在sites-available下的default修改配置无法生效,被坑了好久。。后来去改nginx.conf就有用了。其中,看nginx的log是有帮助的)
配置如下:
server{
listen 8000;
location /DKTK/ {
proxy_pass http://210.45.250.231:8080;
proxy_set_header Host $host:1500;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_connect_timeout 300;
}
location /roomshow/ {
proxy_pass http://210.45.242.123;
proxy_set_header Host $host:1500;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_connect_timeout 300;
}
location /roompre/ {
proxy_pass http://210.45.242.123;
proxy_set_header Host $host:1500;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_connect_timeout 300;
}
}
注意其中的 proxy_set_header Host $host:1500;
一项必不可少。而且,后面的端口号取决于你server端http启动时选择的端口号。
更新: nginx默认上传文件的大小是1M,可nginx的设置中修改
- 打开nginx配置文件 nginx.conf, 路径一般是:/etc/nginx/nginx.conf。
- 在http{}段中加入 client_max_body_size 20m; 20m为允许最大上传的大小。
- 保存后重启nginx,问题解决
感谢阅读~