衆所周知,做微信公衆號開發時,調試需要接收來自騰訊的服務器請求。因爲我們的開發服務器都是在內網,所以騰訊的服務器請求無法通過互聯網請求到自己的內網服務器上,所以就需要ngrok做一個內網穿透。
如果你剛好有自己的服務器,又想嘗試自己折騰一番,可以參照以下資料做ngrok內網轉發。我也是按照下面的資料自己搭建成功的,而且寫的比較詳細。強烈推薦。
參考資料:
https://blog.csdn.net/diaobatian/article/details/100890037
https://www.jianshu.com/p/f5c2a55e77bd
如果你沒有自己的服務器,又需要做穩定的內網穿透服務,可以選擇收費的。爲了避免廣告嫌疑,而且我也沒用過,所以就不做推薦了。
我在搭建的過程中,受限於環境,因爲自己比較喜歡折騰。我的nginx和ngrok不在同一個服務器,我也把它搭建成功了,之所以能搭建成功,首先得理解ngrok+nginx的數據傳輸過程。
黑色箭頭表示請求、灰色箭頭表示響應數據。
如果理解不了這個,那麼nginx+ngork分開兩臺服務器時,就會出錯,無法實現。
ngrok是用go語言寫的,所以需要雲服務器安裝go語言的環境。
按上面的資料安裝完成後,啓好ngrok服務後,我本機的客戶端一直無法連上ngrok服務。
多次嘗試後才知道,騰訊到nginx走的http請求,nginx到ngrok走還是http請求,而ngrok到本機,以及本機回傳給ngrok。走的卻不是http請求,不要問我爲什麼知道,因爲我自己搭建的過程中測試,用nginx轉發請求到ngrok的tunnelchannel結果是無法連通。
後來用了一個辦法,將接收請求的域名和響應請的域名分開。怎麼操作呢?
比如我現在的域名是example.com.
我響應請求的域名設置的是ngrok.example.com。
接收請求的域名是*.ngrok.example.com。
這塊一定要區別開。因爲我用ngrok.example.com:4443啓動客戶端時,會去找對應域名的ip,如果沒分開當然好說,一旦分開後,如果這兩個域名ip不一樣,而你解析成一樣了,那麼將會帶來災難。
兩個解決辦法,一個就是將ngrok.example.com解析到ngrok的服務地址上。
另外一個辦法就是將ngrok.example.com對應的ip寫到自己的host裏面。這個辦法測試過可以用,上面那辦法是我想的,沒有測試過,有興趣的朋友可以測試一下。
文章記錄就到這了,如果你在搭建過程中遇到什麼問題,可以來這裏聯繫我。我將在力所能及的範圍內幫你解決。