隨着互聯網的發展,不管是web服務仍是移動APP愈來愈多的都集成了第三方支付(支付寶、微信、銀聯)。一般做爲服務提供方,支付成功之後都會有一個後端回調URL來通知是否調用者是否支付成功,這個URL必須是公網環境,而且能夠被訪問到。然而在實際開發測試環境中,咱們通常都是在內網開發,因此說對於支付測試是一件比較麻煩的事情。html
這時候,咱們就須要內網穿透服務來解決第三方服務沒法回調的問題了,下面咱們來稍微盤點那些流行的內網穿透技術。linux
ngrok 是一個反向代理,經過在公共的端點和本地運行的 Web 服務器之間創建一個安全的通道。ngrok 可捕獲和分析全部通道上的流量,便於後期分析和重放(百度百科)。nginx
優勢:使用方便,Docker容器化,配置簡單,各平臺支持,也能夠本身搭建服務器git
國內也有相應的ngrok服務 natapp、frp、nat123端口映射、內網通、花生殼等等,這裏就不一個個介紹了,有興趣的能夠自行谷歌,畢竟今天的主角是Ngrok。github
下面一張圖咱們來了解一下Ngrok的穿透流程:web
雲服務器Linux(centos7.4)、Nginx、Docker、hteen/ngrok Docker鏡像,備案域名一枚spring
這裏省去了Docker安裝說明,請自行安裝Docker。docker
docker pull hteen/ngrok
sudo docker run --rm -it -e DOMAIN="ngrok.52itstyle.com" -v /data/ngrok:/myfiles hteen/ngrok /bin/sh /build.sh
安裝成功會出現如下提示(省略中間過程):windows
Generating RSA private key, 2048 bit long modulus .............................+++ .............................+++ e is 65537 (0x10001) Generating RSA private key, 2048 bit long modulus ...............................+++ ...............................+++ go get -tags 'release' -d -v ngrok/... go install -tags 'release' ngrok/main/ngrok build ok !
客戶端和服務端生成在/data/ngrok/bin目錄下:後端
bin/ngrokd 服務端 bin/ngrok linux客戶端 bin/darwin_amd64/ngrok osx客戶端 bin/windows_amd64/ngrok.exe windows客戶端
因爲ngrok默認使用80和443端口,這裏咱們使用Nginx服務作轉發,經過端口映射的方式訪問Docker容器(參考docker-compose.yml配置)。
docker run -idt --name ngrok-server \ -v /data/ngrok:/myfiles \ -p 8082:80 \ -p 4432:443 \ -p 4443:4443 \ -e DOMAIN='ngrok.52itstyle.com' hteen/ngrok /bin/sh /server.sh
啓動以後須要在nginx.conf 添加兩條反向代理配置(HTTPS請求自行配置):
server { listen 80; server_name ngrok.52itstyle.cn *.ngrok.52itstyle.com; location / { proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http://127.0.0.1:8082; } }
服務啓動後,要想正常運行,咱們還須要添加兩條A記錄到雲服務器(替換成本身的IP地址):
首先從data/ngrok/bin目錄下載各個環境下的客戶端。
首先建立一個ngrok.cfg配置文件:
server_addr: "ngrok.52itstyle.com:4443" trust_host_root_certs: false
使用cmd命令切換到對應的目錄下,而後執行如下命令:
ngrok.exe -config ngrok.cfg -subdomain doc 192.168.1.125:4999
若是出現如下界面,說明安裝成功:
奇了個怪怪,linux下運行一直報如下錯誤,然並不清楚什麼緣由,有知道的小夥伴還望告知:
-bash: ./ngrok: /lib/ld-musl-x86_64.so.1: bad ELF interpreter: 沒有那個文件或目錄
最後推薦一款支付寶,微信,銀聯詳細代碼案例:https://gitee.com/52itstyle/spring-boot-pay
https://hub.docker.com/r/hteen/ngrok/
https://hteen.cn/docker/docker-ngrok.html
https://github.com/hteen/docker-ngrok
https://gitee.com/52itstyle/spring-boot-pay