2010-12-15 6 views
11

Ich habe nginx auf meinem Server ansel.ms und eine node.js App auf ansel.ms:46156 ausgeführt.Wie address.com/foo/bar zu address.com:port/bar mit nginx umleiten?

Ich möchte nginx einrichten, so dass es alles von

ansel.ms/rhythm 

zu

ansel.ms:46156. 


ansel.ms/rhythm/sub/path 
umleitet

ansel.ms:46156/sub/path 

Dies ist meine Datei in sites-available werden sollte:

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

Ich verstehe nicht wirklich, was das tut (die proxy_set_header stuff), kopierte ich nur & eingefügt es aus mehreren Quellen.

Es funktioniert nicht.

Können Sie mir einen Hinweis geben, was ich ändern soll, damit es funktioniert, was ich oben beschrieben habe? Vielen Dank!

Antwort

17

Ich kann den Fehler in Ihrer Konfigurationsdatei nicht erkennen; Ich bin auch ein Nginx-Neuling.

Aber hier ist meine volle nginx.conf Konfigurationsdatei, die http://myhost/cabaret/foo/bar-http://myhost:8085/foo/bar umleitet:

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

Es ist nicht perfekt, weil es nicht mit http://myhost/cabaret funktioniert nur, wenn ein Schrägstrich carabet wie in http://myhost/cabaret/ folgt oder http://myhost/cabaret/foo/bar.

+5

Danke! Sie können das folgende Slash-Problem beheben: 'server {... server_name_in_redirect off; ...} 'und Sie müssen Ihrem Standort einen Schrägstrich hinzufügen:' location/rhythm/{... '(aber nicht in der Umschreibung!) –

+0

Dies ist eine Art" Nebensache ", die Sie aber auch verwenden nginx für die Protokollierung von POST-Anfragen. Ich kann meine GET-Anfragen gut protokollieren, aber ich habe Probleme, die Body-Antwort von POST-Anfragen zu protokollieren. Ich dachte nur, du könntest etwas Einblick haben. Meine Frage ist an: http://stackoverflow.com/questions/4939382/logging-post-data-from-request-body –

+0

Ich bin sehr erfreut, diese Frage in meiner Zeit der Not gefunden zu haben. Mit extra ponus boots für Anselm Eickhoff. – Kawa