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.
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...
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
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