web-dev-qa-db-ja.com

HAPI JS Node js作成httpsサーバー

hapihttpサーバーとhttpsサーバーを作成し、同じルーティングで80と443の両方をリッスンするにはどうすればよいですか?

(まったく同じAPIを使用してhttpとhttpsの両方で実行する必要があるサーバーが必要です)

13
Sathish

@codelionは良い答えを出しましたが、それでも複数のポートでリッスンしたい場合は、接続用に複数の構成を渡すことができます。

var server = new Hapi.Server();
server.connection({ port: 80, /*other opts here */});
server.connection({ port: 8080, /*other opts, incl. ssh */  });

ただし、繰り返しになりますが、http接続の減価償却を開始することをお勧めします。グーグルや他の人たちはすぐに彼らを安全でないものとしてマークし始めるでしょう。また、ノードアプリ自体ではなく、実際にnginxなどでSSLを処理することをお勧めします。

3
Zlatko

アプリケーションで直接httpsリクエストを処理することは通常ではないかもしれませんが、Hapi.jsは同じAPI内でhttpとhttpsの両方を処理できます。

var Hapi = require('hapi');
var server = new Hapi.Server();

var fs = require('fs');

var tls = {
  key: fs.readFileSync('/etc/letsencrypt/live/example.com/privkey.pem'),
  cert: fs.readFileSync('/etc/letsencrypt/live/example.com/cert.pem')
};

server.connection({address: '0.0.0.0', port: 443, tls: tls });
server.connection({address: '0.0.0.0', port: 80 });

server.route({
    method: 'GET',
    path: '/',
    handler: function (request, reply) {
        reply('Hello, world!');
    }
});

server.start(function () {
    console.log('Server running');
});
22
Fernando

代わりに、すべてのhttpリクエストをhttpsにリダイレクトできます。

if (request.headers['x-forwarded-proto'] === 'http') {
  return reply()
    .redirect('https://' + request.headers.Host + request.url.path)
    .code(301);
}

詳細については、 https://github.com/bendrucker/hapi-require-https を確認してください。

7
codelion

リンクにアクセス: http://cronj.com/blog/hapi-mongoose

これが サンプルプロジェクト これであなたを助けることができます。

8.xより前のhapiバージョンの場合

var server = Hapi.createServer(Host, port, {
    cors: true
});

server.start(function() {
    console.log('Server started ', server.info.uri);
});

Hapiの新しいバージョンの場合

var Hapi = require('hapi');

var server = new Hapi.Server();
server.connection({ port: app.config.server.port });
1
user4594602

local-ssl-proxy npm package を使用して、ローカルHTTPSをHTTPにプロキシすることもできます。ローカル開発のみ。

0
saille

私はこのようなものを探していて、見つけました https://github.com/DylanPiercey/auto-sni Express、Koa、Hapi(未テスト)での使用例があります

これは基本的に、letsencrypt証明書に基づいており、カスタムリスナーを使用してhapiサーバーをロードします。

まだ試していません。

0
Vadorequest

選択した回答への返信:これは機能しなくなり、バージョン17で削除されます:

https://github.com/hapijs/hapi/issues/3572

あなたが得る:

_TypeError: server.connection is not a function
_

回避策は、プロキシを使用するか、Hapi.Server()の2つのインスタンスを作成することです。

0
mandelf