2010-12-15 19 views
11

Tengo ejecutando nginx en mi servidor ansel.ms y una aplicación node.js en ansel.ms:46156.Cómo redireccionar address.com/foo/bar a address.com:port/bar con nginx?

Quiero nginx configuración por lo que vuelve a dirigir todo, desde

ansel.ms/rhythm 

a

ansel.ms:46156. 


ansel.ms/rhythm/sub/path 

debe convertirse en

ansel.ms:46156/sub/path 

Este es mi archivo en los sitios de disposición:

upstream rhythm { 
    server ansel.ms:46156; 
} 

server { 
    listen 80; 
    server_name ansel.ms www.ansel.ms; 
    access_log /srv/www/ansel.ms/logs/access.log; 
    error_log /srv/www/ansel.ms/logs/error.log; 

    location/{ 
     root /srv/www/ansel.ms/public_html; 
     index index.html index.htm; 
    } 

    location ~ \.php$ { 
     include fastcgi_params; 
     fastcgi_pass 127.0.0.1:9000; 
     fastcgi_index index.php; 
     fastcgi_param SCRIPT_FILENAME /srv/www/ansel.ms/public_html$fastcgi_script_name; 
    } 

    location /rhythm{ 
     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; 

     proxy_pass http://rhythm; 
     proxy_redirect off; 
    } 
} 

Realmente no entiendo profundamente lo que hace esto (las cosas de proxy_set_header), solo copié & pegado de varias fuentes.

No funciona.

¿Puede darme una pista sobre qué cambiar para que haga lo que describí anteriormente? ¡Gracias!

Respuesta

17

No puedo encontrar el error en su archivo de configuración; Soy un nginx-novato también.

Pero aquí es mi fichero de configuración nginx.conf completa que redirige http://myhost/cabaret/foo/bar-http://myhost:8085/foo/bar:

user www-data; 
worker_processes 1; 
error_log /var/log/nginx/error.log; 
pid  /var/run/nginx.pid; 

events { 
    worker_connections 1024; 
} 

http { 
    include  /etc/nginx/mime.types; 
    access_log /var/log/nginx/access.log; 
    sendfile  on; 
    keepalive_timeout 65; 
    tcp_nodelay  on; 

    server { 

     listen *:80; ## listen for ipv4 
     access_log /var/log/nginx/localhost.access.log; 
     location /cabaret { 
       rewrite /cabaret(.*) $1 break; 
       proxy_pass http://127.0.0.1:8085; 
       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; 
     } 
    } 
} 

No es perfecta, porque no va a trabajar con http://myhost/cabaret, sólo si una barra sigue carabet como en http://myhost/cabaret/ o http://myhost/cabaret/foo/bar.

+5

Gracias! Puede solucionar el problema de barra inclinada con esto: 'server {... server_name_in_redirect off; ...} 'y tiene que agregar una barra inclinada a su ubicación de esta manera:' location/rhythm/{... '(¡pero no en la reescritura!) –

+0

Esto es como un 'asidero' pero también lo está usando nginx para hacer su registro para las solicitudes POST. Puedo registrar mis solicitudes GET muy bien, pero estoy teniendo problemas para registrar la respuesta del cuerpo de las solicitudes POST. Solo pensé que podrías tener alguna idea. Mi pregunta se publicó en: http://stackoverflow.com/questions/4939382/logging-post-data-from-request-body –

+0

Estoy muy contento de haber encontrado esta pregunta en mi momento de necesidad. Con extra ponus boints para Anselm Eickhoff. – Kawa

Cuestiones relacionadas