2017-04-10 12 views
5

पर एकाधिक नोडजे सर्वर चला नहीं सकता है। मैं अपने वेबसर्वर पर एक सबडोमेन से विभिन्न वेबहुक के साथ (आधिकारिक) किक चॅटबॉट के लिए एकाधिक नोडजे सर्वर चलाने की कोशिश कर रहा हूं।एक सबडोमेन

हालांकि, मैं ऐसा करने में सक्षम नहीं हूं। एक बॉट के लिए यह ठीक काम करता है।

'use strict'; 
let util = require('util'); 
let http = require('http'); 
let request = require('request'); 
let Bot = require('@kikinteractive/kik'); 
let bot = new Bot({ 
    username: "foo", 
    apiKey: "bar", 
    baseUrl: "https://bots.mydomain.com" 
}); 
bot.updateBotConfiguration(); 

// ... code ... 

let server = http.createServer(bot.incoming()).listen(process.env.PORT || 8080); 

तो यह NodeJS सर्वर मूल रूप से बंदरगाह 8080 पर सुन रहा है:

मान सभी webhooks https://bots.mydomain.com

app.js पर स्थित हैं की सुविधा देता है: यह एक काम कर NodeJS केवल सर्वर के लिए मेरे सेटअप है । अब तक तो अच्छा

server { 
    root /var/www/bots.mydomain.com/public_html; 
    index index.php index.html index.htm; 
    server_name bots.mydomain.com; 
    location/{ proxy_pass http://localhost:8080/; } # Port 8080 
} 

: इसलिए, साइट https://bots.mydomain.com के लिए मेरे nginx config इस तरह दिखता है। यह पूरी तरह से ठीक काम करता है! लेकिन यहाँ आता मुद्दा:

अगर मैं कई NodeJS सर्वर को चलाने के लिए, public_html फ़ोल्डर में निर्देशिका बनाकर कोशिश, की सुविधा देता है /bot1 और /bot2 कहना और अनुकूलन कि तरह मेरे nginx config:

server { 
    root /var/www/bots.mydomain.com/public_html; 
    index index.php index.html index.htm; 
    server_name bots.mydomain.com; 
    location /bot1 { proxy_pass http://localhost:8080/; } # Port 8080 
    location /bot2 { proxy_pass http://localhost:8090/; } # Port 8090 
} 

और अंत में 8080 के बजाय बंदरगाह 8090 पर सुनने के लिए दूसरे सर्वर को सेट करना और निश्चित रूप से बेस URL को https://bots.mydomain.com/bot1 या https://bots.mydomain.com/bot2 पर सेट करना, अब कुछ भी काम नहीं करता है। और इसके द्वारा मेरा मतलब है कि वेबहुक नोडजे सर्वर पर कोई डेटा पास नहीं करते हैं। हालांकि, वे चल रहे हैं! मैं यह जानता हूँ क्योंकि अगर मैं (उदाहरण के लिए) https://bots.mydomain.com पर नेविगेट जबकि बॉट ऑफ़लाइन है, मैं स्पष्ट रूप से त्रुटि 502 Bad Gateway प्राप्त लेकिन अगर बॉट ऑनलाइनहै मैं एक समय समाप्ति मिल (सर्वर वास्तव में सुन रहा है, जिसका मतलब है)।

क्या मुझे कुछ याद आ रहा है या Nginx निर्देशिकाओं के लिए एकाधिक webhooks या proxy_passes को अनुमति नहीं देता है?

प्रत्येक बॉट के लिए सबडोमेन बनाने के लिए एक कामकाज होगा, जो काम करेगा (मैंने कोशिश की)। लेकिन मैं बॉट्स के लिए सबडोमेन के बजाय उप निर्देशिका का उपयोग करना चाहता हूं।

संपादित:

मैं एक अजीब व्यवहार देखा: यदि मैं /

की तरह के लिए एक proxy_pass सेट: location/{ proxy_pass http://localhost:8080; }

पोर्ट 8080 के

और bots.mydomain.com/bot1 को bot1 लिपि में baseurl निर्धारित करते हैं, बॉट -1 काम करता है।

लेकिन मुझे स्पष्ट रूप से अभी भी काम करने के लिए अन्य बॉट नहीं मिल सकते हैं क्योंकि मैं रूट (/) का उपयोग कर रहा हूं।

क्या इसका मतलब है कि यह किक-एपीआई के सुनने का तरीका है?

संपादित 2:

मैं Nginx लॉग अब जाँच की और ऐसा लगता है किक आवरण एक निर्देशिका जो मौजूद नहीं है पर सुनने की कोशिश करता है की तरह। मैं निम्नलिखित किया: बंदरगाह 8080 & संदेश उस पर बॉट शुरू करो।

https://pastebin.com/7G6TViHM

2017/04/13 09:07:05 [error] 15614#15614: *1 open() "/var/www/bots.mydomain.com/public_html/incoming" failed (2: No such file or directory), client: 107.XXX.XXX.XXX, server: bots.mydomain.com, request: "POST /incoming HTTP/1.1", host: "bots.mydomain.com" 
2017/04/13 09:07:13 [error] 15614#15614: *1 open() "/var/www/bots.mydomain.com/public_html/incoming" failed (2: No such file or directory), client: 107.XXX.XXX.XXX, server: bots.mydomain.com, request: "POST /incoming HTTP/1.1", host: "bots.mydomain.com" 

लेकिन मैं अभी भी इसे ठीक करने का पता नहीं है: यह लॉग उत्पादन होता है। एक परीक्षण के रूप में मैंने निर्देशिका incomingpublic_html में निर्देशिका बनाई। इसने लॉग में निम्न को वापस कर दिया:

2017/04/13 09:32:41 [error] 15614#15614: *10 directory index of "/var/www/bots.mydomain.com/public_html/incoming/" is forbidden, client: 107.XXX.XXX.XXX, server: bots.mydomain.com, request: "GET /incoming/ HTTP/1.1", host: "bots.mydomain.com" 

क्या किसी को इसे ठीक करने के बारे में कोई विचार है?

+0

कैसे उपयोग करने के बारे 'स्थान/bot1 /' के साथ एक अनुगामी '/' (सिर्फ एक प्रयोग के रूप) –

+2

आप अपने nginx लोग इन साझा कर सकता है? –

+0

@NullDev आप इसे बदलने की कोशिश कर सकते हैं: 'baseUrl:" https://bots.mydomain.com "' प्रत्येक बॉट पर: 'baseUrl:" https://bots.mydomain.com/bot1 "' 'baseurl:" https://bots.mydomain.com/bot2 "' और nginx लॉग पोस्ट। –

उत्तर

0

यह शायद wok नहीं है क्योंकि आपके लक्षित सर्वर पथ को प्राप्त करते हैं जिसमें /bot1 और /bot2 उपसर्ग शामिल हैं, जिन्हें वे उम्मीद नहीं कर सकते हैं।

शायद कोशिश:

location /bot1 { 
    rewrite ^/bot1/(.*)$ /$1 break; 
    proxy_pass http://localhost:8080/; 

} 
location /bot2 { 
    rewrite ^/bot2/(.*)$ /$1 break; 
    proxy_pass http://localhost:8090/; 
} 
+0

ऊपर से, दुर्भाग्य से किया है। धन्यवाद वैसे भी – NullDev

1

मुझे लगता है कि आपकी समस्या का proxy_pass में स्लैश, जो को हटा /bot1 और /bot2 उपसर्गों एक बार (दोनों मात्र / साथ की जगह) को अपस्ट्रीम के पारित कर दिया साथ है, इसलिए, प्रत्येक bot में (जैसा कि आप का उल्लेख है कि आप बाहरी URL से मेल करने के लिए उन सेटिंग में बदलाव किया था उचित रूप से) अपने nodejs कोड एक परिणाम के रूप एक बेमेल baseUrl सेटिंग है।

-location /bot1 { proxy_pass http://localhost:8080/; } # Port 8080 
-location /bot2 { proxy_pass http://localhost:8090/; } # Port 8090 
+location /bot1 { proxy_pass http://localhost:8080; } # Port 8080 
+location /bot2 { proxy_pass http://localhost:8090; } # Port 8090 
+0

मैं वास्तव में कुछ लोगों का अनुगामी स्लैश डाल दिया, क्योंकि एक और पोस्ट के बाद से यह एक उपनिर्देशिका के लिए एक proxy_pass है कि कोशिश कर सुझाव दिया। हालांकि मैं एक अजीब व्यवहार देखा: यदि मैं पोर्ट 8080 के '/' के लिए एक प्रॉक्सी पास सेट और करने के लिए bot1 लिपि में baseurl सेट 'bots.mydomain.com/bot1', यह काम करता है। लेकिन मुझे स्पष्ट रूप से अभी भी काम करने के लिए अन्य बॉट नहीं मिल सकते हैं क्योंकि मैं रूट ('/') का उपयोग कर रहा हूं। – NullDev

+0

@ नूलडेव, दूसरी टिप्पणी ने एक अलग संदर्भ में स्लेश जोड़ने का सुझाव दिया (और केवल एक यादृच्छिक सुझाव था); कृपया मैंने जो कहा है, उसे आज़माएं, मुझे पूरा यकीन है कि इसमें काम करने का बहुत अधिक मौका होगा (यानी, अगर किक इसे पहले स्थान पर करने में सक्षम है), क्योंकि आपका मूल कोड 100% काम नहीं करेगा। – cnst

+0

मैंने आपके द्वारा सुझाए गए प्रयासों की कोशिश की है लेकिन यह काम नहीं किया है। इसके अलावा, मैं यहां टिप्पणी के बारे में बात नहीं कर रहा था। किसी अन्य प्रश्न पर एक उत्तर ने सुझाव दिया (मुझे अभी यह नहीं मिल रहा है)। – NullDev

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