ngrok,一個用於實現內網穿透服務,golang寫的,已經很久遠的一個東西了,可自己部署的版本最後一個版本是1.7.1,很久也沒更新了,但他還是比較穩妥的,基於自己生成openssl證書來編譯生成服務器端和客戶端,還是具有一定程度的安全性。
一年前,其實已經部署起來了,還專門在碼雲上fork github的源碼,將部署生成的腳本做了一個分支:https://gitee.com/janpoem/ngrok-fork。最近因爲要大量遷移主機,所以需要重新配置一次,因此這裏就作爲一個記錄吧。
特別說明,基於他已經不會再更新了,所以還是不要用於正式發佈的環境,開發環境使用,完全足夠(一年下來,非常穩定,連重啓都沒試過)。
安裝go1.7.6
首先,最後這個版本的ngrok,必須使用go1.7.6(1.7的last版本),下載地址:https://dl.google.com/go/go1.7.6.linux-amd64.tar.gz。然後在你的linux上部署go,嗯,部署go不用我再寫說明了吧,go可能是這世上最容易部署的了。
好吧,還是寫寫,免得自己下次配置的時候忘記了:
tar zvxf go1.7.6.linux-amd64.tar.gz
mv go /usr/local/go1.7.6
mkdir /usr/local/gopath/go1.7.6
unlink /usr/bin/go # 如果你的機器上裝了一個版本的go
ln -s /usr/local/go1.7.6/bin/go /usr/bin/go # 先ln上,搞完再恢復就好,沒後遺症
nano ~/.bashrc
修改 ~/.bashrc 文件,添加,或者暫時先改爲如下:
export GOPATH=/root/gopath/go1.7.6
export GOROOT=/usr/local/go1.7.6
然後,更新一下
source ~/.bashrc
構建ngrok
然後,開始使用 ngrok-fork 的腳本,基於他不再更新了,所以我已經把自己的腳本分支作爲默認分支了。
git clone https://gitee.com/janpoem/ngrok-fork.git
cd ngrok-fork
修改編譯的配置,可以有兩個選擇:
1. 直接修改 script/predef.sh
2. 創建 user 目錄,cp script/predef.sh user/my.sh ,修改my.sh
特別需要填寫 NGROK_DOMAIN ,也即用於作爲內網穿透服務的域名。比如你希望以:xxx.my.example.com的方式訪問自己的PC的話,則 :
NGROK_DOMAIN="my.example.com"
其他需要修改的就是端口號:
DEPOLY_HTTP_ADDR=":8081" # http 的端口號
DEPOLY_HTTPS_ADDR=":8082" # https 的端口號
DEPOLY_TUNNEL_ADDR=":4443" # 本機到服務器的(隧道)端口號
ok,配置好,ngrok.sh支持以下參數:
./ngrok.sh server # 生成2048 bit ssl證書(如果已經執行過,並且存在ssl證書,則不會重新生成),並構建 ngrokd
./ngrok.sh client # 生成客戶端,出於某些原因,默認是隻生成windows_amd64版本
./ngrok.sh service # 生成ubuntu的 service 配置
./ngrok.sh on # 服務啓用自動啓動
./ngrok.sh off # 服務停用自動啓動
很簡單,很弱智吧。然後進入 bin 目錄,打包一下 windows_amd64 就可以分發出去了。
打包指令:
7z a w64.7z windows_amd64
什麼,你問怎麼啓動?
service ngrok start
service ngrok stop
service ngrok status
配置nginx
最簡配置:
server {
listen 80;
server_name *.my.example.com;
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:8081;
proxy_redirect off;
proxy_pass http://127.0.0.1:8081;
}
}
美中不足的是,本地的PHP的話,HTTP_HOST還是會顯示8081端口,現在上網似乎只找到雙ip下的解決方案,我記得一年前似乎解決了這個問題,但現在已經完全不記得了(以後想起來再更新)。也罷,到此爲止吧,留個記錄,以防下次到處找資料。