一:下载源码
mkdir ngrok #创建名称为ngrok的目录
#因为CentOS没有apt-get,所有CentOS可以使用yum命令下载git
apt-get update #更新包管理器
apt-get install git #安装git
yum install git -y #安装git
git clone https://github.com/inconshreveable/ngrok.git #将ngrok源代码克隆回本地
二:安装Go语言开发环境
yum install golang -y #安装go语言
三:设置ngrok域名
#配置环境变量
export GOPATH=/root/tools/ngrok/ngrok/ #设置环境变量,Go语言的安装位置
export NGROK_DOMAIN="wangsai.net.cn" #设置环境变量,ngrok域名
四:为域名生成证书
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 server.key 2048
openssl req -new -key server.key -subj "/CN=$NGROK_DOMAIN" -out server.csr
openssl x509 -req -in server.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out server.crt -days 5000
五:拷贝证书到指定位置
rm -rf ngrok/assets/client/tls/ngrokroot.crt #删除旧的ngrokroot.crt
cp rootCA.pem ngrok/assets/client/tls/ngrokroot.crt #复制rootCA.pem到assets/client/tls/并更名为ngrokroot.crt
rm -rf ngrok/assets/server/tls/snakeoil.crt #删除旧的snakeoil.crt
cp server.crt ngrok/assets/server/tls/snakeoil.crt #复制server.crt到assets/server/tls/并更名为snakeoil.crt
rm -rf ngrok/assets/server/tls/snakeoil.key #删除旧的snakeoil.key
cp server.key ngrok/assets/server/tls/snakeoil.key #复制server.key到assets/server/tls/并更名为snakeoil.key
六:编译
由于go语言的特性,在编译时直接生成机器码,所以在运行过程中并不需要go的环境(非托管应用)。在ngrok目录下,运行一下命令分别生成对应的客户端与服务端。
#win服务端
GOOS=windows GOARCH=386 make release-server
#win客户端
GOOS=windows GOARCH=386 make release-client
#linux服务端
GOOS=linux GOARCH=386 make release-server
#linux客户端
GOOS=linux GOARCH=386 make release-client
#mac客户端
GOOS=darwin GOARCH=amd64 make release-client
生成完成后,在工作目录的bin文件夹下,产生对应的文件。以编译windows平台为例,会产生“ngrok.exe”与“ngrokd.exe”这两个文件,前者客户端,后者需要运行在公网服务器上。
因为项目中引用了一些外部资源,生成会耗费一些时间,对网络也有一定的要求,太慢会中短
七:启动ngrok服务端
启动系统默认配置
./ngrokd -domain wangsai.net.cn
前台启动服务
./ngrokd -domain wangsai.net.cn -httpAddr :8080 -httpsAddr :8443
后台启动服务
nohup ./ngrokd -domain wangsai.net.cn -httpAddr :8080 -httpsAddr :8443 &
八:配置客户端
拷贝生成的ngrok.exe到本地计算机,并新建配置文件ngrok.cfg,内容为:
#默认的代理端口为4443
server_addr: "wangsai.net.cn:4443"
trust_host_root_certs: false
#启动客户端
ngrok.exe -subdomain ws -proto=http -config=ngrok.cfg 8080
#-subdomain ws 代表ngrok.wangsai.net.cn:4443的前置域名
#8080 代表本地的对外端口
nginx+ngrok实现内网穿透
因为80端口被nginx占用,决定使用nginx+ngrok实现内网穿透,让所有的流量都通过nginx的80端口,然后转发到ngrok上面,下面是我的nginx的配置文件
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 443;
server_name www.52wss.com;
ssl on;
ssl_certificate /root/tools/key/214309621550488.pem;#配置证书位置
ssl_certificate_key /root/tools/key/214309621550488.key;#配置秘钥位置
#ssl_client_certificate ca.crt;#双向认证
#ssl_verify_client on; #双向认证
ssl_session_timeout 5m;
ssl_protocols SSLv2 SSLv3 TLSv1;
ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
ssl_prefer_server_ciphers on;
location / {
proxy_pass https://ws.52wss.com:8080;
proxy_redirect off;
client_max_body_size 10m;
client_body_buffer_size 128k;
proxy_connect_timeout 90;
proxy_read_timeout 90;
proxy_buffer_size 4k;
proxy_buffers 6 128k;
proxy_busy_buffers_size 256k;
proxy_temp_file_write_size 256k;
}
}
}
如果显示这个No requests to display yet错误
请检查域名解析是否有问题