hapihttp
サーバーとhttps
サーバーを作成し、同じルーティングで80と443の両方をリッスンするにはどうすればよいですか?
(まったく同じAPIを使用してhttpとhttpsの両方で実行する必要があるサーバーが必要です)
@codelionは良い答えを出しましたが、それでも複数のポートでリッスンしたい場合は、接続用に複数の構成を渡すことができます。
var server = new Hapi.Server();
server.connection({ port: 80, /*other opts here */});
server.connection({ port: 8080, /*other opts, incl. ssh */ });
ただし、繰り返しになりますが、http接続の減価償却を開始することをお勧めします。グーグルや他の人たちはすぐに彼らを安全でないものとしてマークし始めるでしょう。また、ノードアプリ自体ではなく、実際にnginxなどでSSLを処理することをお勧めします。
アプリケーションで直接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');
});
代わりに、すべての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 を確認してください。
リンクにアクセス: 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 });
local-ssl-proxy npm package を使用して、ローカルHTTPSをHTTPにプロキシすることもできます。ローカル開発のみ。
私はこのようなものを探していて、見つけました https://github.com/DylanPiercey/auto-sni Express、Koa、Hapi(未テスト)での使用例があります
これは基本的に、letsencrypt証明書に基づいており、カスタムリスナーを使用してhapiサーバーをロードします。
まだ試していません。
選択した回答への返信:これは機能しなくなり、バージョン17で削除されます:
https://github.com/hapijs/hapi/issues/3572
あなたが得る:
_TypeError: server.connection is not a function
_
回避策は、プロキシを使用するか、Hapi.Server()
の2つのインスタンスを作成することです。