1. 程式人生 > >ubuntu搭建Ngrok伺服器 共享80埠 可自定義域名

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

go.PNG

安裝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目錄

20181108155947.png

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訪問埠

20181108161216.png

 

啟動客戶端

/usr/local/ngrok/ngrok -config=/usr/local/ngrok/ngrok.yml -log=/usr/local/ngrok/ngrok.log start blog

可將上面這個啟動命令寫到sh檔案裡面,每次只需要執行sh檔案即可。

QQ截圖20181108153959.png

 

到這裡就可以使用 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