2010-12-29 3 views
11

मैं नोड ऐप के अनुरोध पास करने के लिए nginx का उपयोग कर रहा हूं। ऐप मूल रूप से एचटीएमएल के लिए रिमोट कैश के रूप में कार्य करता है (यह देखने के लिए जांच करता है कि क्या उपयोगकर्ता अनुरोध कर रहा है कि रेडिस डीबी में क्या है, अगर यह सिर्फ यह दिखाया गया है कि, अगर इसे पकड़ न लें और उसे रेडिस कैश में स्टोर न करें और इसे पूरा करें।)सीधे रेडिस कैश से सामग्री की सेवा के लिए nginx का उपयोग

मैं उत्सुक था कि नोडेक्स को सीधे रेडिस से सामग्री की सेवा करके नोड ऐप पर हमला करने के बावजूद मैं उत्सुक था? मैं http_redis मॉड्यूल के साथ चारों ओर बेवकूफ़ बना रहा हूं लेकिन मैं वास्तव में इसे काम पर नहीं ला सकता हूं।

एक साधारण उदाहरण होगा: http://mywebsite.com/a जहां nginx 'ए' कुंजी में सामग्री को प्रस्तुत करेगा या कुंजी मौजूद नहीं होने पर इसे नोड ऐप पर भेज देगा। क्या यह भी संभव है?

उत्तर

1

आपको Webdis के लिए रिवर्स प्रॉक्सी के रूप में Nginx स्थापित करके कुछ प्राप्त करने में सक्षम होना चाहिए।

वेबडिइस का उपयोग करने का तरीका यह है कि आपने यूआरएल में पूरा आदेश डाला है, इसलिए GET कुंजी a पर आप /GET/a का अनुरोध करते हैं। इसका मतलब यह है कि अगर सब कुछ आप सेवा करना चाहते GET का उपयोग कर उपलब्ध है आप Nginx में कुछ इस तरह कर सकते हैं:

location/{ 
    rewrite ^(.*)$ /GET/$1 break; 
    proxy_pass http://127.0.0.1:7379/; 
} 

(मैं यहाँ मेरे सिर के ऊपर से config लिख रहा हूँ, वाक्य रचना थोड़ा दूर हो सकता है)।

हालांकि, वेबडिस प्रोजेक्ट बहुत छोटा है इसलिए कोई बात नहीं है कि यह कितना अच्छा काम करेगा, और प्रतिक्रियाएं कुछ अतिरिक्त फ्लाफ के साथ जेएसओएन दस्तावेज हैं जिन्हें आप शायद वापस नहीं करना चाहते हैं।

+0

हमम, मैं इसे देख लूंगा। मैं नहीं जानता कि मैं nginx के बारे में बहुत कुछ जानता हूं इसलिए मुझे यह भी पता नहीं था कि मैं जो पूछ रहा था वह संभव था। मुझे लगता है कि आपकी विधि के लिए मुझे यह देखना होगा कि नोड या वेबडिज़ से इसकी सेवा करना तेज होगा या नहीं। ऐसा लगता है कि nginx सीधे memcache से सर्वर पर सक्षम है और http_redis मॉड्यूल इसके बाद मॉडलिंग लगता है। –

+0

यदि आप इसे पब/सबस के साथ भी उपयोग कर रहे हैं तो आप proxy_buffering बंद कर देंगे और proxy_read_timeout उचित उचित मूल्य पर बदलना चाहेंगे। – rrauenza

9

शायद वेबडिज़ की तुलना में सेटअप करना अधिक कठिन हो सकता है लेकिन आप redis2-nginx-module जैसे कुछ अतिरिक्त मॉड्यूल के साथ सीधे nginx डिमन में ऐसा कर सकते हैं। आपको nginx recompile करना होगा।

होम पेज पर कॉन्फ़िगरेशन के कुछ अच्छे उदाहरण हैं।

उदाहरण के लिए:

# GET /get?key=some_key 
location /get { 
    set_unescape_uri $key $arg_key; # this requires ngx_set_misc 
    redis2_query get $key; 
    redis2_pass foo.com:6379; 
} 
बेशक

, थोड़ा और nginx विन्यास के साथ, आप किसी अन्य URL पैटर्न मिल सकता है।

ध्यान दें कि इस उदाहरण के लिए, आपको ngx_set_misc मॉड्यूल भी संकलित करना होगा।

3

मुझे पता है कि यह एक पुराना धागा है लेकिन फिर भी, यह कुछ के लिए उपयोगी हो सकता है। मैंने उसी दृष्टिकोण की कोशिश की क्योंकि आपके पास nginx nginx में HttpRedis2Module का उपयोग किए बिना सीधे Redis से सेवा करता है। जब मैं इसे काम कर रहा था तो मैं खुश था क्योंकि यह इसके साथ कुछ परेशानी थी, लेकिन जब मैंने कुछ तनाव-परीक्षण किए तो मुझे डर है कि इससे वाकई खराब परिणाम सामने आए।

यह वास्तव में मॉड्यूल के साथ nginx->redis का उपयोग करने से nginx->php->mongodb का उपयोग करने के लिए थोड़ा तेज़ और अधिक स्थिर था।

+1

क्या आपने nginx में अपने रेडिस पूल के लिए रखरखाव स्थापित किया था?पिछली बार जब मैं परीक्षण कर रहा था तो यह रखरखाव php -> redis और बहुत तेज़ से धीमी गति के बीच एक अंतर था ... –

+0

मुझे आश्चर्य नहीं है कि PHP + MongoDb केवल रेडिस की तुलना में तेज है क्योंकि रेडिस एक एकल प्रक्रिया है जिसमें बहु-थ्रेडिंग नहीं है जिसका अर्थ है कि यह एक प्रक्रिया के साथ क्रमशः सभी अनुरोधों को संभालता है चाहे आप कितने सीपीयू कोर हों। तो जब यह बहुत तेज़ है, तो यह काफी संभव है कि PHP + मोंगो डीबी उच्च समेकन के साथ तेज़ है क्योंकि उनके पास समांतर में कई अनुरोधों का सामना करके सभी CPU कोरों का पूरी तरह से उपयोग करने की क्षमता है। इसके अलावा मोंगो डीबी बस तेज तेज है। – ColinM

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