■はじめに
以下のリンク先のサイトで、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"
},