2010-12-15 67 views
11

J'ai exécuté nginx sur mon serveur ansel.ms et une application node.js sur ansel.ms:46156.Comment rediriger address.com/foo/bar à address.com:port/bar avec nginx?

Je veux nginx de configuration il redirige tout de

ansel.ms/rhythm 

à

ansel.ms:46156. 


ansel.ms/rhythm/sub/path 

devrait devenir

ansel.ms:46156/sub/path 

Ceci est mon fichier dans les sites disponibles:

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; 
    } 
} 

Je ne comprends pas vraiment ce que cela fait (les trucs proxy_set_header), j'ai seulement copié & collé à partir de plusieurs sources.

Cela ne fonctionne pas.

Pouvez-vous me donner un indice sur ce qu'il faut changer pour faire ce que j'ai décrit ci-dessus? Merci!

Répondre

17

Je ne peux pas détecter l'erreur dans votre fichier de configuration; Je suis aussi un nginx-newbie.

Mais voici mon fichier complet de configuration nginx.conf qui 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; 
     } 
    } 
} 

Il est pas parfait, car il ne fonctionnera pas avec http://myhost/cabaret, que si une barre oblique suit carabet comme dans http://myhost/cabaret/ ou http://myhost/cabaret/foo/bar.

+5

Merci! Vous pouvez corriger le problème du slash final avec ceci: 'server {... server_name_in_redirect off; ...} 'et vous devez ajouter une barre oblique à votre emplacement comme ceci:' location/rhythm/{... '(mais pas dans la réécriture!) –

+0

C'est un peu un 'côté' mais utilisez-vous aussi nginx pour faire votre journalisation pour les requêtes POST. Je peux très bien enregistrer mes requêtes GET, mais j'ai des difficultés à consigner la réponse du corps à partir des requêtes POST. Je pensais juste que vous pourriez avoir un aperçu. Ma question est postée à: http://stackoverflow.com/questions/4939382/logging-post-data-from-request-body –

+0

Je suis très heureux d'avoir trouvé cette question dans mon temps de besoin. Avec des joints de ponus supplémentaires pour Anselm Eickhoff. – Kawa