2013-06-10 14 views
5

मैं अपनी वेबसाइट के लिए एस 3 पर स्थिर होस्टिंग चला रहा हूं। उदाहरण के लिए। www.somedomain.com एक एस 3 बाल्टी को इंगित करता है।एस 3 प्रॉक्सी ईसी 2 इंस्टेंस

मेरे पास मेरे एपीआई के लिए एक सबडोमेन api.somedomain.com है, लेकिन क्रॉस डोमेन के मुद्दों से निपटने के लिए यह परेशान है। मैं www.somedomain.com/api/... -> api.somedomain.com/... को मैप करना चाहता हूं लेकिन पूर्ण पोस्ट रीडायरेक्ट (301) के बिना, क्योंकि मैं पोस्ट करने में सक्षम होना चाहता हूं।

मुझे समझ में आता है कि क्लाउडफ़्रंट इस व्यवहार की अनुमति देता है, लेकिन यह थोड़ा अधिक है क्योंकि मुझे सीडीएन की आवश्यकता नहीं है।

मुझे 301 रीडायरेक्ट के साथ काम करने के लिए रूटिंग नियम प्राप्त हुए हैं, लेकिन क्या मेरे पास ec2 पर मेरे अनुरोधों को पार करने के लिए s3 को कॉन्फ़िगर करने के लिए वैसे भी है? धन्यवाद!

+3

आप ऐसा करने में सक्षम नहीं होंगे। एस 3 सिर्फ एक ऑब्जेक्ट स्टोर सिस्टम है। आप क्लाउडफ़्रंट के साथ ऐसा कर सकते हैं क्योंकि आप एक कस्टम मूल का उपयोग कर सकते हैं जो आपका ec2 उदाहरण है। – datasage

+0

हाँ। सही बात। हालांकि एस 3 में कस्टम रूटिंग नियम हैं जो mod_rewrite के समान हैं। अनुमान लगाया है कि वे भी अग्रेषण कर सकते हैं। = (क्लाउडफ़्रंट को सेट अप करना समाप्त हो गया है, लेकिन इसका अधिक खर्च होता है – kungfoo

उत्तर

3

इस समस्या को हल करने के लिए आपको बस इतना करना है कि प्रतिमान को स्विच करें। अपने ईसी 2 उदाहरण पर, बस अपने वेब ऐप से अलग-अलग वार्निश या nginx जैसे रिवर्स प्रॉक्सी चलाएं जो वेब ऐप पर http://www.somedomain.com/api/ * के लिए यातायात को रूट करता है (आप "/ api" उपसर्ग को हटाने के लिए अनुरोध url को फिर से लिख सकते हैं) और अन्य सभी ट्रैफ़िक एस 3 के लिए। ऐसा करने के लिए या तो nginx या वार्निश को कॉन्फ़िगर करना बहुत सरल है (घंटे, दिन नहीं)।

फिर अपने www.somedomain.com DNS रिकॉर्ड को S3 के बजाय अपने ec2 इंस्टेंस को इंगित करने के लिए स्विच करें।

नमूना गैर linted VCL वार्निश यह करने के लिए के लिए:

backend s3 { 
    .host = "s3.amazonaws.com"; 
    .port = "80"; 
} 

backend app { 
    .host = "localhost"; 
    .port = "8080"; 
} 

sub vcl_recv { 
    if (req.url ~ "^/api/.*") { 
     set req.backend = app; 
     set req.url = regsub(req.url, "^/api", ""); 
     set req.http.Host = "api.somedomain.com"; /* If your web app cares about host */ 
    } 
    else { 
     set req.backend = s3; 
    } 
} 

इस के बाद, आप चाहें तो ऐसा रूप फैंसी प्राप्त कर सकते हैं, स्वास्थ्य के लिए मार्ग 53 का उपयोग कर उदाहरण के लिए अपने EC2 उदाहरण की जाँच करें और DNS खोज से अधिक असफल जब यह नीचे हो, और कस्टम कैशिंग नियमों को कॉन्फ़िगर करना, तो आपकी एस 3 बाल्टी में, लेकिन आपके इच्छित व्यवहार को प्राप्त करने के लिए कोई भी आवश्यक नहीं है।

संबंधित मुद्दे