簡體   English   中英

NodeJs HTTPS 連接與快速生成器

[英]NodeJs HTTPS connection with express generator

我已經使用 express 生成器創建了一個應用程序,一切正常,但我現在想使用 HTTPS 運行該應用程序,我嘗試將/bin/www的節點服務器文件配置為以下內容:

#!/usr/bin/env node

/**
 * Module dependencies.
 */

var debug = require('debug')('****:server');
var https = require('https');
var fs = require('fs');

/**
 * Get port from environment and store in Express.
 */

var port = normalizePort(process.env.PORT || '3001');
app.set('port', port);


var options = {
    path: '../app',
    port: 443,
    key: fs.readFileSync('/var/www/vhosts/keys/wildcard.****.com.key'),
    cert: fs.readFileSync('/var/www/vhosts/keys/wildcard.****.com.crt')
}


/**
 * Create HTTPS server.
 */

var server = https.createServer(options);

但是當我將它指向 https:// 時,我無法再訪問我的應用程序

試試這個:

 var express = require('express'); var https = require('https'); var http = require('http'); var fs = require('fs'); // This line is from the Node.js HTTPS documentation. var options = { key: fs.readFileSync('test/fixtures/keys/agent2-key.pem'), cert: fs.readFileSync('test/fixtures/keys/agent2-cert.cert') }; // Create a service (the app object is just a callback). var app = express(); // Create an HTTP service. http.createServer(app).listen(80); // Create an HTTPS service identical to the HTTP service. https.createServer(options, app).listen(443);

並創建一個自簽名證書。 怎么樣? 按照此鏈接http://docs.nodejitsu.com/articles/HTTP/servers/how-to-create-a-HTTPS-server

我在使用 express-generator 創建后修改 bin/www 文件並將其重命名為 wwws 解決了這個問題。 然后在 package.json 中,我更改指向新腳本的“源”屬性。

...
"scripts": {
    "start": "node ./bin/wwws"
  },
...

在 wwws 中,我使用 https 服務器而不是 http,然后重定向 http 請求。 這是我的新 wwws 文件。 我刪除了 www 文件中間的 http 行,並在最后添加了新的服務器部分。

#!/usr/bin/env node

/**
 * Module dependencies.
 */

var app = require('../app');
var debug = require('debug')('phishsense:server');
var http = require('http');

/**
 * 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 onListening() {
  var addr = server.address();
  var bind = typeof addr === 'string'
    ? 'pipe ' + addr
    : 'port ' + addr.port;
  debug('Listening on ' + bind);
}


// Add HTTPS Section
var fs = require('fs');
var https = require('https');
var http_port = normalizePort(process.env.PORT || '8080');
var https_port    =   process.env.PORT_HTTPS || 8443; 
var options = {
 key  : fs.readFileSync('server.key'),
 cert : fs.readFileSync('server.crt')
};

app.set("port",https_port);

/*
° Create HTTPS server.
*/ 
server = https.createServer(options, app).listen(https_port, function () {
 console.log('Magic happens on port ' + https_port); 
});

/**
* Listen on provided port, on all network interfaces.
*/

server.listen(https_port);
server.on('error', onError);
server.on('listening', onListening);

// Redirect from http port to https
http.createServer(function (req, res) {
  res.writeHead(301, { "Location": "https://" + req.headers['host'].replace(http_port,https_port) + req.url });
  console.log("http requet, will go to >> ");
  console.log("https://" + req.headers['host'].replace(http_port,https_port) + req.url );
  res.end();
}).listen(http_port);

這對我有用,讓 express-generator 創建的結構保持不變。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM