親愛的,我把HTTP無痛變成HTTPS了
親愛的,我把HTTP無痛變成HTTPS了
AWS API Gateway HTTP 代理整合教學
各位好,你是否也曾碰到需要使用HTTPS進行跨API通訊時,但卻苦於有一邊是HTTP? 又或者臨時需要HTTP變成HTTPS呢?
本篇提供出一種方法,教你如何讓HTTP服務,快速變成HTTPS
[問題點]
例如:某一個HTTPS API A要與HTTP API B做呼叫時,就會發生以下狀況
主要是瀏覽器有一條資安規則,API之間互相呼叫時,不得使用到HTTP通訊
相信這時的你,已經開始面臨崩潰了!
但不要緊,我們還是有幾個思路能解決問題的
[思考點]
釐清問題
- HTTPS API A 的傳輸對象一定也要HTTPS
- 需要把 HTTP API B 變成HTTPS
- 找一個代理,作為API A的接口,以代替API B,並接到API B (A–>代理–>B)
分析問題
- 這是一條瀏覽器安全規則,不要去想怎麼繞過它
- 如果可以直接裝SSL,我還需要Google找問題嗎?
- 使用HTTP代理服務,如Nginx的反向代理(reverse proxy),或是雲端代理(如AWS API Gateway HTTP 代理)
探討作法
- 使用Nginx,雖然可以利用反向代理(reverse proxy)保護API B,但是Nginx本身還是要裝SSL
- 使用AWS API Gateway,建置後就會附贈一組AWS網域下的HTTPS Endpoint URL,且設定極為簡單
官方文件參考:https://docs.aws.amazon.com/zh_tw/apigateway/latest/developerguide/api-gateway-create-api-as-simple-proxy-for-http.html
[解決點]
- 點選 [建立API]
- 選擇 API 類型 -> [REST API建置]
- 選擇通訊協定 -> [REST]
- 建立新的 API -> [新 API]
- 設定 API 名稱* -> **[任意名稱]**
- 端點類型 -> [區域性]
[區域性]是指在服務上的Region建立,如果是需要快取功能及更完整的全球部署,可選擇[邊緣最佳化],最後,若是需要私有VPC連線,則選[私有]
- 進入剛建立的API Gateway
- 點選 [資源]
- 點選根資源 [/]
- 點選 [操作]
- 點選 [建立資源]
- 設定為代理資源 [打勾]
- [Option] 可啟用或不啟用 CORS (為了測試可以先不啟用)
資源名稱可以不用更改,那只是資源路徑使用時的參數名稱
- 設定proxy要代理的端點 URL
- 點選資源的/{proxy+} [ANY]
- 整合類型選 [HTTP代理]
- 端點URL [你要代理的端點URL 如:http://www.test.com/{proxy}
- 這邊用 https://tw.stock.yahoo.com/q/bc?s=2603 來示範代理YAHOO股市 [長榮股票資訊],所以就填寫 https://tw.stock.yahoo.com/{proxy}
- 內容處理 [傳遞]
- 使用預設逾時 [打勾:預設為29秒]
proxy參數就是剛剛填寫的資源名稱
- 完成並測試
- 點選資源的/{proxy+} [ANY]
- 點選 [測試]
這邊開始請依照你需要測試的URL參數 假設我們是要測試,代理YAHOO股市 [長榮股票資訊]
- 方法 [GET]
- 路徑 [q/bc]
- 查詢字串 [s=2603]
- 點選 [測試]
最後請求就會看到 [/q/bc?s=2603] 以及回應內文 [長榮股票資訊]
- 正式部署
- 點選資源的/{proxy+} [ANY]
- 點選 [操作]
- 點選 [部署API]
- 部署階段填入任意名字 [如product or test之類]
- 點選 [部署]
- 產出連結 https://[API Gateway資源名稱].execute-api.ap-northeast-1.amazonaws.com/test
- 使用結果
以上就是如何使用AWS API Gateway HTTP 代理整合,並快速解決沒有SSL的問題