2016-09-14 26 views
1

ノードアプリケーションをHTTPとHTTPSで実行したいとします。実装したStackOverflowにいくつかのコードが見つかりましたが、https:// URLにアクセスする際にタイムアウトになります。 HTTP経由の通常の方法は正常に動作しています。 https://サイトにアクセスするときに、サーバーコンソールにエラーは表示されません。訪問を試みるとコンソールで何も表示されませんでしたhttps://NodeJS https timeout

サーバーはAmazonプラットフォームで動作しています。

編集:私は、私は「生産」に

sudo NODE_ENV=production forever start app.js 

NODE_ENV variabeleを設定し、サーバーを起動すると、誰もが私がここで間違ってやっているかを見ることができますか?

var env = process.env.NODE_ENV || 'development'; 
require('./config/config').set(env);//set configuration 
console.log(env); 
var config = require('./config/config').config; 
var express = require('express'); 

var debug = require('debug')('juweliergids:server'); 
var http = require('http'); 

require('./config/mongoose'); 
/** 
* Get port from environment and store in Express. 
*/ 

var port = normalizePort(config.port); 
var app = express(); 
var compact = require('./config/compact')(app, config); 

require('./config/express')(app, config, compact); 
require('./config/routes')(app, config, compact); 
app.set('port', config.port); 




/** 
* Create HTTP and HTTPS server. 
*/ 
var httpServer = http.createServer(app); 
httpServer.listen(port); 
httpServer.on('error', onError); 
httpServer.on('listening', onHttpListening); 

if(env === 'production'){ 
    var https = require('https'); 
    var fs = require('fs'); 

    var privateKey = fs.readFileSync('/etc/letsencrypt/live/domain.com/privkey.pem'); 
    var certifcate = fs.readFileSync('/etc/letsencrypt/live/domain.com/fullchain.pem'); 

    var credentials = { 
     key: privateKey, 
     cert: certifcate, 
     rejectUnauthorized:false 
    } 

    var httpsServer = https.createServer(credentials, app); 
    httpsServer.listen(443); 
    httpsServer.on('error', onError); 
    httpsServer.on('listening', onHttpsListening); 
} 

/** 
* Normalize a port into a number, string, or false. 
*/ 

function normalizePort(val) { 
    var port = parseInt(val, 10); 

    if (isNaN(port)) { 
    // named pipe 
    return val; 
    } 

    if (port >= 0) { 
    // port number 
    return port; 
    } 

    return false; 
} 

/** 
* Event listener for HTTP server "error" event. 
*/ 

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; 
    } 
} 

/** 
* Event listener for HTTP server "listening" event. 
*/ 

function onHttpListening() { 
    var addr = httpServer.address(); 
    var bind = typeof addr === 'string' 
    ? 'pipe ' + addr 
    : 'port ' + addr.port; 
    console.log('HTTP server is listening on ' + bind); 
    debug('HTTP server is listening on ' + bind); 
} 

function onHttpsListening() { 
    var addr = httpsServer.address(); 
    var bind = typeof addr === 'string' 
    ? 'pipe ' + addr 
    : 'port ' + addr.port; 
    console.log('HTTPS server is listening on ' + bind); 
    debug('HTTPS server is listening on ' + bind); 
} 
+0

あなたはそれがファイアウォールの問題ではありません主張しているポートへの着信接続を許可する場合

だから、ファイアウォールを確認しますか?ポート443への着信接続は許可されていますか? – robertklep

+0

それは解決策でした!あなたは答えとしてこれを置くことができますか? – NVO

答えて

1

タイムアウトは、あなたが何も接続が設定されていることを示すだろう、あなたのログファイルに表示されていない場合は特に、ファイアウォールの問題を示す傾向にあります。それは443

+0

ありがとうございます。できるだけ早くあなたにポイントを送ってくれます。 – NVO