Bonjour,

J'ai récemment acheté un VPS 2 chez OVH pour 6mois (Debian 8), j'ai installé apache2, php5, etc... J'ai réglé mes noms de domaines et les sites fonctionnent bien. J'ai aussi géré le https avec Let's Encrypt (je préfère le préciser).

J'ai donc voulu coder un site en back-end avec NodeJs, je l'ai donc installé, ainsi que npm :

sudo apt-get install nodejs npm

Je me suis rendu compte que cela ne lisait pas mes fichier .js, cela les affichait juste. Alors j'ai suivi ce tutoriel :
http://blog.nicolasc.eu/node-js-derriere-un-proxy-apache/

J'ai donc maintenant mon "screeny.in.conf" dans "sites-available" qui contient cela :

<VirtualHost *:80> 
        ServerAdmin contact@bryanparasote.fr 
        DocumentRoot /var/www/screeny.in 
        ServerName screeny.in
        ServerAlias www.screeny.in

        ProxyRequests off
        <Proxy *>
                Order deny,allow
                Allow from all
        </Proxy>
        <Location />
                ProxyPass https://screeny.in:8080/
                ProxyPassReverse https://screeny.in:8080/
        </Location>

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

        RewriteEngine on
        RewriteCond %{SERVER_NAME} =screeny.in [OR]
        RewriteCond %{SERVER_NAME} =www.screeny.in
        RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,QSA,R=permanent]
</VirtualHost>

Et j'ai mon fichier server.js sur /var/www/screeny.in, qui contient :

var http = require('http');
http.createServer(function (req, res) {
   res.writeHead(200, {'Content-Type': 'text/plain'});
   res.end('It works !\n');
}).listen(8080, '127.0.0.1');

Donc quand je fais "node /var/www/screeny.in/server.js" le node sur la console marche, mais sur le site j'ai simplement l’indexion du fichier, https://screeny.in/

Si quelqu'un peut m'aider :/ ...

Au revoir.

7 réponses


Bryanoxx
Auteur
Réponse acceptée

C'EST BON

C'est résolu, puisque c'est en HTTPS, apache ne passait pas pas mon screeny.in.conf, mais par le fichier que Let's Encrypt avait créé :

J'ai donc modifer l'intérieur de "screeny.in-le-ssl.conf", et maintenant voici le contenu du fichier :

<IfModule mod_ssl.c>
<VirtualHost *:443>
     ServerAdmin contact@bryanparasote.fr
    ServerName screeny.in
    ServerAlias www.screeny.in

    DocumentRoot /var/www/screeny.in
    Options -Indexes

    ErrorDocument 503 /maintenance.html

    ProxyRequests on
    ProxyPass /maintenance.html !
    ProxyPass / http://127.0.0.1:8080/

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

    SSLCertificateFile /etc/letsencrypt/live/www.bryanparasote.fr/fullchain.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/www.bryanparasote.fr/privkey.pem
    Include /etc/letsencrypt/options-ssl-apache.conf
</VirtualHost>
</IfModule>

J'ai fait plus simple et sécurisé que ce que j'avais mis avant en ayant vu ce site :
http://blog.podrezo.com/making-node-js-work-with-apache/

Donc maintenant si le server.js est en marche alors c'est NodeJs qui taffe, sinon ça part sur /maintenance.html
Merci pour vos réponses, en espérant que ça pourra aider certains ;-)

Pour nodejs, il faut lancer le serveur en exécutant la commande

node server.js

Pour la prod, il vaut mieux que tu écoutes sur le port 80.
EDIT
J'ai zappé la fin de ton message indiquant que tu as lancé la commande node server.js. Mais, comme je t'ai dit il faut écouter sur le port 80.
EDIT 2
Regarde ce lien, ça peut t'aider.

En général, on laisse Apache s'occuper du https en amont de nodes
on dirait que tu fais l'inverse
Commence par faire fonctionner le tout en http, aprés tu verras pour le https
pour le proxypass, je mettrais http://127.0.0.1:8080

Il est possible depuis Apache 2.4 de passer un ProxyPass comme dans Nginx. C'est-à-dire :

1) définir un VirtualHost sur port 80

2) préciser le nom de domaine et ses alias

3) signifier que toute requête est renvoyée vers le serveur NodeJS - seul "responsable" de l'exécution des scripts JS. De façon sécurisée, il vaut mieux pointer sur la boucle locale du serveur (127.0.0.1 ou localhost) et définir son port, par exemple. Le serveur Node sera préalablement lancé en localhost sur un port précis compris entre 2000 et 65000.

Bien sûr, il faut aussi lancer sous Debian :

sudo a2enmod proxy_http

et relancer apache...

Bryanoxx
Auteur

sizo0
Le lien que tu m'as donné je ne peux pas m'en aider, car je n'ai pas Cpanel, et je n'ai qu'une seule adresse IP pour mon VPS.
Sinon pour le port 80 j'ai bien changé, et maintenant quand je "node /var/www/screeny.in/server.js", cela me donne cette erreur :

Et j'ai vu qu'elle venait du fait que le port choisi était déjà utilisé.

Huggy
D'accord je vais essayé après sans le https, juste http, je le fait pas là car faut que je vois comment le désactiver avec Let's Encrypt.

mzkd
Oui j'avais déjà proxy_http d'activé, mais du coup c'est bien la technique que tu dis que j'essais de faire, mais le 3) ne marche pas avec ce que j'ai fait, et je cherche à savoir comment cela pourrait marcher.

Merci des réponses

Certes le port 80 doit être utilisé par apache. Pk tu utilises apache au fait ?

Bryanoxx
Auteur

Car j'ai besoin de PHP aussi, sur d'autres sites que j'ai, et donc j'aimerais mettre aussi un serveur http nodejs en même temps pour mon site screeny.in