J'essaie de configurer nginx pour qu'il proxy_pass
demandes à mes applications de noeud. La question sur StackOverflow a obtenu de nombreuses votes positifs: https://stackoverflow.com/questions/5009324/node-js-nginx-and-now et j'utilise config à partir de là.
(mais puisque la question concerne la configuration du serveur, elle est censée être sur ServerFault)
Voici la configuration nginx:
server {
listen 80;
listen [::]:80;
root /var/www/services.stefanow.net/public_html;
index index.html index.htm;
server_name services.stefanow.net;
location / {
try_files $uri $uri/ =404;
}
location /test-express {
proxy_pass http://127.0.0.1:3002;
}
location /test-http {
proxy_pass http://127.0.0.1:3003;
}
}
var http = require('http');
http.createServer(function (req, res) {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end('Hello World\n');
}).listen(3003, '127.0.0.1');
console.log('Server running at http://127.0.0.1:3003/');
Ça marche! Vérifiez: http://services.stefanow.net/test-http
var express = require('express');
var app = express(); //
app.get('/', function(req, res) {
res.redirect('/index.html');
});
app.get('/index.html', function(req, res) {
res.send("blah blah index.html");
});
app.listen(3002, "127.0.0.1");
console.log('Server running at http://127.0.0.1:3002/');
Cela ne fonctionne pas: ( Voir: http://services.stefanow.net/test-express
Je sais que quelque chose se passe.
a) test-express n'est PAS en cours d'exécution
b) text-express est en cours d'exécution
(et je peux confirmer qu'il fonctionne via la ligne de commande alors que ssh sur le serveur)
root@stefanow:~# service nginx restart
* Restarting nginx nginx [ OK ]
root@stefanow:~# curl localhost:3002
Moved Temporarily. Redirecting to /index.html
root@stefanow:~# curl localhost:3002/index.html
blah blah index.html
J'ai essayé de définir des en-têtes comme décrit ici: http://www.nginxtips.com/how-to-setup-nginx-as-proxy-for-nodejs/ (ne fonctionne toujours pas)
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_Host;
proxy_set_header X-NginX-Proxy true;
J'ai également essayé de remplacer '127.0.0.1' par 'localhost' et vice versa
S'il vous plaît donnez votre avis. Je suis sûr que certains détails évidents me manquent et j'aimerais en savoir plus. Je vous remercie.
Vous exprimez configuré pour servir le chemin /index.html
, mais vous avez besoin de /test-express/index.html
. Soit configure express pour servir /test-express/index.html
ou faire nginx pour supprimer /test-exress
de la demande par procuration. Ce dernier est aussi simple que d'ajouter des barres obliques à location
et proxy_pass
.
location /test-express/ {
proxy_pass http://127.0.0.1:3002/;
}
Voir http://nginx.org/r/proxy_pass pour plus de détails.