AWS搭建ngrok內網轉寄伺服器

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。
相信搞過開發、小程式的同學都踩過調試的坑,那種線上折騰通常能讓你憋上一口老痰。當然你也可以找其他的方式進行內網轉寄,比如用QQ瀏覽器、別人已經搭建好的轉寄服務、使用 ssh+nginx。這這幾種我都使用過,為了省時間你值得擁有。但是最近看了 ngrok的源碼,基於 golang,那我就來勁了,因為我最近剛好在折騰 golang網路這一塊的內容。所以就自己來吧

前提

1.記得看標題啊,我採用的是aws,所以意思你必須有一個伺服器,必須有公網ip

2.再有就是你要有一個網域名稱,如果你使用過別人提供的ngrok,就知道,別人都採用第三層網域名泛解析的方式。所以希望你有一個自己的網域名稱。不然沒辦法走下去了。

3.環境:redhat7.3

必要工具

 yum install -y mercurial git vim wget

這個mercurialngrok強制要求的。

安裝golang

# 下載`go` cd /usr/localwget https://storage.googleapis.com/golang/go1.10.linux-amd64.tar.gz# 解壓  tar -zxvf go1.10.linux-amd64.tar.gz -C /usr/local/  # go的命令需要做軟串連到/usr/bin ln -s /usr/local/go/bin/* /usr/bin/ 

設定go環境

#安裝go語言的安裝環境yum install mercurial bzr subversion -y#建立go目錄作為項目目錄mkdir -p $HOME/go#用cat的方法在尾部增加golang的環境:GOROOT GOPATH#下面這段,整段複製粘貼過去cat >>$HOME/.bash_profile<<EOFexport GOROOT=/usr/local/go    export GOPATH=\$HOME/goexport PATH=\$PATH:\$GOROOT/binEOF#讓配置生效source $HOME/.bash_profile
檢查一下goenv環境變數:
go env


看到GOPATH,GOROOT就可以了

ngrok 配置

下載:
cd /usr/local/  git clone https://github.com/inconshreveable/ngrok.git
設定環境變數:
export GOPATH=/usr/local/ngrok/  #這裡寫你自己的網域名稱,建議你用次層網域,比如你有個網域名稱為:baidu.com,那麼這裡就可以為:ngrok.baidu.com.  export NGROK_DOMAIN="ngrok.xxx.com" 

當然你會問,為什麼不直接使用baidu.com,而是用ngrok.baidu.com.如果你有限制的網域名稱的話,當然是可以直接使用baidu.com的。

產生認證:
cd /usr/local/ngrokopenssl genrsa -out rootCA.key 2048  #NGROK_DOMAIN 就是你上一步的步驟設定的網域名稱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 
拷貝認證覆蓋ngrok原來的認證:
過程會讓你輸入y 斷行符號cp rootCA.pem assets/client/tls/ngrokroot.crt cp server.crt assets/server/tls/snakeoil.crt cp server.key assets/server/tls/snakeoil.key
產生服務端:
cd /usr/local/ngrok/  make release-server#這一步可能會出錯的,我之所以會寫這篇文章,是因為這個地方出現了好幾次錯誤,容易崩潰

如果順利的話,產生的服務端在/usr/local/ngrok/binngrokd檔案.希望你可以一步到位

可能有的錯誤:
bin/go-bindata -nomemcopy -pkg=assets -tags=release \          -debug=false \          -o=src/ngrok/client/assets/assets_release.go \          assets/client/...  bin/go-bindata -nomemcopy -pkg=assets -tags=release \          -debug=false \          -o=src/ngrok/server/assets/assets_release.go \          assets/server/...  go get -tags 'release' -d -v ngrok/...  go install -tags 'release' ngrok/main/ngrokd  go install: cannot install cross-compiled binaries when GOBIN is set  make: *** [server] Error 1
解決方案:
cd /usr/local/ngrokmkdir bin  cp $GOBIN/go-bindata bin/  unset GOBIN

這裡說明一下,預設下go getgo-bindata下載到GOBIN目錄中了,所以你要把go-bindata複製到ngrokbin目錄中,但是預設是沒有這個bin目錄的。

產生用戶端:
我用的是mac系統,所以我只產生mac ngrok用戶端,window的產生方法,可以參考底下參考文章
cd /usr/local/ngrok/  GGOOS=darwin GOARCH=amd64 make release-client #然後就是等待下載了,沒有進度條,耐心等待。#產生的在/usr/local/ngrok/bin/darwin_amd64 #都在bin下,服務端是ngrokd   用戶端是ngrok

到這一步基本算是安裝完成了。

啟動服務端

這裡為了方便我直接就用80連接埠了,請確認你的80連接埠沒有被佔用,關閉相應的服務。
後面要想用,建議使用nginx反向 Proxy到ngrok。
cd /usr/local/ngrok/bin./ngrokd -domain="xxx.com" -httpAddr=":80" -httpsAddr=":443" -tunnelAddr=":4443"#-domain後面你上面寫的網域名稱,如上面寫的:ngrok.baidu.com  -httpAddr http連接埠  -httpsAddr https 連接埠 預設為:443#-tunnerlAddr 用戶端連接埠,串連連接埠,預設為:4443

啟動用戶端

先將伺服器產生的用戶端 ngrok下載到本地,aws下載的命令如下(不是aws,就用scp就可以了):
scp -i "aa.pem" ec2-user@ec2-34-201-46-244.compute-1.amazonaws.com:/usr/local/ngrok/bin/darwin_amd64 /ngrok

然後同目錄下建立檔案ngrok.cfg 設定檔:

server_addr: "ngrok.xxx.com:4443"   #你上面自己寫的網域名稱,如ngrok.baidu.comtrust_host_root_certs: false  #目錄下開啟命令列./ngrok -config=./ngrok.cfg -subdomain=blog 80 -log=ngrok.log#這裡subdomain後面是你的第三層網域名首碼,你可以改#注意要在網域名稱解析裡添加第三層網域名解析#最好添加一個log, 不然出錯了,容易一臉懵逼

這樣就可以了,然後在訪問blog.ngrok.xxx.com就可以訪問了。

網域名稱解析

可能有些小夥伴沒有怎麼解析過第三層網域名。這裡就短暫說一下。

首先把你的次層網域解析到aws的ip上,如

再添加一個第三層網域名解析:

這樣就可以了,其實還是比價簡單的。

特別提醒

如果你是新的伺服器,比如aws,預設有些連接埠是沒有開啟的(去安全性群組設定就好了)。所以你上面如果採用了其他的連接埠,先確定是否可用。不信的話你去telnet 4443連接埠試一下。還有網域名稱解析是否好了,能否ping通,可能你搭建環境是沒有問題的,但是解析錯了,那就悲劇了。

telnet ngrok.baidu.com 4443ping ngrok.baidu.com
aws 如果是自己免費申請的,不用的時候記得關閉,不然逾時那也要掏錢的。

參考文章

https://github.com/inconshrev...

https://blog.csdn.net/yjc_111...

https://blog.csdn.net/gebitan...

https://blog.csdn.net/qq_3656...

https://segmentfault.com/a/11...

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.