2009-07-21 22 views
14

मुझे कुछ लिनक्स गुरुओं से कुछ मदद की ज़रूरत है। मैं एक वेबपैप पर काम कर रहा हूं जिसमें एक धूमकेतु सर्वर शामिल है। धूमकेतु सर्वर लोकहोस्ट पर चलता है: 8080 और यूआरएल लोकलहोस्ट का खुलासा करता है: ग्राहकों से कनेक्ट करने के लिए 8080/long_polling। मेरा वेबपैप लोकहोस्ट पर चलता है: 80।धूमकेतु के लिए nginx प्रॉक्सी

मैं धूमकेतु सर्वर से nginx से प्रॉक्सी अनुरोध करने के लिए nginx का उपयोग किया है, फिर भी, मैं इस समाधान के साथ दो शिकंजा है:

  1. nginx (स्थानीय होस्ट: 8080/long_polling: 80/long_polling स्थानीय होस्ट करने के लिए प्रॉक्सी) मुझे एक मिनट के बाद 504 गेटवे टाइम-आउट देता है, भले ही मैंने बदल दिया है, फिर भी से 600 सेकंड
  2. मैं वास्तव में नहीं चाहता कि nginx को धूमकेतु सर्वर पर प्रॉक्सी करना पड़े - nginx प्रॉक्सी है लंबे समय तक चलने वाले कनेक्शन (संभवतः आधे घंटे तक) के लिए नहीं बनाया गया है। मैं ग्राहकों को सीधे धूमकेतु सर्वर से कनेक्ट करने की अनुमति दूंगा, और धूमकेतु सर्वर को इसके साथ सौदा करने दें।

तो मेरे सवाल है: 8080/long_polling स्थानीय होस्ट करने के लिए: 80/long_polling nginx प्रॉक्सी का उपयोग किए बिना वहाँ किसी भी linux चाल है कि मुझे स्थानीय होस्ट का पर्दाफाश करने की अनुमति देता है? कुछ तो बात होगी। यही कारण है कि मुझे लगता है कि लिनक्स गुरु द्वारा शायद इस सवाल का सबसे अच्छा जवाब दिया जा सकता है।

पोर्ट 80 पर खुलासा करने के लिए मुझे/long_polling की आवश्यकता है इसलिए मैं AJAX का उपयोग इसे कनेक्ट करने के लिए कर सकता हूं (AJAX समान-मूल-नीति)।

इस संदर्भ के लिए मेरी nginx proxy.conf है:

proxy_redirect    off;                               
proxy_set_header   Host $host; 
proxy_set_header   X-Real-IP $remote_addr; 
proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for; 
client_max_body_size  10m; 
client_body_buffer_size  128k; 
proxy_connect_timeout  600; 
proxy_send_timeout   600; 
proxy_read_timeout   600; 
proxy_buffer_size   4k; 
proxy_buffers    4 32k; 
proxy_busy_buffers_size  64k; 
proxy_temp_file_write_size 64k; 
send_timeout    600; 
proxy_buffering    off; 

उत्तर

4

मुझे नहीं लगता है कि संभव है कि ...

localhost:8080/long_polling एक URI है ... और वास्तव में, यह होना चाहिए http://localhost:8080/long_polling ... HTTP में URI/long_polling डोमेन पर के साथ सर्वर से अनुरोध पोर्ट 80 के रूप में हल किया जा जाएगा 'स्थानीय होस्ट' ... वह यह है कि 127.0.0.1:80 करने के लिए एक टीसीपी-कनेक्शन खोलने, और

भेजने
GET /long_polling HTTP/1.1 
Host: localhost:8080 

प्लस कुछ अतिरिक्त HTTP हेडर ... मैं अभी तक नहीं सुना, कि बंदरगाहों प्रक्रियाओं करवाते बाध्य किया जा सकता है ...

वास्तव में, अगर मुझे समझ में अच्छी तरह से, nginx एक स्केलेबल प्रॉक्सी होने के लिए डिजाइन किया गया था। .. भी, वे दावा करते हैं कि उन्हें 10000 HTTP निष्क्रिय कनेक्शन के लिए 2.5 एमबी की आवश्यकता है ... ताकि वास्तव में कोई समस्या न हो ...

आप किस धूमकेतु सर्वर का उपयोग कर रहे हैं? क्या आप शायद धूमकेतु सर्वर प्रॉक्सी को वेबसर्वर दे सकते हैं? सामान्य HTTP अनुरोध कर बिना जल्दी से संभाला जाना चाहिए ...

greetz

back2dos

+1

ठीक है, अगर nginx उस छोटी मात्रा में स्मृति का उपयोग करता है, तो मुझे इसके बाद nginx के साथ फ्रंट प्रॉक्सी सर्वर के रूप में काम करना अच्छा लगेगा। बस उस "504 गेटवे टाइम-आउट" त्रुटि से छुटकारा पाने की आवश्यकता है जो लगभग एक मिनट के बाद होती है (हमेशा 55 से 65 सेकंड के बाद होती है)। आपके उत्तर के लिए धन्यवाद। मैं एक COMET सर्वर के रूप में node.js का उपयोग कर रहा हूँ। – Chris

0

कुछ गंभीर टीसीपी/आईपी mungling, आप एक ही पर एक ही TCP पोर्ट पर दो आवेदनों का खुलासा नहीं कर सकते हैं आईपी ​​पता। एक बार nginx कनेक्शन की सेवा शुरू कर दिया है, यह इसे अन्य आवेदन के लिए पास नहीं कर सकता है, यह केवल प्रॉक्सी कर सकते हैं।

तो, या तो उपयोगकर्ता अन्य पोर्ट, एक और आईपी नंबर (एक ही भौतिक मशीन पर हो सकता है), या प्रॉक्सी के साथ रहते हैं।

संपादित करें: मुझे लगता है कि nginx समय समाप्त हो रहा है क्योंकि यह लंबे समय तक कोई गतिविधि नहीं देखता है।शायद हर कुछ मिनट में एक शून्य संदेश जोड़ना कनेक्शन को असफल होने से रोक सकता है।

+0

ठीक है - मुझे लगता है कि लिनक्स गुरु ने बात की है :) यह बस आसानी से संभव नहीं है। तो मुझे पता लगाना होगा कि कैसे nginx को समय नहीं निकालना है। बहुत बहुत धन्यवाद! अगर कोई इसे पढ़ रहा है तो कोई विचार नहीं है कि क्यों nginx समय समाप्त हो सकता है, मुझे बताएं! – Chris

2

proxy_next_upstream error; 

प्रयास करें डिफ़ॉल्ट

proxy_next_upstream error timeout; 

है टाइमआउट 75 से अधिक सेकंड नहीं हो सकता।

http://wiki.nginx.org/NginxHttpProxyModule#proxy_next_upstream

http://wiki.nginx.org/NginxHttpProxyModule#proxy_connect_timeout

+0

संबंधित नोट पर, मैंने आपके ईमेल पर nginx मेलिंग सूची में ठोकर खाई जिसमें आप उल्लेख करते हैं कि आप node.js. का उपयोग कर रहे हैं। आप मेरे अपने प्रोजेक्ट में * बिल्कुल * एक कदम आगे हैं। मैं nginx के पीछे node.js का उपयोग करने की भी योजना बना रहा हूं। कृपया हमें पोस्ट करें कि यह कैसे काम करता है! मेरे पास जिथब FWIW पर कुछ node.js प्रोजेक्ट हैं: http://github.com/fictorial/ – z8000

+0

हाय ब्रायन! node.js मीठा है।कॉमेट सर्वर लिखना आसान था, और अच्छी तरह से व्यवहार कर रहा है। अभी तक सुनिश्चित नहीं है कि यह उत्पादन में कैसे बनाएगा। – Chris

+0

क्या आप इस बात को साझा करने में रुचि रखते हैं कि आपने क्या काम किया है? एक सीओएमईटी सर्वर एक उत्पादन-तैयार रिवर्स प्रॉक्सी के पीछे चल रहा है जैसे कि nginx (node.js Google समूह पर पोस्ट किया गया) node.js में अधिक रुचि रखने वाले लोगों को पाने का एक शानदार तरीका होगा और मेरी मदद भी करेगा! ;) – z8000

6

मैं वास्तव में इस काम कर पाने में कामयाब रहे। आप सभी को धन्यवाद। कारण nginx 504 समय बाहर एक मूर्खतापूर्ण एक था था: मैं बहुत तरह मेरे nginx.conf में proxy.conf शामिल नहीं था:

include /etc/nginx/proxy.conf; 

तो, मैं कोमेट सर्वर के लिए एक दृश्यपटल प्रॉक्सी के रूप में nginx रखने कर रहा हूँ ।

+2

क्या आप संदर्भ के लिए अपना nginx.conf और proxy.conf पोस्ट कर सकते हैं? – z8000

7

यहां मेरा nginx.conf और मेरा proxy.conf है। ध्यान दें कि proxy.conf रास्ता अधिक है - मैं अपने प्रोग्राम को डीबग करने का प्रयास करते समय बस इन सभी सेटिंग्स को सेट कर रहा था।

worker_processes 1;                                  
user www-data; 

error_log /var/log/nginx/error.log debug; 
pid  /var/run/nginx.pid; 

events { 
    worker_connections 1024; 
} 

http { 
    include /etc/nginx/proxy.conf; 

    include  /etc/nginx/mime.types; 
    default_type application/octet-stream; 

    access_log /var/log/nginx/access.log; 

    sendfile  on; 
    tcp_nopush  on; 

    keepalive_timeout 600; 
    tcp_nodelay  on; 

    gzip on; 
    gzip_comp_level 2; 
    gzip_proxied any; 
    gzip_types text/plain text/html text/css application/x-javascript text/xml application/xml application/xml+rss text/javascript; 

    include /etc/nginx/conf.d/*.conf; 
    include /etc/nginx/sites-enabled/*; 
} 

/etc/nginx/nginx.conf /etc/nginx/proxy.conf

proxy_redirect    off;                               
proxy_set_header   Host $host; 
proxy_set_header   X-Real-IP $remote_addr; 
proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for; 
client_max_body_size  10m; 
client_body_buffer_size  128k; 
proxy_connect_timeout  6000; 
proxy_send_timeout   6000; 
proxy_read_timeout   6000; 
proxy_buffer_size   4k; 
proxy_buffers    4 32k; 
proxy_busy_buffers_size  64k; 
proxy_temp_file_write_size 64k; 
send_timeout    6000; 
proxy_buffering    off; 
proxy_next_upstream error; 
+0

इसे साझा करने के लिए धन्यवाद! – z8000

0

आप 8080 के बजाय Node.js सर्वर पर सुनने (80) की कोशिश करना चाहते हो सकता है और संभवतः पूरी तरह Ngnix बाहर याद आती है (मैं आप उपयोग कर रहे हैं? एक async सर्वर के रूप में अनुमान)। मैं कनेक्ट मिडलवेयर का उपयोग करता हूं और सर्वर स्थैतिक फाइलों को व्यक्त करता हूं और कैशिंग के साथ सौदा करता हूं जो आमतौर पर नग्गिक्स द्वारा संभाला जाएगा। यदि आप नोड चलने के कई उदाहरण (जो मैं सलाह दूंगा) चाहता हूं, तो आप अपने गेटवे के रूप में Nginx की बजाय अन्य नोड उदाहरणों के लिए प्रॉक्सी/लोड बैलेंसर के रूप में node.js को देखना चाहेंगे। मैं इस के साथ एक समस्या में भाग गया, हालांकि जब मैं एक बार में कई स्थिर छवि फ़ाइलों की सेवा कर रहा था लेकिन एस 3 पर छवियों को रखने के बाद यह स्थिर हो गया। आप जो कर रहे हैं उसके लिए Nginx अधिक हो सकता है। इसे आज़माएं और देखें। शुभकामनाएँ।

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