Node.js+Nginx-अब क्या?




concept (7)

Nginx एक फ्रंट एंड सर्वर के रूप में काम करता है, जो इस मामले में node.js सर्वर के अनुरोधों को प्रॉक्सी करता है। इसलिए आपको नोड के लिए nginx कॉन्फ़िगरेशन फ़ाइल सेट करने की आवश्यकता है।

मैंने अपने उबंटू बॉक्स में यही किया है:

/etc/nginx/sites-available/ फ़ाइल पर yourdomain.com फ़ाइल बनाएं /etc/nginx/sites-available/

vim /etc/nginx/sites-available/yourdomain.com

इसमें आपके पास कुछ होना चाहिए:

# the IP(s) on which your node server is running. I chose port 3000.
upstream app_yourdomain {
    server 127.0.0.1:3000;
    keepalive 8;
}

# the nginx server instance
server {
    listen 80;
    listen [::]:80;
    server_name yourdomain.com www.yourdomain.com;
    access_log /var/log/nginx/yourdomain.com.log;

    # pass the request to the node.js server with the correct headers
    # and much more can be added, see nginx config options
    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://app_yourdomain/;
      proxy_redirect off;
    }
 }

यदि आप websocket अनुरोधों को संभालने के लिए nginx (> = 1.3.13) भी चाहते हैं, तो location / अनुभाग में निम्न पंक्तियां जोड़ें:

proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";

एक बार आपके पास यह सेटअप हो जाने के बाद आपको ऊपर कॉन्फ़िगर फ़ाइल में परिभाषित साइट को सक्षम करना होगा:

cd /etc/nginx/sites-enabled/ 
ln -s /etc/nginx/sites-available/yourdomain.com yourdomain.com

/ /var/www/yourdomain/app.js / /var/www/yourdomain/app.js / /var/www/yourdomain/app.js / /var/www/yourdomain/app.js पर अपना नोड सर्वर ऐप बनाएं और इसे /var/www/yourdomain/app.js पर चलाएं localhost:3000

var http = require('http');

http.createServer(function (req, res) {
    res.writeHead(200, {'Content-Type': 'text/plain'});
    res.end('Hello World\n');
}).listen(3000, "127.0.0.1");
console.log('Server running at http://127.0.0.1:3000/');

वाक्यविन्यास गलतियों के लिए परीक्षण:

nginx -t

Nginx पुनरारंभ करें:

sudo /etc/init.d/nginx restart

अंत में नोड सर्वर शुरू करें:

cd /var/www/yourdomain/ && node app.js

अब आपको yourdomain.com पर "हैलो वर्ल्ड" देखना चाहिए

नोड सर्वर शुरू करने के संबंध में एक आखिरी नोट: आपको नोड डिमन के लिए किसी प्रकार की निगरानी प्रणाली का उपयोग करना चाहिए। अपस्टार्ट और मॉनिट के साथ नोड पर एक शानदार ट्यूटोरियल है

https://code.i-harness.com

मैंने अपने सर्वर पर Node.js और Nginx सेट अप किया है। अब मैं इसका उपयोग करना चाहता हूं, लेकिन, शुरू करने से पहले 2 प्रश्न हैं:

  1. उन्हें एक साथ कैसे काम करना चाहिए? मुझे अनुरोधों को कैसे संभालना चाहिए?
  2. Node.js सर्वर के लिए 2 अवधारणाएं हैं, जो एक बेहतर है:

    ए। प्रत्येक वेबसाइट के लिए एक अलग HTTP सर्वर बनाएँ जिसकी आवश्यकता है। फिर प्रोग्राम की शुरुआत में सभी जावास्क्रिप्ट कोड लोड करें, इसलिए कोड को एक बार व्याख्या किया जाता है।

    ख। एक एकल Node.js सर्वर बनाएं जो सभी Node.js अनुरोधों को संभालता है। यह अनुरोधित फ़ाइलों को पढ़ता है और उनकी सामग्री को evals। तो फ़ाइलों को प्रत्येक अनुरोध पर व्याख्या की जाती है, लेकिन सर्वर तर्क बहुत आसान है।

मेरे लिए यह स्पष्ट नहीं है कि Node.js का सही तरीके से उपयोग कैसे करें।


Nginx एक रिवर्स प्रॉक्सी सर्वर के रूप में कार्य कर सकता है जो एक प्रोजेक्ट मैनेजर की तरह काम करता है। जब इसे एक अनुरोध मिलता है तो यह इसका विश्लेषण करता है और आगे की ओर अपस्ट्रीम (प्रोजेक्ट सदस्यों) का अनुरोध करता है या खुद को संभालता है। Nginx के कॉन्फ़िगरेशन के आधार पर अनुरोध को संभालने के दो तरीके हैं।

  • अनुरोध की सेवा करें
  • अनुरोध को किसी अन्य सर्वर पर अग्रेषित करें

    server{
     server_name mydomain.com sub.mydomain.com;
    
     location /{ 
      proxy_pass http://127.0.0.1:8000;  
      proxy_set_header Host $host;
      proxy_pass_request_headers on;  
     }
    
     location /static/{
       alias /my/static/files/path;
     }
    

    }

अनुरोध सर्वर

इस कॉन्फ़िगरेशन के साथ जब अनुरोध url mydomain.com/static/myjs.js यह myjs.js फ़ाइल /my/static/files/path फ़ोल्डर में देता है। जब आप स्थिर फाइलों को सेवा देने के लिए nginx को कॉन्फ़िगर करते हैं तो यह अनुरोध स्वयं ही संभालता है।

अनुरोध को किसी अन्य सर्वर पर अग्रेषित करें

जब अनुरोध url है mydomain.com/dothis nginx http://127.0.0.1:8000 के अनुरोध को आगे बढ़ाएगा । स्थानीयहोस्ट 8000 बंदरगाह पर चल रही सेवा अनुरोध प्राप्त करेगी और nginx और nginx को प्रतिक्रिया देता है ग्राहक को प्रतिक्रिया देता है।

जब आप पोर्ट 8000 nginx पर node.js सर्वर चलाते हैं तो अनुरोध node.js. को अग्रेषित करेगा। Node.js तर्क लिखें और अनुरोध संभाल लें। यही है कि आपके पास nodejs सर्वर nginx सर्वर के पीछे चल रहा है।

यदि आप नोडज के अलावा किसी भी अन्य सेवाएं को चलाने की इच्छा रखते हैं तो बस विभिन्न बंदरगाहों पर डीजेगो, फ्लास्क, पीएचपी जैसी दूसरी सेवा चलाएं और इसे nginx में कॉन्फ़िगर करें।


आप nginx के साथ एकाधिक डोमेन भी सेट कर सकते हैं, एकाधिक node.js प्रक्रियाओं को अग्रेषित कर सकते हैं।

उदाहरण के लिए इन्हें प्राप्त करने के लिए:

  • domain1.com -> Node.js प्रक्रिया को स्थानीय रूप से चल रहा है http://127.0.0.1:4000
  • domain2.com -> Node.js प्रक्रिया को स्थानीय रूप से चल रहा है http://127.0.0.1:52000

/ etc / nginx / साइटों सक्षम / डोमेन 1

server {
    listen 80;
    listen [::]:80;
    server_name domain1.com;
    access_log /var/log/nginx/domain1.access.log;
    location / {
        proxy_pass    http://127.0.0.1:4000/;
    }
}

/ Etc / nginx / साइट-सक्षम / डोमेन 2 में

server {
    listen 80;
    listen [::]:80;
    server_name domain2.com;
    access_log /var/log/nginx/domain2.access.log;
    location / {
        proxy_pass    http://127.0.0.1:5000/;
    }
}

आप nginx द्वारा प्रदत्त निर्देशिका में स्थैतिक फ़ाइलों को उत्पन्न करने के लिए node.js का भी उपयोग कर सकते हैं। बेशक, आपकी साइट के कुछ गतिशील हिस्सों को नोड द्वारा परोसा जा सकता है, और कुछ nginx (स्थिर) द्वारा।

उनमें से कुछ को nginx द्वारा सेवा करने से आपका प्रदर्शन बढ़ जाता है ..


एक सर्वर कॉन्फ़िगरेशन में ऐप्स के लिए आपके पास अलग-अलग यूआरएल भी हो सकते हैं:

  • yourdomain.com/app1/* -> Node.js प्रक्रिया को स्थानीय रूप से चलने की प्रक्रिया http://127.0.0.1:3000
  • yourdomain.com/app2/* -> Node.js प्रक्रिया को स्थानीय रूप से चलने की प्रक्रिया http://127.0.0.1:4000

/ Etc / nginx / साइट-सक्षम / yourdomain में :

server {
    listen 80;
    listen [::]:80;
    server_name yourdomain.com;

    location ^~ /app1/{
        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:3000/;
    }

    location ^~ /app2/{
        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:4000/;
    }
}

Nginx पुनरारंभ करें:

sudo service nginx restart

आवेदन शुरू कर रहा है।

नोड app1.js

var http = require('http');
http.createServer(function (req, res) {
    res.writeHead(200, {'Content-Type': 'text/plain'});
    res.end('Hello from app1!\n');
}).listen(3000, "127.0.0.1");
console.log('Server running at http://127.0.0.1:3000/');

नोड app2.js

var http = require('http');
http.createServer(function (req, res) {
    res.writeHead(200, {'Content-Type': 'text/plain'});
    res.end('Hello from app2!\n');
}).listen(4000, "127.0.0.1");
console.log('Server running at http://127.0.0.1:4000/');

मैं Nginx के माध्यम से स्वतंत्र नोड एक्सप्रेस अनुप्रयोगों प्रॉक्सी।

इस प्रकार नए अनुप्रयोगों को आसानी से घुमाया जा सकता है और मैं अलग-अलग स्थानों पर एक ही सर्वर पर अन्य सामान भी चला सकता हूं।

Nginx कॉन्फ़िगरेशन उदाहरण के साथ मेरे सेटअप पर अधिक जानकारी यहां दी गई है:

Nginx के साथ उपफोल्डर में एक वेब सर्वर पर एकाधिक नोड अनुप्रयोगों को तैनात करें

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

नोड परिनियोजन के लिए कोई आम दृष्टिकोण नहीं है।

Google इस विषय पर कई लेख प्राप्त कर सकता है, लेकिन मैं जिस सेटअप की आवश्यकता है उसके लिए उचित समाधान खोजने के लिए संघर्ष कर रहा था।

असल में, मेरे पास एक वेब सर्वर है और मैं चाहता हूं कि नोड अनुप्रयोगों को उप-फ़ोल्डर्स (यानी http://myhost/demo/pet-project/ ) पर आरोहित किया जाए, बिना आवेदन कोड के कॉन्फ़िगरेशन निर्भरता को शुरू किए।

उसी समय मैं ब्लॉग जैसे अन्य सामान एक ही वेब सर्वर पर चलाने के लिए चाहता हूं।

सरल लगता है? जाहिरा तौर पर नहीं।

वेब नोड अनुप्रयोगों पर कई उदाहरणों में या तो पोर्ट 80 पर चलाया जाता है या रूट पर Nginx द्वारा प्रॉक्सी किया जाता है।

हालांकि दोनों दृष्टिकोण कुछ उपयोग मामलों के लिए मान्य हैं, फिर भी वे मेरे सरल लेकिन थोड़ा सा विदेशी मानदंडों को पूरा नहीं करते हैं।

यही कारण है कि मैंने अपनी खुद की Nginx विन्यास बनाया और यहां एक निकास है:

upstream pet_project {
  server localhost:3000;
}

server {
  listen 80;
  listen [::]:80;
  server_name frontend;

  location /demo/pet-project {
    alias /opt/demo/pet-project/public/;
    try_files $uri $uri/ @pet-project;
  }

  location @pet-project {
    rewrite /demo/pet-project(.*) $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 $proxy_host;
    proxy_set_header X-NginX-Proxy true;

    proxy_pass http://pet_project;
    proxy_redirect http://pet_project/ /demo/pet-project/;
  }
}

इस उदाहरण से आप देख सकते हैं कि मैं अपने पालतू परियोजना नोड एप्लिकेशन को बंदरगाह 3000 पर http://myhost/demo/pet-project पर चला रहा http://myhost/demo/pet-project

पहला Nginx जांचता है कि क्या अनुरोध किया गया संसाधन एक स्थिर फ़ाइल है जो / opt / demo / pet-project / public / पर उपलब्ध है / और यदि ऐसा है तो यह बहुत ही कुशल है, इसलिए हमें एक अनावश्यक परत की आवश्यकता नहीं है स्थैतिक midware।

फिर अन्य सभी अनुरोधों को ओवर प्रोजेक्ट किया गया है और पालतू परियोजना नोड अनुप्रयोग से जुड़ा हुआ है, इसलिए नोड एप्लिकेशन को यह जानने की आवश्यकता नहीं है कि यह वास्तव में कहां घुड़सवार है और इस प्रकार कॉन्फ़िगरेशन द्वारा पूरी तरह से कहीं भी स्थानांतरित किया जा सकता है।

proxy_redirect को स्थान शीर्षलेख को ठीक से संभालना आवश्यक है। यदि आप अपने नोड एप्लिकेशन में res.redirect () का उपयोग करते हैं तो यह बेहद महत्वपूर्ण है।

आप अलग-अलग बंदरगाहों पर चल रहे एकाधिक नोड अनुप्रयोगों के लिए आसानी से इस सेटअप को दोहरा सकते हैं और अन्य उद्देश्यों के लिए अधिक स्थान हैंडलर जोड़ सकते हैं।

से: http://skovalyov.blogspot.dk/2012/07/deploy-multiple-node-applications-on.html


हम आसानी से एक Nversejs ऐप को Nginx द्वारा एक रिवर्स प्रॉक्सी के रूप में कार्य कर सकते हैं।
निम्न कॉन्फ़िगरेशन मानता है कि 127.0.0.1:8080 पर NodeJS अनुप्रयोग चल रहा है,

  server{
     server_name domain.com sub.domain.com; # multiple domains

     location /{ 
      proxy_pass http://127.0.0.1:8080;  
      proxy_set_header Host $host;
      proxy_pass_request_headers on;  
     }

     location /static/{
       alias /absolute/path/to/static/files; # nginx will handle js/css
     }
   } 

उपरोक्त सेटअप में आपका नोडज ऐप होगा,

  • HTTP_HOST शीर्षलेख प्राप्त करें जहां आप प्रतिक्रिया देने के लिए डोमेन विशिष्ट तर्क लागू कर सकते हैं। '
  • आपके आवेदन को प्रक्रिया प्रबंधक द्वारा प्रबंधित किया जाना चाहिए जैसे pm2 या परिस्थितियों को संभालने के लिए पर्यवेक्षक / सॉकेट या संसाधन इत्यादि।

  • rollbar या rollbar जैसी उत्पादन त्रुटियों के लिए त्रुटि रिपोर्टिंग सेवा सेट अप करें

नोट: आप डोमेन विशिष्ट अनुरोध मार्गों को सौंपने के लिए तर्क सेट कर सकते हैं, एक्सप्रेसजेज़ एप्लिकेशन के लिए एक middleware बनाएं





concept