第三方登录厦大账号的时候,需要用到内网穿透。以下为相关文档。
安装 ngrok
安装依赖:
1
| yum install gcc git mercurial git bzr subversion golang golang-pkg-windows-amd64 golang-pkg-windows-386 -y
|
下载 ngrok 源码:
1
| git clone https://github.com/inconshreveable/ngrok.git ngrok
|
生成证书:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| cd ngrok
mkdir cert cd cert
export NGROK_DOMAIN="onns.xyz" openssl genrsa -out rootCA.key 2048 openssl req -x509 -new -nodes -key rootCA.key -subj "/CN=$NGROK_DOMAIN" -days 5000 -out rootCA.pem openssl genrsa -out device.key 2048 openssl req -new -key device.key -subj "/CN=$NGROK_DOMAIN" -out device.csr openssl x509 -req -in device.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out device.crt -days 5000
cp rootCA.pem ../assets/client/tls/ngrokroot.crt cp device.crt ../assets/server/tls/snakeoil.crt cp device.key ../assets/server/tls/snakeoil.key
cd ..
|
NGROK_DOMAIN
域名换成 ngrok 服务器域名,建议用一个二级域名,比如:ngrok.onns.xyz
,因为如果用一个一级域名比如onns.xyz
,那整个一级域名都没办法用了,因为一级域名必须要指向 ngrok 服务器。
编译服务器和客户端:
1 2 3 4
| GOOS=linux GOARCH=amd64 make release-server
GOOS=windows GOARCH=amd64 make release-client
|
其它参数:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
|
GOOS=linux GOARCH=386 make release-server GOOS=linux GOARCH=386 make release-client
GOOS=linux GOARCH=amd64 make release-server GOOS=linux GOARCH=amd64 make release-client
GOOS=darwin GOARCH=386 make release-server GOOS=darwin GOARCH=386 make release-client
GOOS=darwin GOARCH=amd64 make release-server GOOS=darwin GOARCH=amd64 make release-client
GOOS=windows GOARCH=386 make release-server GOOS=windows GOARCH=386 make release-client
GOOS=windows GOARCH=amd64 make release-server GOOS=windows GOARCH=amd64 make release-client
|
服务器端
测试一下能否运行:
1 2
| sudo -i ./bin/ngrokd -domain="onns.xyz" -httpAddr=":82" -httpsAddr=":83"
|
ngrok 默认会占80
和443
端口,服务器只用来做 ngrok 服务器太可惜了,所以用别的端口来代替。
如果后续测试不通过,可以检查一下是不是端口问题,把服务器和云服务器商的端口访问打开:
1 2
| sudo iptables -I INPUT -p tcp --dport 82 -j ACCEPT sudo iptables -I INPUT -p tcp --dport 83 -j ACCEPT
|
然后可以设置常驻后台任务了:
1 2
| sudo -i nohup ./bin/ngrokd -domain="onns.xyz" -httpAddr=":82" -httpsAddr=":83" >> /home/deploy/ngrok/a.txt 2>&1 &
|
客户端
创建一个ngrok.cfg
文件:
1 2
| server_addr: "onns.xyz:4443" trust_host_root_certs: false
|
1
| ngrok -config=ngrok.cfg -subdomain x 81
|
需要把onns.xyz
和x.onns.xyz
都指向 ngrok 的服务器。
结尾
还是比较推荐用二级域名做 ngrok 服务器,再用三级域名做内网穿透。这样不会浪费一个域名。因为一级域名和二级域名都要指向 ngrok 服务器。ngrok 服务需要n级
和n+1级
域名。
画个图帮助理解一下:
参考文档