文章背景
最近因为要做微信公众号的开发, 需要用到外网ip. 然而, 网上的免费版不是速度慢就是定期更换ip,烦不胜烦, 故决定使用linux服务器和域名自己部署一个ngrok
注: 后面看钉钉开发文档发现他有提供内网穿透工具, 不过我已经部署了自己的ngrok, 没有域名的小伙伴可以在评论告诉我下好用吗钉钉内网穿透工具
前置准备
Linux 服务器一台(已安装Nginx
)
域名一个(测试可直接修改电脑的hosts文件c:\windows\system32\drivers\etc
)
此处测试我直接把域名: ngrok.test.com
和 wx.ngrok.test.com
指向了我服务器ip
如果ngrok域名指向了ngrok.test.com
, 后续可以指定任意前缀, 例如wx
, 则最终域名指向为 wx.ngrok.test.com
安装软件
首先进入/usr/local/
目录, 后续操作均在此目录
-
安装git和go
yum install gcc -y yum install git -y yum install mercurial git bzr subversion golang golang-pkg-windows-amd64 golang-pkg-windows-386 -y yum install epel-release -y yum install golang -y
-
安装ngrok
git clone https://github.com/tutumcloud/ngrok.git ngrok
-
生成文件并覆盖原先证书
cd ngrok
openssl genrsa -out base.key 2048
openssl req -new -x509 -nodes -key base.key -days 10000 -subj "/CN=ngrok.test.com" -out base.pem
openssl genrsa -out server.key 2048
openssl req -new -key server.key -subj "/CN=ngrok.test.com" -out server.csr
openssl x509 -req -in server.csr -CA base.pem -CAkey base.key -CAcreateserial -days 10000 -out server.crt
替换文件(全部需要输y进行确认覆盖操作)
cp base.pem /usr/local/ngrok/assets/client/tls/ngrokroot.crt
cp server.crt /usr/local/ngrok/assets/server/tls/snakeoil.crt
cp server.key /usr/local/ngrok/assets/server/tls/snakeoil.key
-
生成服务端(编译时间较久, 请耐心等待)
make release-server
-
按需生成客户端(客户端生成路径
/ngrok/bin/xxx(对应版本)
, 注意, 如果生成linux64位, 则是/ngrok/bin/ngrok
)
注: 如果后续修改域名, 需要重新生成新的服务端和客户端GOOS=windows GOARCH=amd64 make release-client #编译成功后会在ngrok/bin/下面生成一个windows_amd64目录下面有ngrok.exe(按需生成) #Linux 平台 32 位系统: GOOS=linux GOARCH=386 make release-client #Linux 平台 64 位系统: GOOS=linux GOARCH=amd64 make release-client #Windows 平台 32 位系统: GOOS=windows GOARCH=386 make release-client #Windows 平台 64 位系统: GOOS=windows GOARCH=amd64 make release-client #MAC 平台 32 位系统: GOOS=darwin GOARCH=386 make release-client #MAC 平台 64 位系统: GOOS=darwin GOARCH=amd64 make release-client #ARM 平台: GOOS=linux GOARCH=arm make release-client
-
后台启动服务端(3个端口号都可以任意指定)
setsid ./bin/ngrokd -tlsKey="assets/server/tls/snakeoil.key" -tlsCrt="assets/server/tls/snakeoil.crt" -domain="ngrok.test.com" -httpAddr=":8001" -httpsAddr=":8002" -tunnelAddr=":4443"
查看服务端是否正常启动
netstat -tunple | grep 4443
-
修改
nginx
配置文件并重启server{ listen 80; server_name *.ngrok.test.com; location / { proxy_pass http://127.0.0.1:8001; proxy_redirect off; proxy_set_header Host $http_host:8001; #proxy_set_header Host $host:8001; proxy_set_header X-Real-IP $remote_addr; #proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_connect_timeout 1; proxy_send_timeout 120; proxy_read_timeout 120; } }
-
启动客户端(注意云服务器的安全组策略和防火墙是否有拦截上述3个端口)
-
下载客户端并新增配置文件
将服务器的客户端文件下载/ngrok/bin
到本地, 并在同级目录新增配置文件ngrok.cfg
server_addr: ngrok.test.com:4443 trust_host_root_certs: false
-
cmd进入当前目录启动
如果可以正常启动可不指定日志文件记录, 其中
subdomain
为指定任意指定前缀
整个命令是: 指定前缀wx, 将本地80端口映射, 日志文件保存到同级目录ngrok.log
ngrok -config=./ngrok.cfg -log=./ngrok.log -subdomain=wx 80
-
访问网址:
wx.ngrok.test.com
, 正常访问即可
-
来源:CSDN
作者:方阙
链接:https://blog.csdn.net/l707268743/article/details/104013822