Hapiで開発されたAPIサーバーは、長時間実行される非同期ジョブを処理する別のサーバー(Hapiとも書かれています)に特定のエンドポイントでPOSTリクエストを送ります。
の要求:元の要求のすべてのHTTPヘッダを保存http://my-services-staging.northeurope.cloudapp.azure.com/api/v1/importer/items
:
http://my-api-staging.northeurope.cloudapp.azure.com/api/v1/importer/items
はにプロキシされています。nginxでHapi h2o2を使用しています( 'worker_connections not enough'エラー)
プロキシされた要求を受け取るサーバーもHapiで書かれ、長時間実行されているジョブを処理するために使用されます。
APIサーバー上で、Hapi h2o2プラグインが要求プロキシを処理します。プロキシルートのコードは次のようになります。
{
method: 'POST',
path: '/importer/items',
config: {
payload: {
parse: false
},
handler: {
proxy: {
passThrough: true,
xforward: true,
host: SERVICES_HOST,
port: SERVICES_PORT,
protocol: SERVICES_PROTOCOL,
onResponse: function(err, res, request, reply, settings, ttl) {
var response = (err) ? err : res;
return reply(response);
}
}
}
}
}
私は(APIサーバーと異なるポート上のジョブサーバを結合)localhost
上の両方のサーバーを実行すると、すべてが正常に動作します。
私は両方のサーバーを別のMicrosoft Azure VMにセットアップしました。ポート3000でnginxをフロントエンドとしてリバースプロキシとしてバインドしました。
私のnginxの設定ファイル(、両方のサーバで同じだけserver_name
変更)次のようになります。
server {
listen 80;
server_name my-api-staging.northeurope.cloudapp.azure.com;
index index.php index.html index.htm;
location/{
proxy_pass http://127.0.0.1:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}
を要求が異なるリモートマシン上の要求をプロキシ関与しない他のルートでnginxのによって正しく処理されています。私はポストマンまたはリモートプロキシを必要とするいくつかのエンドポイント上のVM上のカールでリクエストを送信するとき
問題が起動します。
curl -XPOST -H 'Bearer: foobar'
-H 'Authorization: token somerandomstring'
-H "Content-type: application/json"
'http://127.0.0.1:3000/api/v1/importer/items'
nginxのは、500内部サーバーエラーを送り返す、いくつかの秒間ハングします。
尾行/var/log/nginx/error.log
:
worker_connections are not enough while connecting to upstream,
client: 127.0.0.1,
server: my-api-staging.northeurope.cloudapp.azure.com,
request: "POST /api/v1/importer/items HTTP/1.1",
upstream: "http://127.0.0.1:3000/api/v1/importer/items",
host: "my-api-staging.northeurope.cloudapp.azure.com"
400不正な要求を得、問題を解決していませんworker_connections 20000;
設定します。 尾行/var/log/nginx/error.log
:
accept4() failed (24: Too many open files)
私はループが起こっているとnginxのが正しく、私が供給している構成で複数のリダイレクトを処理することはできませんのいくつかの種類があると思います。
私は、要求フローのこの種を処理できるようにしたい:
(Request) -> nginx:80 -> API server:3000 -> nginx:80 -> Jobs server:3000
h2o2
それは可能ですか?