Node.js serveur https: impossible d'écouter sur le port 443 - Pourquoi?

Je suis de la création d'un serveur HTTPS pour la première fois dans le Nœud, et le code (voir ci-dessous) fonctionne pour un port aléatoire comme 6643 mais sur le port 443, ça ne marchera pas. J'obtiens cette erreur:

[Debug][Server]: Initialized...
[Debug][Control Center]: Application initialized...

events.js:72
        throw er; //Unhandled 'error' event
              ^
Error: listen EACCES
    at errnoException (net.js:904:11)
    at Server._listen2 (net.js:1023:19)
    at listen (net.js:1064:10)
    at Server.listen (net.js:1138:5)
    at Object.module.exports.router (/home/ec2-user/Officeball/Versions/officeball_v0.0.5/server/custom_modules/server.js:52:5)
    at Object.<anonymous> (/home/ec2-user/Officeball/Versions/officeball_v0.0.5/server/control_center.js:15:59)
    at Module._compile (module.js:456:26)
    at Object.Module._extensions..js (module.js:474:10)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:312:12)

C'est sur un Linux Amazon EC2 serveur. C'est ma compréhension que une fois que j'ai mis mon DNS du domaine UN Nom de Dossier à l'adresse IP du serveur, quand un utilisateur recherche https://mydomain.com, le navigateur va chercher mon IP du serveur sur le port 443, qui est censé être le port standard pour le trafic HTTPS.

Si ma compréhension est que j'ai besoin pour servir le contenu https via le port 443.

Ce que je fais mal?


Voici mon code serveur:

control_center.js (init)

/* Control Center */

//DEFINE GLOBALS

preloaded = {};

//GET DIRECT WORKING PATH

var dirPath = process.cwd();

//REQUIRE CUSTOM MODULES 

var debug = new (require(dirPath + 
        "/custom_modules/debug"))("Control Center");
var socket = require(dirPath + 
        "/custom_modules/socket")(4546);

//! this is the relevant line
var server = require(dirPath + "/custom_modules/server").router(443);

//APP INITIALIZE

debug.log("Application initialized...");

server.js

/* Server */

//REQUIRE NPM MODULES

var fs      = require('fs'), 
    https   = require('https'), 
    url     = require('url'), 
    path    = require('path');

//GET DIRECT WORKING PATH

var dirPath = process.cwd();

//REQUIRE CUSTOM MODULES

//Snip!

var debug = new (require(dirPath + 
        "/custom_modules/debug"))("Server");

//Preload requests

var preload = require(dirPath + 
        '/custom_modules/preload').init();

//INIT MODULE 

debug.log("Initialized...");

//DEFINE MODULE VARIABLES

var options = {
  key: fs.readFileSync('SSL/evisiion_private_key.pem'),
  cert: fs.readFileSync('SSL/evisiion_ssl_cert.pem')
};

//LISTEN FOR PATH REQUESTS

//route requests to server
module.exports.router = function(port) {
    https.createServer(options, function(req, res) {

        //Snip!

    }).listen(port);
};
  • Probablement pas le code, prendre un coup d'oeil here.
  • quand il est si simple que ça fait mal...
  • seule raison pour laquelle je savais, c'est parce que j'ai répondu à la même question avant 🙂 pourraient également avoir à faire avec les privilèges de l'utilisateur root si cette réponse n'ont pas le fixer
  • Voir here pour un iptable solution de contournement qui permet de ports inférieurs à 1024 à fonctionner quand pas en cours d'exécution de la racine. Voir aussi here pour un doublon question avec des réponses.
InformationsquelleAutor | 2014-10-26