2016-11-21 64 views
0

這是一個比任何代碼相關的更多的技術問題。 我有一個expressjs應用程序在api-gateway上使用aws-serverless-express運行,它允許您移除expressjs應用程序並在api-gateway上進行最小更改。但是由於APIG會爲每個api部署生成一個url,並在其中包含一個api-id,這對客戶端來說並不友好。所以我建立了一個指向APIG網址的cloudfront分配。aws apigateway cloudfront expressjs應用程序始終顯示api-gateway url

但是,當我運行該應用程序時,瀏覽器中顯示的URL不是由cloudfront生成的(儘管我使用該URL去應用程序),但創建了一個APIG。

我知道APIG中有一個選項可以設置一個自定義域名,並且在做了一些研究後,APIG在後臺設置了一個Cloudfront Distribution,但是因爲我不是那個設置DNS服務的人,沒有權限爲aws上的這個特定角色/區域更改這些設置,想知道問題出在於通過APIG的選項未設置自定義url的事實?

+0

您是否嘗試過在您的DNS中設置指向API網關網址的CNAME記錄? – barudo

+0

Yeap,目前這是什麼設置。 – hyprstack

+0

嗯...好吧,所以你沒有訪問你的DNS ... tsk tsk .... – barudo

回答

1

如果您在瀏覽器地址欄中輸入正確的URL並按ENTER鍵,則會顯示此頁面。如果服務器發送重定向狀態碼(301,302,307等),則瀏覽器地址欄中的URL可能會更改。

要調試此操作,請在瀏覽器中打開Web檢查器,選擇「網絡」選項卡並按照HTTP請求。如果您看到重定向狀態,請查看標題以找出哪個系統發送了它。

編輯:如果通過HTTP訪問CloudFront,API網關正在發送301重定向到HTTPS。這似乎是這裏的問題。正如在另一個答案中指出的,強制CloudFront通過HTTPS訪問API網關 - 僅解決該問題。

+0

如果做一個重定向,它是做什麼的幕後,是我不想改變。 實際上,有一個重定向狀態(301),當所述請求首先被髮送到CloudFront的,並且具有一個位置標頭設置到apigateway網址。 望着鉻://網內部工具,尤其是DNS選項卡上,我出我的CloudFront的url和一個用於apigateway URL一個DNS服務。這是否暗示我有一個DNS服務調用另一個DNS服務? – hyprstack

+0

如果你有一個301,那麼DNS不是你的問題。 DNS就像電話簿:如果您知道名稱(如www.example.com),您的瀏覽器將使用DNS查找該服務的IP號碼。然後瀏覽器連接到(「呼叫」)該號碼。而301基本上是服務器(「人」)在另一端告訴你打電話給其他人。因此,如果您的初始連接轉到CloudFront,那麼您需要跟蹤發送301的人。由於CloudFront和API網關不會定期將301發送到其他服務,因此您的快速應用程序是一個很好的候選人。禁用該應用程序來證明這一點。) – Digitalkapitaen

+0

感謝您花時間發佈解釋和可能的解決方案。然而,正如我在下面的答案中解釋的那樣,這是DNS配置問題。 – hyprstack

2

在另一個SO question這裏找到了正確答案!

基本上必須改變cloudfront中的一些設置。

選中「瀏覽器協議策略」在我的CloudFront的分佈設置爲「HTTP重定向到HTTPS」或「僅HTTPS」,並設置「原點協議政策」到「僅HTTPS」。

這似乎解決了我的問題。

0

我建議不要設置指向您的API網關端點的CF分配。 API網關已包含一個CF分發。如果您已經擁有域名和證書,則可以使用「自定義域名」功能直接將其直接導入到API網關中:http://docs.aws.amazon.com/apigateway/latest/developerguide/how-to-custom-domains.html

+0

人們喜歡把cloudfront放在apgateway之前的原因是apigateway不支持證書管理器,cloudfront就是這樣做的。還有一件事要管理。它還允許你將靜態內容和api(example.com/api)放在同一個url中,而不必處理CORS。 也就是說,這隻適用於不使用IAM認證的公共網站。 – Atifm

相關問題