2014-06-11 15 views
0

我正在嘗試使Cloudfront適用於我的解決方案。我正在使用Route 53 + CloudFront + ELB。與Route 53集成時沒有達到Cloudfront

請考慮以下幾點: 1.路由53通過記錄集別名指向CloudFront。 2. CloudFront通過原始域名指向ELB。 3. CloudFront將備用域名設置爲我的自定義域(mysite.com)

如果我使用CloudFront域名(d1ngxxxx.cloudfront.net)或自定義域(mysite.com)發出請求,最初的請求會發送到CloudFront,它會使用HTTP 302進行響應。所有後續請求(針對圖像,css,js等資源)均直接通過繞過CloudFront的ELB域名進行。 我應該怎麼做才能使所有請求都通過CloudFront?

謝謝!

回答

1

我不能想出Cloudfront將發佈這些重定向的情況。

看來可能發生的情況是您的服務器本身正在發佈302重定向,因爲它不喜歡它從Cloudfront獲取的Host:標頭。

Host: CloudFront將該值設置爲與請求的對象關聯的源的域名。

http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/RequestAndResponseBehaviorCustomOrigin.html

的Cloudfront然後返回重定向到瀏覽器。

Cloudfront還可以緩存這樣的重定向,因此在解決問題時請注意。響應頭應說明是否CloudFront的去了產地爲特定的回覆:CloudFront的

X-Cache: Miss from cloudfront 

...還是擔任了從緩存中的請求。

X-Cache: Hit from cloudfront 

兩種可能的方法來解決此問題:

如果你的遺留代碼反應以負面方式Host:頭,你也許可以重新配置Web服務器來修改在代碼能夠看到它之前的值,所以重定向不會發生。或者,你可以使用外側的東西,像Varnish或HAProxy這樣的反向代理引擎(其中我已經觸及elsewhere)。在HAProxy的,一個簡單的例子:

reqirep ^Host:\ .* Host:\ expected-domain.example.com if { hdr(host) -i unexpected-domain.example.com } 

在形式上類似於這樣的規則將在所有傳入的請求,其中該頭存在,它應該讓你的遺留代碼幸福Host: expected-domain.example.com更換Host: unexpected-domain.example.com頭,避免重定向。在遺留系統之前運行HAProxy不會產生很大的負載,因爲代碼非常緊密。我所有的遺留網絡系統現在都面向這些系統,使我能夠比其他方式更容易操作和修改行爲。

+0

感謝您的回答。你的假設是正確的。我在這裏檢查,重定向來自我的服務器。問題是有很多遺留代碼,我不能只改變重定向。 –

+0

我已經爲答案添加了一些可能有用的建議。 –

+0

偉大的建議!我會試試HAProxy。 –