2017-10-21 108 views
0

Nous utilisons une combinaison de Apache Server et NodeJs (Express) pour un site Web. Sans SSL, l'Apache écoutait le port 80 et les Nodejs le port 8080.NodeJs Express: Listeining à partir de HTTPS dans Amazon EC2 Ubuntu

Maintenant, j'installe SSL sur le site Web. L'Apache est configuré pour écouter le port 443. J'ai essayé de faire en sorte que les Nodej écoutent le port 8443, 3333, etc. - en définissant le groupe de sécurité AWS comme "TCP personnalisé" pour le port. Le problème est que je ne reçois aucune réponse du serveur de Nodejs. Mon impression est que le problème est avec le paramètre de groupe de sécurité EC2 mais ne peut pas vraiment mettre le doigt sur le problème exact.

Le serveur est créé pour NodeJS comme suit:

var https = require('https'); 
var fs = require('fs'); 
... 
... 
var https_options = { 
     ca: fs.readFileSync ("/path/to/cabundle.ca-bundle", "utf8"), 
     key: fs.readFileSync("/path/to/sslkey.key", "utf8"), 
     cert: fs.readFileSync("/path/to/certificate.crt", "utf8") 
}; 


var app = express(); 
var server = https.createServer(https_options, app); 
.... 
.... 
server.listen(8443 or 3333); 

Démarrage du serveur ne provoque aucune erreur. Navigateur, d'où j'appelle le serveur Nodejs, ne montre aucune erreur.

Toute idée est appréciée.

Après Arif a souligné que cela peut être résolu par les paramètres Apache, j'ajoute les seetings Virtualhost à

/etc/apache2/sites-enabled/000-default.conf

<VirtualHost *:80> 
     ServerAdmin [email protected] 
     ServerName www.example.com 

     Redirect permanent/https://www.example.com 

     ErrorLog ${APACHE_LOG_DIR}/error.log 
     CustomLog ${APACHE_LOG_DIR}/access.log combined 

</VirtualHost> 

<VirtualHost *:443> 
     ServerAdmin [email protected] 
     DocumentRoot /var/www/html/mysite 
     Servername www.example.com 

     SSLEngine on 
     SSLCertificateKeyFile /path/to/sslkey.key 
     SSLCertificateFile /path/to/certificate.crt 
     SSLCertificateChainFile /path/to/cabundle.ca-bundle 


     <Directory /var/www/html/mysite> 
       AllowOverride All 
       Options FollowSymlinks 
     </Directory> 
</Virtualhost> 

Les demandes côté client sont envoyés à https://www.example.com:8443

+0

Vous devez utiliser 'https' pour faire une requête' https: //www.example.com: 8443'. Si vous demandez 'https: //www.example.com: 8443' alors il n'y a pas de rôle d'apache. –

+0

Pouvez-vous faire une requête au serveur nodejs dans EC2 ('curl -Ik https: //127.0.0.1: 8443')? Avez-vous ajouté des règles dans 'iptables' avant? – ronald8192

+0

@ArifKhan Désolé, mon mauvais. C'est https: // ... – Sam11

Répondre

0

tout d'abord, vous devez activer ssl et inverser le module apache proxy en suivant comm et

sudo a2enmod ssl 
sudo a2enmod proxy 
sudo a2enmod proxy_http 
sudo a2enmod proxy_balancer 
sudo a2enmod lbmethod_byrequests 

puis mettre à jour config apache ssl (/etc/apache2/sites-available/default-ssl.conf) fichier ci-dessous

<IfModule mod_ssl.c> 
    <VirtualHost _default_:443> 
     ServerAdmin [email protected] 
     ServerName your_domain.com 
     ServerAlias www.your_domain.com 
     ErrorLog ${APACHE_LOG_DIR}/error.log 
     CustomLog ${APACHE_LOG_DIR}/access.log combined 
     SSLEngine on 
     SSLCertificateFile /path/to/certificate.crt 
     SSLCertificateKeyFile /path/to/sslkey.key 
     ProxyRequests Off 
     ProxyPreserveHost On 
     ProxyVia Full 
     <Proxy *> 
      Require all granted 
     </Proxy> 
     <Location /> 
      ProxyPass http://localhost:8443 
      ProxyPassReverse http://localhost:8443 
     </Location> 
    </VirtualHost> 
</IfModule> 

ajouter maintenant fichier ssl et redémarrez apache

sudo a2ensite default-ssl.conf 
sudo service apache2 restart 

Maintenant, il devrait fonctionner correctement https://your_domain.com

Remarque: Vous devez ouvrir http et Port https à partir de la console AWS dans le groupe de sécurité

+0

Merci pour votre réponse Arif. J'ai essayé cela mais cela ne semble pas résoudre le problème. Je suis en train d'éditer ma question pour ajouter les paramètres Virtualhost. – Sam11

0

Désolé pour une réponse différée. Le problème était les paramètres CSP qui n'autorisaient pas le trafic HTTPS et WSS.

De plus, nous avions besoin d'ajouter

({secure: true}) 

tout en créant du côté client sockets à l'aide socket.io. Maintenant ça fonctionne bien. Merci à tous pour les intrants.