2011-05-19 14 views
5

Tengo un dominio personal ejecutándose en un VPS. Me gustaría configurar nginx como un proxy inverso para la aplicación node.js, pero no está funcionando. ¿Alguien podría mirar mi configuración y decirme qué estoy haciendo mal?¿Qué problema hay en esta configuración para nginx como proxy inverso para node.js?

Supongamos que mi nombre de dominio es example.com. Básicamente, me gustaría hacerlo de modo que cuando vaya a node.example.com, se envíe a la aplicación node.js. También tengo la configuración de blog.example.com y www.example.com en nginx.

Aquí está mi configuración de nginx para el proxy inverso (blog.example.com, www.example.com configuración se omite):

 
server { 
    listen 80; 
    server_name node.example.com; 

    access_log /srv/www/example.com/logs/node-access.log; 
    error_log /srv/www/example.com/logs/node-error.log; 

    location/{ 
     proxy_pass    http://example.com:3000/; 
     proxy_redirect   off; 
     proxy_set_header  Host   $host; 
     proxy_set_header  X-Real-IP  $remote_addr; 
     proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for; 
     client_max_body_size 10m; 
     client_body_buffer_size 128k; 
     proxy_connect_timeout 90; 
     proxy_send_timeout  90; 
     proxy_read_timeout  90; 
     proxy_buffers   32 4k; 
    } 
} 

Y aquí está mi aplicación Node.js:

 
var http = require('http'); 
http.createServer(function (req, res) { 
    res.writeHead(200, {'Content-Type': 'text/plain'}); 
    res.end('Hello World\n'); 
}).listen(3000, "example.com"); 

reinicié el servidor nginx y ejecuté la aplicación node.js. Pero si voy a node.example.com, dice "node.example.com no existe o no está disponible".

No estoy seguro de qué hay de malo en mi configuración. Probé varias combinaciones, también.

Estas son las configuraciones que he intentado:

 
proxy_pass in nginx   | hostname in node.js app 
http:// localhost:3000/  | ---.listen(3000, "localhost") 
http:// 127.0.0.1:3000/  | ---.listen(3000, "127.0.0.1") 
http:// node.example.com:3000/ | ---.listen(3000, "node.example.com") 

también probé la siguiente configuración de nginx:

 
upstream nodeapp { 
    server 127.0.0.1:3000; 
} 

server { 
    ... 
    location/{ 
    proxy_pass  http:// nodeapp; 
    ... 
    } 
    ... 
} 

Y tampoco funciona. ¿Qué estoy haciendo mal? He buscado en la web durante unas horas y he intentado varios enfoques, pero parece que no funcionan.

Realmente apreciaría si alguien puede ayudarme.

Gracias!

+1

Ese mensaje de error suena más como un problema de DNS que un problema de nginx/nodo. ¿Funciona si usa la dirección IP en lugar de node.example.com? – kolbyjack

+0

Intenté usar la dirección IP también, pero tampoco funcionó. –

+0

@kolbyjack, en realidad tenía razón. Configuré mal el DNS. Ahora está funcionando =) ¡Gracias! –

Respuesta

2

en la configuración de nginx (PROXY_PASS) usted tiene que quitar espacios en la URL entre (http: //) y (su nombre de host):

que escribió:

proxy_pass http:// nodeapp;

usted tiene que escribir :

proxy_pass http://nodeapp ;

trato en mi servidor y añadir espacio después de http: // .. reinicie nginx pero el nginx es faild! así que, creo que este es quizás su problema nginx! intente eliminar este espacio y espero trabajar con usted!

Buena suerte!

+0

La razón por la que puse espacio en http: // nodeapp; es porque Stackoverflow se quejó de que tengo demasiados enlaces (posiblemente spam) en mi publicación de pregunta. En mi configuración real, lo tenía como http: // nodeapp; en lugar de http: // nodeapp. –

+0

Espacio fijo (resucitado). –

Cuestiones relacionadas