ubuntu搭建Ngrok伺服器 共享80埠 可自定義域名
本教程前提:
-
有域名需要解析到伺服器
-
有公網ip的伺服器
域名解析
我們這裡用3級域名解析到伺服器,自定義域名則為4級域名。
ngrok.daliycode.com A記錄到 213.123.123.123(你的伺服器ip) *.ngrok.daliycode.com CNAME 到ngrok.daliycode.com
域名解析完畢。
安裝Git
apt-get install git
安裝go環境
#下載go cd /usr/local/src wget http://www.golangtc.com/static/go/1.9.2/go1.9.2.linux-amd64.tar.gz #解壓 tar -zxvf go1.9.2.linux-amd64.tar.gz #移動到/usr/local/目錄 mv go /usr/local/ #go的命令需要做軟連線到/usr/bin ln -s /usr/local/go/bin/* /usr/bin/ #檢查是否安裝正確 go vesion
安裝ngrok
1、下載ngrok,設定域名,ngrok地址
cd /usr/local/ git clone https://github.com/inconshreveable/ngrok.git export GOPATH=/usr/local/ngrok/ export NGROK_DOMAIN="ngrok.daliycode.com"
2、為域名生成證書
cd /usr/local/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
3、在軟體原始碼目錄下面會生成證書檔案,把這些檔案拷貝到指定位置
cd /usr/local/ngrok cp rootCA.pem assets/client/tls/ngrokroot.crt cp server.crt assets/server/tls/snakeoil.crt cp server.key assets/server/tls/snakeoil.key
4、如果是在國內的伺服器需要改下面檔案,香港或者國外的伺服器不需要,跳過這一步
vim /usr/local/ngrok/src/ngrok/log/logger.go log "github.com/keepeye/log4go"
5、編譯伺服器端
cd /usr/local/ngrok/ GOOS=linux GOARCH=amd64 make release-server
6、編譯客戶端
#mac os 64位作業系統 cd /usr/local/ngrok/ GOOS=darwin GOARCH=amd64 make release-client #linux 64位 GOOS=linux GOARCH=amd64 make release-client #windows 32位系統 cd /usr/local/ngrok/ GOOS=windows GOARCH=386 make release-client #windows 64位系統 cd /usr/local/ngrok/ GOOS=windows GOARCH=amd64 make release-client
編譯出來的客戶端在/usr/local/ngrok/bin目錄
ngrokd 是linux的伺服器端應用
ngrok 是linux的客戶端應用
ngrok.exe 是windows客戶端應用 在對應的資料夾下
7、服務端啟動
這裡使用8888埠,80埠已經給nginx使用了,因此後面還要用nginx將80埠轉發到8888埠實現不用在位址列輸入埠號。
/usr/local/ngrok/bin/ngrokd -domain ngrok.daliycode.com -httpAddr :8888 -httpsAddr :8043
8、客戶端使用
這裡演示的是 linux客戶端的使用。將服務上生成的linux客戶端ngrok下載到本地linux伺服器。 我這裡放到了/usr/local/ngrok/目錄,建立客戶端配置檔案,與ngrok同目錄.
vim ngrok.yml #內容如下 server_addr: ngrok.daliycode.com:4443 tunnels: blog: proto: http: 8001 #這個是本地linux伺服器的web訪問埠
啟動客戶端
/usr/local/ngrok/ngrok -config=/usr/local/ngrok/ngrok.yml -log=/usr/local/ngrok/ngrok.log start blog
可將上面這個啟動命令寫到sh檔案裡面,每次只需要執行sh檔案即可。
到這裡就可以使用 blog.ngrok.daliycode.com:8888 訪問本地linux伺服器上的web服務了。
比如你本地再搭建個video站,先用nginx新增虛擬站 埠為8002。
建立配置檔案ngrok2.yml
server_addr: ngrok.daliycode.com:4443 tunnels: video: proto: http: 8002 #這個是本地linux伺服器的web訪問埠
啟動客戶端:
/usr/local/ngrok/ngrok -config=/usr/local/ngrok/ngrok2.yml -log=/usr/local/ngrok/ngrok2.log start video
那麼訪問地址就為:vedio.ngrok.daliycode.com:8888 這樣就實現了自定義域名。
9、 線上伺服器 *.ngrok.daliycode.com 80埠轉發到8888埠
帶有埠的站點是無法用來除錯微信開發的。那麼我們用線上伺服器的nginx 將來自*.ngrok.daliycode.com 80埠的請求轉發到8888埠,這樣僅僅只轉發*.ngrok.daliycode.com 80埠的請求,實現與線上伺服器已有的站點共享80埠。
nginx 新增配置
server { listen 80; server_name *.ngrok.daliycode.com; keepalive_timeout 70; proxy_set_header "Host" $host:8888; location / { proxy_pass_header Server; proxy_redirect off; proxy_pass http://127.0.0.1:8888; } access_log off; log_not_found off; }
最終我們用 blog.ngrok.daliycode.com 即可訪問本地linux伺服器上的 8001的站點了。
上述是真實案例,blog.ngrok.daliycode.com可以訪問時,表示我開啟客戶端了。
參考:
https://blog.csdn.net/dszgf5717/article/details/79119254