LocomotiveJSのようなMVCフレームワークがNodeJS/Expressで利用できるようになったので、アプリの一部にSSLを実装する方法を考えていますか?
たとえば、eコマースアプリ。
SSLを強制するには、すべての/checkoutコントローラーが必要です。
私はこのようなチュートリアルを読みましたが、Expressは効果的に「ラップ」されているため、Locomotiveでこれを実装する方法がわかりません。
LocomotiveJSのようなMVCフレームワークがNodeJS/Expressで利用できるようになったので、アプリの一部にSSLを実装する方法を考えていますか?
たとえば、eコマースアプリ。
SSLを強制するには、すべての/checkoutコントローラーが必要です。
私はこのようなチュートリアルを読みましたが、Expressは効果的に「ラップ」されているため、Locomotiveでこれを実装する方法がわかりません。
現在、SSLはLocomotiveによって直接サポートされていませんが、Locomotiveの作成者であるJared Hansonが4月に投稿したこのGoogleグループによると、間もなくサポートされる予定です。
現在、私は常にLocomotiveをSSLを終了するプロキシの背後に置いています。ただし、直接サポートするために、このためのコマンドラインオプションをまもなく追加します。
とはいえ、プロキシを使用せずに完全にノードベースのソリューションが必要な場合は、当面の間、LocomotiveでExpressインスタンスを編集する必要があります。私は以下をテストしました、そしてそれはうまく働いています。
執筆時点では、npm install locomotive
Express 2.xを使用していますが、最新のgithubはExpress3.xを使用するように更新されています。
/locomotive/lib/locomotive/index.js
Express 2.xでLocomotiveを使用している場合は、180行目あたりを次のように編集する必要があると思います。
var sslOptions = {
cert : fs.readFileSync('/path/to/your/ssl-cert/dev.crt')
, key : fs.readFileSync('/path/to/your/ssl-key/dev.key')
};
var self = this
, server = express.createServer(sslOptions)
, entry;
さらに、HTTPでリッスンし、すべてのトラフィックをHTTPSにリダイレクトすることもできます。すべてノードベースのソリューションに固執すると、最後に別のExpressサーバーを起動するだけで、/locomotive/lib/locomotive/cli/server.js
すべてのトラフィックをHTTPSにリダイレクトできます。
...
debug('booting app at %s in %s environment', dir, env);
locomotive.boot(dir, env, function(err, server) {
if (err) { throw err; }
server.listen(port, address, function() {
var addr = this.address();
debug('listening on %s:%d', addr.address, addr.port);
});
// add an http server and redirect all request to https
var httpServer = require('express').createServer();
httpServer.all('*', function(req, res) {
res.redirect('https://' + address + ':' + port + req.url);
});
httpServer.listen(80); // probably change based on NODE_ENV
});
}
最後に、サーバーを起動します。
$ lcm server -p 443 # again, probably use different port in development
これらのフレームワークはすべて、HTTPSをサポートする接続に基づくExpressに基づいています。
とにかく、実際の状況では、とにかくhttpsを処理するnginx/または他のプロキシが必要になる場合があります。