2013-04-17 10 views
5

Ich habe nach der Antwort gesucht und ich glaube, die Antwort ist ziemlich einfach, aber ich konnte es nicht finden. Ich denke für meinen Mangel an Wissen über nginx ...nginx/flaschenpython - Route Anfrage an einen anderen Port

Ich habe meine Nginx-Instanz auf localhost: 8080 und meine Flasche Server hören auf localhost: 8081. Wenn ich die Adressen vom Browser öffne, funktionieren sie gut, aber wenn ich versuche, auf die Anwendung zuzugreifen, die ich auf localhost: 8080 ausführe, kann ich die vom Bottle-Server generierten Ressourcen nicht abrufen.

Was ich tun muss, ist umleiten alle Anrufe an den/Daten/Pfad zu der gleichen Domäne (localhost) aber einen anderen Port (8081), der, wo mein Flaschen-Server zuhört. Hier

ist der Code: Nginx:

server { 
    listen  8080; 
    server_name localhost; 
    root /Users/Diego/Desktop; 

    location/{ 
     index index.html index.htm; 
    } 

    location /data/ { 
     proxy_pass http://127.0.0.1:8081; 
    } 
} 

Bottle Server:

@route('/') 
def printtest(): 
    print 'success' 
    return 'loaded page' 

@route('/<scenename>/data/<filename:path>') 
def testMethod(scenename,filename): 
    print scenename, filename 

run(host='localhost', port=8081, debug=True) 

im Browser aufrufen, localhost: 8080, zeigt mir die Seite über nginx serviert, aber dann, wenn Ich rufe einen Link auf, um etwas in /data/directory/filename.json abzurufen, die Flasche scheint die Anfrage nicht zu erhalten. Die Fehlerprotokoll-Status:

2013/04/16 18:50:52 [error] 3544#10612: *69 CreateFile() "C:/Users/Diego/Desktop/project1/data/directory/directory-varietal.json" failed (3: The system cannot find the path specified), client: 127.0.0.1, server: localhost, request: "GET /project1/data/directory/directory-varietal.json HTTP/1.1", host: "localhost:8081", referrer: "http://localhost:8080/project1/" 

kann mir jemand sagen, wie man mit dieser Art von Redirect/Routing?

Und gibt es eine Möglichkeit, einen Feed in einem Protokoll von Nginx zu drucken? Wie ein Befehl print_entry oder ähnliches?

Danke!

EDIT: Ich habe versucht, dies aber kein Ergebnis ... https://serverfault.com/questions/208656/routing-to-various-node-js-servers-on-same-machine

EDIT: Ok einige Verbesserungen, fand ich, dass wahrscheinlich eine Frage der Abfrage Lage ist. Wenn dieser Block eine JSON-Datei anfordert, fragt er den Bottle-Server ab.

location ~* \.(json)$ { 
    proxy_pass http://localhost:8081; 
} 

BEARBEITEN SIE: Yeee! Ich habe eine Lösung gefunden ... es stellte sich heraus, dass es ein Problem mit dem am Ort definierten Pfad war. Notiz an mich selbst: Lesen Sie sorgfältig das Handbuch: http://wiki.nginx.org/HttpCoreModule#location

neuen Code für den Server:

server { 
    listen  8080; 
    server_name localhost; 
    root /Users/Diego/Desktop; 

    location/{ 
     index index.html index.htm; 
    } 

    location ~* /data/ { 
     proxy_pass http://localhost:8081; 
    } 
} 

Wie dem auch sei, wenn jemand eine bessere Lösung hat oder jeder Vorschlag ist dann zu leisten begrüßen.

+0

Freut mich zu hören, dass Sie es gelöst haben - und danke, dass Sie zurückkommen, um die Lösung zu posten! –

+0

@Dieghito, bitte posten Sie Ihr Update als eine richtige Antwort. Es ist akzeptabel, Ihre eigene Frage zu beantworten. – Rod

+0

Danke @Rod, fertig. – Dieghito

Antwort

3

EDIT: Yeee! Ich habe eine Lösung gefunden ... es stellte sich heraus, dass es ein Problem mit dem am Ort definierten Pfad war. Notiz an mich selbst: Lesen Sie sorgfältig das Handbuch: http://wiki.nginx.org/HttpCoreModule#location

neuen Code für den Server:

server { 
    listen  8080; 
    server_name localhost; 
    root /Users/Diego/Desktop; 

    location/{ 
    index index.html index.htm; 
    } 

    location ~* /data/ { 
    proxy_pass http://localhost:8081; 
    } 
} 

Wie dem auch sei, wenn jemand eine bessere Lösung hat oder jeder Vorschlag ist dann zu leisten begrüßen.

+1

So funktioniert es. Ihre Lösung fügt '~ *' zum nginx 'location ~ */data /' Block hinzu. Das ursprüngliche 'location/data /' stimmt mit literalen Zeichenfolgen am _beginning_ der Abfrage überein. Das Hinzufügen von '~' verwendet reguläre Ausdrücke und das '*' fügt Groß- und Kleinschreibung hinzu. Dies wurde benötigt, da '/ data /' nicht mit dem Anfang von 'GET/project1/data/directory/directory-varietal.json' übereinstimmt, aber regex findet es nicht problematisch. – here

+0

Ja genau, was ich aus dieser Erfahrung gelernt habe! In der Tat musste ich noch einige Regeln hinzufügen, und ich folgte diesem Prinzip. Vielen Dank für Ihren Kommentar und Erklärung! – Dieghito

+0

Überprüfen Sie, ob Sie einen abschließenden Schrägstrich nach der Portnummer in der Proxy-Pass benötigen. Das war etwas frustrierend für uns! –

Verwandte Themen