GOLANG實現的HTTP轉HTTPS的代理

winlin發表於2017-10-13

有時候需要將後端的 HTTP 服務,轉成 HTTPS,可以用一個代理。

> Reamark: 如果是 GOLANG 的後端服務,可以直接用庫go-oryx-lib/https

這個代理支援自簽名的證書,也支援letsencrypt的證書。

> Remark: Letsencrypt 只支援少量域名的情況,比如自己的網站,它會有請求次數限制,另外 CA 是 letsencrypt 的,商業使用者不適合用。

我們有個 HTTP API, SRS Version:

{
  "code": 0,
  "server": 12504,
  "data": {
    "major": 2,
    "minor": 0,
    "revision": 243,
    "version": "2.0.243"
  }
}

下面演示實現 HTTPS 的代理。

Self-sign Certificate

自簽名證書可以用在測試中,先生成私鑰server.key和證書server.crt

openssl genrsa -out server.key 2048 &&
openssl req -new -x509 -key server.key -out server.crt -days 365

> Remark: 生成證書時會有很多提問,直接回車就好了。還可以參考 openssl 的文件,直接在命令列設定這些引數。

生成私鑰和證書後,下載 HTTPS 代理:

go get github.com/ossrs/go-oryx/httpx-static

> Remark: GOLANG 的設定請參考GO 環境配置

> Note: 詳細引數可以直接執行httpx-static程式不帶引數,會顯示 help。

啟動服務,代理到SRS Version:

sudo $GOPATH/bin/httpx-static -http 80 -https 443 \
    -proxy http://ossrs.net:1985/api/v1/versions \
    -ssc server.crt -ssk server.key

訪問本機 HTTP 和 HTTPS 就可以:

  1. HTTP: http://localhost/api/v1/versions
  2. HTTPS: https://localhost/api/v1/versions

> Remark: 瀏覽器訪問自簽名證書時,可能會提示不安全,選擇高階然後繼續瀏覽就可以了。

LetsEncrypt Certificate

可以使用letsencrypt簽名的證書,在瀏覽器中會顯示合法的綠色,不會提示有錯誤。參考:ossrs.net

ossrs.net 也是使用 httpx-static,引數如下:

sudo $GOPATH/bin/httpx-static -http 80 -https 443 \
    -lets=true -domains ossrs.net

> Remark: 注意在區域網的機器無法使用,因為 ACME 會有反向驗證,也就是你的伺服器得能在公網訪問到。

Advance Proxy

如果需要代理所有的 API 怎麼辦呢?直接指定父目錄就好,如果指定/則代理所有的請求。例如:

下面的命令,代理所有的/api請求:

sudo $GOPATH/bin/httpx-static -http 80 -https 443 \
    -proxy http://ossrs.net:1985/api \
    -ssc server.crt -ssk server.key

下面的命令,代理所有的請求,相當於做了映象:

sudo $GOPATH/bin/httpx-static -http 80 -https 443 \
    -proxy http://ossrs.net/ \
    -ssc server.crt -ssk server.key

其他的引數請參考httpx-static的引數。

更多原創文章乾貨分享,請關注公眾號
  • GOLANG實現的HTTP轉HTTPS的代理
  • 加微信實戰群請加微信(註明:實戰群):gocnio

相關文章