■はじめに
以下のリンク先のサイトで、express-generatorを使用してプロジェクトを作成しておいてください。
■手順
express-generatorで生成されたプロジェクトの「bin」配下の「www」を以下に書き換えます。
#!/usr/bin/env node serverStart(); sslServerStart(); /** * 通常(HTTP)のサーバー起動 */ function serverStart() { var app = require('../app'); var http = require('http'); var port = normalizePort(process.env.PORT || '3000'); app.set('port', port); var server = http.createServer(app); server.listen(port); server.on('error', onError); console.log("ポート「" + port + "」でHTTPサーバーを起動しました"); } /** * SSL(HTTPS)のサーバー起動 */ function sslServerStart() { var app = require('../app'); var https = require('https'); var fs = require('fs'); var options = { key: fs.readFileSync("[秘密鍵]"), cert: fs.readFileSync("[証明書]") }; var port = normalizePort(process.env.SSL_PORT || '4000'); app.set('port', port); var serverS = https.createServer(options, app); serverS.listen(port); serverS.on('error', onError); console.log("ポート「" + port + "」でHTTPSサーバーを起動しました"); } /** * ポートのバリデーションチェックして正しいポートを設定する * @param val */ function normalizePort(val) { var port = parseInt(val, 10); if (isNaN(port)) { return val; } if (port >= 0) { return port; } return false; } /** * エラー発生時のハンドリング * @param error */ function onError(error) { if (error.syscall !== 'listen') { throw error; } var bind = typeof port === 'string' ? 'Pipe ' + port : 'Port ' + port; // handle specific listen errors with friendly messages switch (error.code) { case 'EACCES': console.error(bind + ' requires elevated privileges'); process.exit(1); break; case 'EADDRINUSE': console.error(bind + ' is already in use'); process.exit(1); break; default: throw error; } }
「[秘密鍵]」と「[証明書]」の部分は各環境に書き換えてください。
ちなみに、以下で取得した証明書の場合は以下のように記載できます。
var options = { key: fs.readFileSync("/etc/letsencrypt/live/hogehoge.com/privkey.pem"), cert: fs.readFileSync("/etc/letsencrypt/live/hogehoge.com/cert.pem") };
「hogehoge.com」の部分は自分のドメインに書き換えてください。
■HTTPSのポートを指定する方法
package.jsonの「scripts」を以下のように記載することで、HTTPとHTTPSのそれぞれのポートを指定できます。
"scripts": { "start": "PORT=1234 SSL_PORT=5678 node ./bin/www" },