ngrok 是一个反向代理工具,通过在公共的端点和本地运行的 Web 服务器之间建立一个安全的通道,它常用于内网穿透,使得本地服务器可以被公网访问,本文将介绍如何从零开始搭建一个 ngrok 服务器,包含详细步骤、注意事项以及常见问题解答。
一、必要条件
1、服务器:需要一台拥有公网IP的服务器,可以是云服务器或物理服务器,本次测试使用的是Ubuntu 16.04 64位系统。
2、域名:需要一个二级域名,用于生成访问链接。“weixin.yangjiace.xyz”。
3、基础环境:确保服务器已安装git、Golang等必要软件。
二、安装基础环境
需要在服务器上安装git和Golang,命令如下:
apt-get install build-essential golang mercurial git
三、下载源码并编译
使用非官方地址下载源码,修复部分包无法获取的问题:
git clone https://github.com/tutumcloud/ngrok.git ngrok cd ngrok
四、生成自签名证书
由于不购买SSL证书,我们需要生成自签名证书并编译到客户端中:
NGROK_DOMAIN="weixin.yangjiace.xyz" openssl genrsa -out base.key 2048 openssl req -new -x509 -nodes -key base.key -days 10000 -subj "/CN=$NGROK_DOMAIN" -out base.pem openssl genrsa -out server.key 2048 openssl req -new -key server.key -subj "/CN=$NGROK_DOMAIN" -out server.csr openssl x509 -req -in server.csr -CA base.pem -CAkey base.key -CAcreateserial -days 10000 -out server.crt cp base.pem assets/client/tls/ngrokroot.crt
五、编译服务端和客户端
执行以下命令进行编译:
make release-server release-client
编译成功后,会在bin
目录下生成ngrokd
和ngrok
两个文件,分别对应服务端和客户端程序。
六、启动服务端
启动ngrok服务端,指定证书和域名:
./bin/ngrokd -tlsKey=server.key -tlsCrt=server.crt -domain="weixin.yangjiace.xyz" -httpAddr=":80" -httpsAddr=":443"
七、编译客户端
根据操作系统不同,编译相应平台的客户端:
Windows平台 GOOS=windows GOARCH=amd64 make release-client Mac平台 GOOS=darwin GOARCH=amd64 make release-client
编译完成后,将客户端下载到本地。
八、设置本地客户端
在同级目录下新建配置文件ngrok.cfg
:
server_addr: "weixin.yangjiace.xyz:4443" trust_host_root_certs: false
新建启动脚本startup.bat
:
@echo on cd %cd% ngrok -config=ngrok.cfg -log=ngrok.log -subdomain=yjc 8080
双击启动脚本完成启动。
九、后台运行服务端
为了使ngrok服务端在后台运行,可以创建systemd服务:
[Unit] Description=ngrok After=network.target [Service] ExecStart=/myweb/ngrok/bin/ngrokd -tlsKey=/myweb/ngrok/server.key -tlsCrt=/myweb/ngrok/server.crt -domain="weixin.yangjiace.xyz" -httpAddr=":80" -httpsAddr=":443" [Install] WantedBy=multi-user.target
保存为ngrok.service
,然后执行以下命令启动服务:
systemctl start ngrok.service
1. 什么是ngrok?
ngrok 是一个反向代理工具,通过在公共的端点和本地运行的Web服务器之间建立一个安全的通道,使本地服务器可以被公网访问,它常用于内网穿透。
2. 如何搭建ngrok服务器?
搭建ngrok服务器的步骤包括:安装基础环境、下载源码并编译、生成自签名证书、编译服务端和客户端、启动服务端、编译客户端、设置本地客户端、后台运行服务端,具体步骤详见上述内容。
3. 遇到的问题及解决方法?
Q1: 编译时提示找不到某些依赖包怎么办?
A1: 确保Git版本大于1.7.9.5以上,Golang版本大于1.4,可以尝试多次编译或者手动下载缺失的依赖包。
Q2: 如何配置防火墙以确保服务正常运行?
A2: 确保服务器防火墙开放80端口(HTTP)和443端口(HTTPS),以及客户端连接使用的4443端口,可以使用以下命令开放端口:
ufw allow 80/tcp ufw allow 443/tcp ufw allow 4443/tcp
原创文章,作者:未希,如若转载,请注明出处:https://www.kdun.com/ask/1267082.html
本网站发布或转载的文章及图片均来自网络,其原创性以及文中表达的观点和判断不代表本网站。如有问题,请联系客服处理。
发表回复