ngrok 是用go語言實現的,編譯過程碰到不少坑
主要碰到的坑就是依賴錯誤,以及依賴的包被偉大的GFW給擋住了。
最好是用天朝外的VPS make release-server release-client
修改日志src/ngrok/log/logger.go
中的import部分改成
```
import (
log "github.com/alecthomas/log4go"
"fmt"
)
```
其他的跟網上的差不多了。
下面就把依賴好的包打包發上來,以及編譯的方法給大家說下:
這個包是已經包含好了依賴,拿到包后,確認你的環境,如果你要編譯客戶端需要go 1.6 否則編譯會通不過
- 安裝依賴
sudo apt-get install build-essential golang mercurial git
- 解壓
tar -zxv -f ngrok.pkg.tar.gz
- 生成證書
openssl genrsa -out base.key 2048
openssl req -new -x509 -nodes -key base.key -days 10000 -subj "/CN=ngrok.youkele.com" -out base.pem
openssl genrsa -out server.key 2048
openssl req -new -key server.key -subj "/CN=ngrok.youkele.com" -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
- 編譯客戶端 (go >= 1.6)
#linux
make release-client
#windows
GOOS=windows GOARCH=amd64 make release-client
#mac
GOOS=darwin GOARCH=amd64 make release-client
編譯前如果
make clean
了,那記得把證書再copy一份cp base.pem assets/client/tls/ngrokroot.crt
運行
- 服務器
/usr/local/src/ngrok/bin/ngrokd -tlsKey=/usr/local/src/ngrok/server.key -tlsCrt=/usr/local/src/ngrok/server.crt -domain="ngrok.youkele.com" -httpAddr=":8090" -httpsAddr=":4433"
- 客戶端
ngrok.cfg
server_addr: "ngrok.youkele.com:4443"
trust_host_root_certs: false
- 客戶端 啟動
./ngrok -config=./ngrok.cfg -subdomain=test 8080
./ngrok -h 可以看幫助
- 配置nginx
server {
listen 80;
server_name *.ngrok.xxx.xxx;
access_log /var/log/nginx/xxx.xxx.log;
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host:8090;
proxy_set_header X-Nginx-Proxy true;
proxy_set_header Connection "";
proxy_pass http://127.0.0.1:8090;
}
}