私のWebサーバー上の1つのサブドメインから異なるWebhookを持つ(公式な)Kik Chatbotsに対して複数のNodeJsサーバーを実行しようとしています。1つのサブドメインで複数のNodeJsサーバーを実行できません
しかし、私はそれを行うことができません。 1つのbotに対してはうまく動作します。これだけ1台の作業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
}
をこれまでのところは良いです。これは完璧に動作します!しかし、ここで来る問題:
私はpublic_html
フォルダにディレクトリを作ることによって、複数のNodeJsサーバを実行しようとすると、/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
}
と最後に8080
の代わりに8090
ポートでリッスンするように2番目のサーバーを設定し、もちろんベースURLをhttps://bots.mydomain.com/bot1
またはhttps://bots.mydomain.com/bot2
に設定すると、何も動作しなくなります。そして、それはwebhooksがNodeJsサーバーにデータを渡さないことを意味します。彼らはしかし、実行中です!ボットがオフラインのの場合はhttps://bots.mydomain.com
に移動すると、私は明らかにエラー502 Bad Gateway
を受け取りますが、ボットがのオンラインの場合です(サーバーが実際にリッスンしていることを意味します)。
Nginxは何か不足していますか、またはディレクトリの複数のwebhooksまたはproxy_passesを許可していませんか?
回避策は、各ボットのサブドメインを作成することです(これはうまくいくでしょう)。しかし、私はボットのサブドメインではなくサブディレクトリを使用したいと思います。
EDIT:
私は奇妙な行動に気づいた:私は次のように/
ためproxy_passを設定した場合:ポート8080にlocation/{ proxy_pass http://localhost:8080; }
とbots.mydomain.com/bot1
にBOT1スクリプトでBASEURLを設定し、 Bot-1が動作します。
しかし、私はまだルート(/)を使用しているので、私は明らかにまだ他のボットも動作させることができません。
これは、Kik-APIのリスニングの方法に問題があることを意味しますか?
EDIT 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"
しかし、私はまだこの問題を解決する方法がわかりません。テストとして私はディレクトリ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ログを投稿してください。 –