我正嘗試運行多個NodeJs服務器,用於從我的網絡服務器上的一個子域中訪問不同webhook的(官方)Kik Chatbots。無法在一個子域上運行多個NodeJs服務器
但是,我無法做到這一點。對於一個機器人它工作得很好。這是我的設置爲一個工作只的NodeJS服務器:
讓我們假設所有的網絡掛接位於https://bots.mydomain.com
app.js:
'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
。因此,我對網站https://bots.mydomain.com
nginx的配置是這樣的:
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
}
到目前爲止好。這工作非常好!但是這裏來了問題:
如果我嘗試運行多個的NodeJS服務器,通過在public_html
文件夾製作目錄,可以說/bot1
和/bot2
和適應我的nginx的配置這樣的:
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
}
和最後將第二臺服務器設置爲偵聽端口8090
而不是8080
,當然也可以將基本URL設置爲https://bots.mydomain.com/bot1
或https://bots.mydomain.com/bot2
,但沒有任何工作了。我的意思是,webhook不會將任何數據傳遞給NodeJs服務器。他們正在運行!我知道這一點,因爲如果我導航到(例如)https://bots.mydomain.com
,而機器人是離線,我顯然收到錯誤502 Bad Gateway
,但如果機器人是在線我得到一個超時(這意味着服務器確實在偵聽)。
我錯過了一些東西嗎?Nginx是不是允許多個webhooks或proxy_passes目錄?
解決方法是爲每個機器人創建一個子域,這將工作(我試過)。但我想使用子目錄而不是子域來進行漫遊。
編輯:
我注意到一個奇怪的現象:如果我設置一個proxy_pass爲/
,如:location/{ proxy_pass http://localhost:8080; }
8080端口,並在bot1腳本的BaseURL設置爲bots.mydomain.com/bot1
, Bot-1的作品。
但我顯然仍然無法讓其他機器人工作,因爲我使用根(/)。
這是否意味着這是Kik-API的聽法問題?
編輯2:
我現在檢查了Nginx的日誌,它似乎像Kik的包裝試圖聽上不存在的目錄。我做了以下操作:啓動機器人端口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"
但我仍然不知道如何解決這個問題。作爲測試,我在public_html
中創建了目錄incoming
。這在日誌中返回以下內容:
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"
有沒有人有關於如何解決它的想法?
如何使用'location/bot1 /'和末尾的'/'(只是作爲一個實驗) –
你可以分享你的nginx日誌嗎? –
@NullDev你可以嘗試改變: 'baseUrl:「https://bots.mydomain.com」' 在每個機器人上: 'baseUrl:「https://bots.mydomain.com/bot1」' 'baseUrl:「https://bots.mydomain.com/bot2」' 併發布nginx日誌。 –