पर एकाधिक नोडजे सर्वर चला नहीं सकता है। मैं अपने वेबसर्वर पर एक सबडोमेन से विभिन्न वेबहुक के साथ (आधिकारिक) किक चॅटबॉट के लिए एकाधिक नोडजे सर्वर चलाने की कोशिश कर रहा हूं।एक सबडोमेन
हालांकि, मैं ऐसा करने में सक्षम नहीं हूं। एक बॉट के लिए यह ठीक काम करता है।
'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; }
और bots.mydomain.com/bot1
को bot1 लिपि में baseurl निर्धारित करते हैं, बॉट -1 काम करता है।
लेकिन मुझे स्पष्ट रूप से अभी भी काम करने के लिए अन्य बॉट नहीं मिल सकते हैं क्योंकि मैं रूट (/) का उपयोग कर रहा हूं।
क्या इसका मतलब है कि यह किक-एपीआई के सुनने का तरीका है?
संपादित 2:
मैं Nginx लॉग अब जाँच की और ऐसा लगता है किक आवरण एक निर्देशिका जो मौजूद नहीं है पर सुनने की कोशिश करता है की तरह। मैं निम्नलिखित किया: बंदरगाह 8080
& संदेश उस पर बॉट शुरू करो।
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"
लेकिन मैं अभी भी इसे ठीक करने का पता नहीं है: यह लॉग उत्पादन होता है। एक परीक्षण के रूप में मैंने निर्देशिका incoming
public_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"
क्या किसी को इसे ठीक करने के बारे में कोई विचार है?
कैसे उपयोग करने के बारे 'स्थान/bot1 /' के साथ एक अनुगामी '/' (सिर्फ एक प्रयोग के रूप) –
आप अपने nginx लोग इन साझा कर सकता है? –
@NullDev आप इसे बदलने की कोशिश कर सकते हैं: 'baseUrl:" https://bots.mydomain.com "' प्रत्येक बॉट पर: 'baseUrl:" https://bots.mydomain.com/bot1 "' 'baseurl:" https://bots.mydomain.com/bot2 "' और nginx लॉग पोस्ट। –