2013-04-29 6 views
10

मैं समझता हूं कि एकाधिक node.js, और मैं एक्सटेंशन उल्का द्वारा मानता हूं, Nginx का उपयोग कर एक सर्वर पर चलाया जा सकता है। मुझे Nginx सेटअप मिल गया है और उबंटू सर्वर पर ठीक चल रहा है, मैं इसे अनुरोधों का जवाब देने के लिए भी प्राप्त कर सकता हूं और उन्हें मेरे एक आवेदन के लिए प्रॉक्सी कर सकता हूं। हालांकि, मैंने दूसरे एप्लिकेशन में प्रॉक्सी यातायात के लिए Nginx प्राप्त करने का प्रयास करते समय एक रोडब्लॉक मारा।Nginx और एकाधिक उल्का/Nodejs ऐप्स के साथ समस्या

कुछ पृष्ठभूमि:

  • 1 एप्लिकेशन पोर्ट 8001
  • 2 एप्लिकेशन बंदरगाह पर चल रहे 8002
  • Nginx पोर्ट पर ध्यान दे 80
  • nginx प्राप्त करने के लिए प्रयास कर रहा है पर चल रहा है पर यातायात भेजने के लिए/ऐप्लिकेशन एक और ऐप/एप 2/ऐप पर दो
  • दोनों ऐप्स डोमेन पर जाकर पहुंचा जा सकता है: 8001 और डोमेन: 8002

मेरे Nginx config:

upstream mydomain.com { 
server 127.0.0.1:8001; 
server 127.0.0.1:8002; 
} 

# the nginx server instance 
server { 
listen 0.0.0.0:80 default_server; 
access_log /var/log/nginx/mydomain.log; 

location /app2 { 
    rewrite /app2/(.*) /$1 break; 
    proxy_set_header X-Real-IP $remote_addr; 
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
    proxy_set_header Host $http_host; 
    proxy_set_header X-NginX-Proxy true; 
    proxy_pass http://127.0.0.1:8002; 
    proxy_redirect off; 
    proxy_http_version 1.1; 
    proxy_set_header Upgrade $http_upgrade; 
    proxy_set_header Connection "upgrade"; 
} 

location/{ 
    proxy_set_header X-Real-IP $remote_addr; 
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
    proxy_set_header Host $http_host; 
    proxy_set_header X-NginX-Proxy true; 
    proxy_pass http://127.0.0.1:8001; 
    proxy_redirect off; 
    proxy_http_version 1.1; 
    proxy_set_header Upgrade $http_upgrade; 
    proxy_set_header Connection "upgrade"; 
} 
} 

क्या जब यातायात के लिए/APP2/मैं बहुत आभारी चला जाता है पर जा रहा हो सकता है के रूप में किसी भी अंतर्दृष्टि!

उत्तर

26
proxy_pass http://127.0.0.1:8002/1; <-- these should be 
proxy_pass http://**my_upstream_name**; <--these 

तो

upstream my_upstream_name { 

//Ngixn do a round robin load balance, some users will conect to/and othes to /app2 

server 127.0.0.1:8001; 

server 127.0.0.1:8002; 

} 

कुछ सुझावों प्रॉक्सी को नियंत्रित:

यहाँ

तो एक नज़र here @nginx डॉक्स ले हम चले:

वजन = NUMBER - वजन निर्धारित नहीं होने पर, सर्वर का वजन निर्धारित करें। डिफ़ॉल्ट राउंड रॉबिन असंतुलन।

max_fails = संख्या - समय अवधि (पैरामीटर fail_timeout द्वारा आवंटित) जिसके बाद यह निष्क्रिय माना जाता है के भीतर सर्वर साथ संवाद स्थापित करने में असफल प्रयासों की संख्या। यदि सेट नहीं है, तो प्रयासों की संख्या एक है। 0 का मान इस चेक को बंद कर देता है। विफलता माना जाता है जिसे proxy_next_upstream या fastcgi_next_upstream द्वारा परिभाषित किया गया है (http_404 त्रुटियों को छोड़कर जो max_fails की ओर गिनती नहीं है)।

fail_timeout = समय - समय जिसके दौरान * max_fails होने चाहिए * सर्वर के साथ संचार में असफल प्रयासों की संख्या कि कारण होगा सर्वर निष्क्रिय विचार किया जाना, और यह भी समय के लिए सर्वर निष्क्रिय विचार किया जाएगा (एक और प्रयास करने से पहले)। यदि समय निर्धारित नहीं है तो 10 सेकंड है। fail_timeout में अपस्ट्रीम प्रतिक्रिया समय के साथ कुछ लेना देना नहीं है, इसे नियंत्रित करने के लिए proxy_connect_timeout और proxy_read_timeout का उपयोग करें।

- सर्वर को स्थायी रूप से ऑफ़लाइन के रूप में चिह्नित करता है, निर्देश ip_hash के साथ उपयोग किया जा सकता है।

बैकअप - (0.6।7 या बाद में) केवल इस सर्वर का उपयोग करता है, तो गैर बैकअप सर्वर सभी नीचे हैं या व्यस्त (निर्देश ip_hash के साथ उपयोग नहीं किया जा सकता है)

EXAMPLE generic 

    upstream my_upstream_name { 
     server backend1.example.com weight=5; 
     server 127.0.0.1:8080   max_fails=3 fail_timeout=30s; 
     server unix:/tmp/backend3; 
    } 
// proxy_pass http://my_upstream_name; 

इन यद्यपि आप क्या जरूरत है:

यदि u जैसे एप्लिकेशन प्रति 1 नदी के ऊपर: सिर्फ एक अनुप्रयोग के लिए vhosts के बीच डे लोड को नियंत्रित करना चाहते हैं:

upstream my_upstream_name{ 
      server 127.0.0.1:8080   max_fails=3 fail_timeout=30s; 
      server 127.0.0.1:8081   max_fails=3 fail_timeout=30s; 
      server 127.0.0.1:8082   max_fails=3 fail_timeout=30s; 
      server 127.0.0.1:8083 backup; 
// proxy_pass http://my_upstream_name; 
// amazingness no.1, the keyword "backup" means that this server should only be used when the rest are non-responsive 
    } 

अगर यू 2 या अधिक क्षुधा है

upstream my_upstream_name{ 
       server 127.0.0.1:8080   max_fails=3 fail_timeout=30s; 
       server 127.0.0.1:8081   max_fails=3 fail_timeout=30s; 
       server 127.0.0.1:8082   max_fails=3 fail_timeout=30s; 
       server 127.0.0.1:8083 backup; 
      } 
upstream my_upstream_name_app2 { 
       server 127.0.0.1:8084   max_fails=3 fail_timeout=30s; 
       server 127.0.0.1:8085   max_fails=3 fail_timeout=30s; 
       server 127.0.0.1:8086   max_fails=3 fail_timeout=30s; 
       server 127.0.0.1:8087 backup; 
      } 
upstream my_upstream_name_app3 { 
       server 127.0.0.1:8088   max_fails=3 fail_timeout=30s; 
       server 127.0.0.1:8089   max_fails=3 fail_timeout=30s; 
       server 127.0.0.1:8090   max_fails=3 fail_timeout=30s; 
       server 127.0.0.1:8091 backup; 
      } 

उम्मीद है कि यह मदद करता है।

+2

एक sweeeeet जवाब यहीं यही कारण है कि! एक upvote है :) –

+0

यह एक अद्भुत जवाब है, धन्यवाद। मेरा एकमात्र सवाल यह है कि मैं एक राउंड रॉबिन करने की कोशिश नहीं कर रहा हूं (जिसे आपने आंशिक रूप से संबोधित किया है)। मैं सही अपस्ट्रीम प्रविष्टियां जोड़ूंगा लेकिन मैं उत्सुक हूं ... क्या मेरी स्थान प्रविष्टियां ठीक हैं? – jak119

+0

मैं अगली सिफारिश करता हूं: यदि ऐप 1 कोर ऐप है और ऐप 2 'एप 1 का बच्चा' है। आपका स्थान ठीक है। आप दोनों को/app1 और/app2 पर भी डाल सकते हैं। बोल – jmingov

0

लोग Nginx के लिए वैकल्पिक खोज रहे हैं: प्रत्येक उल्का ऐप के लिए क्लस्टर पैकेज इंस्टॉल करें और पैकेज स्वचालित रूप से लोड संतुलन को संभालेगा। https://github.com/meteorhacks/cluster

यह कैसे सेट अप करने के लिए:

# You can use your existing MONGO_URL for this 
export CLUSTER_DISCOVERY_URL=mongodb://host:port/db, 
# this is the direct URL to your server (it could be a private URL) 
export CLUSTER_ENDPOINT_URL=http://ipaddress 
# mark your server as a web service (you can set any name for this) 
export CLUSTER_SERVICE=web 

उदाहरण स्थापना:

{ 
    "ip-1": { 
    "endpointUrl": "http://ip-1", 
    "balancerUrl": "https://one.bulletproofmeteor.com" 
    }, 
    "ip-2": { 
    "endpointUrl": "http://ip-2", 
    "balancerUrl": "https://two.bulletproofmeteor.com" 
    }, 
    "ip-3": { 
    "endpointUrl": "http://ip-3", 
    "balancerUrl": "https://three.bulletproofmeteor.com" 
    }, 
    "ip-4": { 
    "endpointUrl": "http://ip-4" 
    } 
} 
संबंधित मुद्दे