ngrok伺服器架設過程

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。

需要先安裝go環境
設定環境變數
12345 # 可以根據自己需要調整路徑 echo 'export GOROOT=/usr/local/go' >> /etc/profileecho 'export PATH=$PATH:$GOROOT/bin' >> /etc/profileecho 'export GOPATH=$HOME/go' >> /etc/profileecho 'export GOROOT_BOOTSTRAP=/usr/local/go' >> /etc/profile
下載源碼安裝
由於yum安裝的go版本是1.4的,後面可能會有點問題,所以這裡採用源碼安裝(2016.03.31最新版本為1.6)的方式
123 cd ~/your_download_dirwget https://storage.googleapis.com/golang/go1.6.linux-amd64.tar.gztar -C /usr/local -xzf go1.6.linux-amd64.tar.gz
查看是否安裝成功
12 go version# 正常的話會返回類似這樣的資訊: go version go1.6 linux/amd64
ngrok安裝
git版本
如果你的git版本>=1.7.9.5,可以直接跳過git版本這一步;如果不是,需要先進行升級。
我在一台伺服器上的版本是1.7.1,在ngrok安裝過程中,會一直卡在某個東西的下載,我是卡在這裡
1 gopkg.in/inconshreveable/go-update.v0 (download)
最好先進行一些git依賴的安裝
1 yum -y install zlib-devel openssl-devel perl hg cpio expat-devel gettext-devel curl curl-devel perl-ExtUtils-MakeMaker hg wget gcc gcc-c++
然後再升級git版本,升級方法是先安裝第三方源(rpmfore),再使用該源進行git的更新。
這裡不再詳細說明git的升級,大體可以照這篇教程弄;
唯一不同的是,因為啟用了priorities,所以在最後更新git時一直尋找的是base的repo,而不是rpmforge的repo,所以需要在更新時將base,updates等repo禁用(參考這篇文章),如下:
1 yum --disablerepo=base,updates --enablerepo=rpmforge-extras update git
下載ngrok源碼
123 cd ~/your_download_dirgit clone https://github.com/inconshreveable/ngrok.git ngrokcd ngrok
產生認證
注意這裡有個NGROK_BASE_DOMAIN;
假設最終需要提供的地址為aevit.your-domain.com,則NGROK_BASE_DOMAIN設定為your-domain.com;
假設最終需要提供的地址為aevit.ngrok.your-domain.com,則NGROK_BASE_DOMAIN設定為ngrok.your-domain.com;
下面以ngrok.your-domain.com為例:
12345 openssl genrsa -out rootCA.key 2048openssl req -x509 -new -nodes -key rootCA.key -subj "/CN=ngrok.your-domain.com" -days 5000 -out rootCA.pemopenssl genrsa -out device.key 2048openssl req -new -key device.key -subj "/CN=ngrok.your-domain.com" -out device.csropenssl x509 -req -in device.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out device.crt -days 5000
執行完以上命令,就會在ngrok目錄下新產生6個檔案
123456 device.crtdevice.csrdevice.keyrootCA.keyrootCA.pemrootCA.srl
ngrok通過bindata將ngrok源碼目錄下的assets目錄(資源檔)打包到可執行檔(ngrokd和ngrok)中 去,assets/client/tls 和 assets/server/tls 下分別存放著用於ngrok和ngrokd的預設認證檔案,我們需要將它們替換成我們自己產生的:(因此這一步務必放在編譯可執行檔之前)
123 cp rootCA.pem assets/client/tls/ngrokroot.crtcp device.crt assets/server/tls/snakeoil.crtcp device.key assets/server/tls/snakeoil.key
編譯ngrokd和ngrok
編譯linux端版本
1234 make clean# 如果是32位系統,這裡 GOARCH=386GOOS=linux GOARCH=amd64 make release-server release-client
最後成功的話,會在目前的目錄產生一個bin檔案夾,裡麵包含了ngrokd和ngrok檔案;
其中,bin/ngrokd檔案是服務端程式;
bin/ngrok檔案是用戶端程式(注意上面指定了GOOS為64位linux的,所以這個檔案是不能在mac或win等其他平台跑的,下面將進行說明如何交叉編譯)
編譯mac端版本
1234 cd ~/your_download_dir/ngrok# 如果是win端版本,GOOS=windows;如果是32位系統,GOARCH=386GOOS=darwin GOARCH=amd64 make release-client
成功的話,會在./bin/darwin_amd64/下有個檔案,將這個檔案下載到mac上
12 # 如果伺服器沒裝sz程式,請先安裝(yum -y install lrzsz);或自行採用其他辦法下載到本機 sz ./bin/darwin_amd64/ngrok
設定網域名稱解析
1234567 # 如果最終需要的ngrok地址為: example.your-domain.com,則設定 記錄指向伺服器IP# 如果最終需要的ngrok地址為: example.ngrok.your-domain.com,則設定 .ngrok 記錄指向伺服器IP# 或者不想進行泛解析,則手動添加即可,如設定example記錄指向伺服器IP,example.ngrok記錄指向伺服器IP
使用方法
服務端
nginx連接埠轉寄
由於原生80連接埠已經被佔用了,所以需要利用nginx進行連接埠的轉寄,加上如下配置即可:
12 # 根據自己nginx的安裝路徑,自動調整以下命令vim /usr/local/nginx/conf/vhost/nginx.your-domain.com.conf
內容如下:
123456789101112131415161718 upstream ngrok { server 127.0.0.1:8777; # 此處連接埠要跟 啟動服務端ngrok 時指定的連接埠一致 keepalive 64;}server { listen 80; server_name *.ngrok.your-domain.com; access_log /data/wwwlogs/ngrok.your-domain.com_access.log; error_log /data/wwwlogs/ngrok.your-domain.com_error.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:8777; # 此處連接埠要跟 啟動服務端ngrok 時指定的連接埠一致 proxy_set_header X-Nginx-Proxy true; proxy_set_header Connection ""; proxy_pass http://ngrok; }}
重啟nginx
12 nginx -tnginx -s reload
啟動服務端ngrok
1234567891011 # domain填寫剛才產生認證時的 NGROK_BASE_DOMAIN# http和https連接埠可以自己指定,這裡不採用80連接埠,是因為其他程式已經佔用了,連接埠轉寄在上面nginx已經配置完成 bin/ngrokd -domain="ngrok.your-domain.com" -httpAddr=":8777" -httpsAddr=":8778"# 如果想要後台啟動,執行以下命令 nohup bin/ngrokd -domain="ngrok.your-domain.com" -httpAddr=":8777" -httpsAddr=":8778" > /dev/null 2>&1 &# 如果想要開機啟動,執行以下命令vim /etc/rc.d/rc.local# 添加以下內容,具體內容請根據自己情況自行調整{your-ngrok-dir}/bin/ngrokd -domain="ngrok.your-domain.com" -httpAddr=":8777" -httpsAddr=":8778" > /var/log/ngrok.log &
用戶端
確保剛才下載的mac版ngrok有執行許可權
1 chmod +x ngrok
在ngrok程式的同級目錄下,編寫設定檔
1 vim ngrok.cfg
內容如下:
12345678910111213141516171819202122232425262728 server_addr: "ngrok.your-domain.com:4443"trust_host_root_certs: falsetunnels: example: subdomain: "example" #定義伺服器分配網域名稱首碼 proto: http: 80 #映射連接埠,不加ip預設本機 https: 80 web: subdomain: "web" #定義伺服器分配網域名稱首碼 proto: http: 192.168.1.100:80 #映射連接埠,可以通過加ip為內網任意一台映射 https: 192.168.1.100:80 web1: hostname: "ngrok.your-domain.com" proto: http: 80 web2: hostname: "your-domain.com" proto: http: 80 ssh: remote_port: 50001 #伺服器分配tcp轉送連接埠,如果不填寫此項則由伺服器分配 proto: tcp: 22 #映射本地的22連接埠 ssh1: #將由伺服器分配連接埠 proto: tcp: 21
啟動ngrok
123456789 ./ngrok -subdomain example -config=ngrok.cfg 80# 或者./ngrok -config ngrok.cfg start example# 如果出現問題串連不上,想在本地查看日誌,可加上log參數# ./ngrok -log ngrok.log -config ngrok.cfg start example# 最終如果Tunnel Status顯示online則表示成功了
在本地進行公眾號的調試
接下來就可以進行公眾號在本地的開發了,只要在本地設定好nginx(server_name要跟上文對應,如上面的example.ngrok.your-domain.com)
由於只允許使用80連接埠,所以一定要進行上面的nginx的連接埠轉寄設定才行
另外,ngrok本身提供了127.0.0.1:4040這個地址,可以查看到所有的http資料包內容(在php檔案裡var_dump的東西也可以看到)
遇到的問題
ngrok連接埠的防火牆問題
由於伺服器上開啟了防火牆,使用的是iptables,所以需要將上面的連接埠添加到白名單
(一共3個,一個是ngrok自身的4443連接埠,還有自訂的8777http連接埠,8778https連接埠)
1 vim /etc/sysconfig/iptables
添加以下內容
123 -A RH-Firewall-1-INPUT -m state -state NEW -m tcp -p tcp -dport 4443 -j ACCEPT -A RH-Firewall-1-INPUT -m state -state NEW -m tcp -p tcp -dport 8777 -j ACCEPT -A RH-Firewall-1-INPUT -m state -state NEW -m tcp -p tcp -dport 8778 -j ACCEPT
重啟iptables
1 service iptables restart
ngrok的交叉編譯
在伺服器上要編譯個mac端的版本時,網上說需要進行go的源碼,去進行GOOS的設定:
12 cd /usr/local/go/srcGOOS=darwin GOARCH=amd64 CGO_ENABLED=0 ./make.bash
但是我拿另一台伺服器測試過後,不用這樣也行,直接按剛才上面說的,在ngrok目錄去進行mac端版本的編譯即可。
PS: 以下內容不能看也行,只是中間遇到的問題的一些記錄而已
我第一次照著網上說的去go源碼設定GOOS,反而會報這樣的錯:
123 go ./make.bash: eval: line 135: syntax error near unexpected token ( ERROR: Cannot find /root/go1.4/bin/go.Set $GOROOT_BOOTSTRAP to a working Go tree >= Go 1.4. google了下,說現在新的go都不用C編寫了,而1.4之前的是C編寫的,所以需要先安裝1.4的,才能編譯1.6的,於是便先安裝了1.4,再安裝1.6,步驟如下:1234567891011121314151617181920212223242526272829303132333435 echo 'export GOROOT=/usr/local/go' >> /etc/profileecho 'export PATH=$PATH:$GOROOT/bin' >> /etc/profileecho 'export GOPATH=$HOME/go' >> /etc/profileecho 'export GOROOT_BOOTSTRAP=/usr/local/go' >> /etc/profilesource /etc/profilecd ~/your_download_dir# 先下載1.4的源碼wget https://storage.googleapis.com/golang/go1.4.3.linux-amd64.tar.gztar -C /usr/local -xzf go1.4.3.linux-amd64.tar.gz#tar -xzf go1.4.3.linux-amd64.tar.gz#mv ./go /usr/local/gocd /usr/local/go/src./all.bash# 查看版本,現在是1.4.3的go version# 將1.4的源碼目錄名更改為go1.4,go這個目錄名等下給1.6用mv /usr/local/go/ /usr/local/go1.4/vim /etc/profile# 預設的 GOROOT_BOOTSTRAP 是: $HOME/go1.4,因為我放在了/usr/local/go1.4`,所以這裡要指定該值export GOROOT_BOOTSTRAP=/usr/local/go1.4cd ~/your_download_dirwget https://storage.googleapis.com/golang/go1.6.linux-amd64.tar.gztar -C /usr/local -xzf go1.6.linux-amd64.tar.gzcd /usr/local/go/src./all.bash# 查看版本,現在是1.6的go version
最後再次進行測實驗證了不用先安裝1.4再安裝1.6這麼麻煩。。
總結
中間雖然遇到了一些坑,google查了好幾個鐘的資料,昨晚弄到淩晨2點多,不過最終弄成功,並且驗證了一些安裝過程的想法,還是挺有成就感的。
還好大學時就有稍微折騰過linux,去年轉後台開發時就用上了一些知識,現在伺服器遇到一些基本問題最終也能解決了。
所以還是不能停止學習的腳步啊。
趁現在還年輕,多折騰。。

參照網上的編譯好伺服器後,這樣運行
如果是openwrt的系統直接用winscp拷貝openwrt裡
將ngrokc 放到 /usr/bin 下面 添加許可權 (chmod +x ngrokc ) 就可以用luci 介面了

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.