2013-04-17 8 views
5

Ho cercato la risposta in giro e credo che la risposta sia piuttosto semplice ma non sono riuscito a trovarla. Penso per la mia mancanza di conoscenza di nginx ...nginx/bottle python - instradare la richiesta ad un'altra porta

Ho la mia istanza nginx in esecuzione su localhost: 8080 e il mio server Bottle in ascolto su localhost: 8081. Se apro gli indirizzi dal browser, funzionano bene ma quando provo ad accedere dall'applicazione in esecuzione su localhost: 8080, non riesco a recuperare le risorse generate dal server Bottle.

Quello che devo fare è reindirizzare tutte le chiamate fatte al/data/percorso allo stesso dominio (localhost) ma un'altra porta (8081), quella in cui il mio server di bottiglia è in ascolto.

Ecco il codice: Nginx: server di

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

Bottiglia:

@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) 

Calling nel browser, localhost: 8080, mi visualizza la pagina è stata fornita tramite nginx, ma poi, se Chiamo un collegamento per recuperare qualcosa memorizzato in /data/directory/filename.json, la bottiglia non sembra ricevere la richiesta. Gli stati di registro errore:

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/" 

Qualcuno può dirmi come trattare con questo tipo di reindirizzamento/routing?

Inoltre, c'è un modo per stampare un feed in un log da nginx? come un comando print_entry o simile?

Grazie!

EDIT: Ho provato questo ma nessun risultato ... https://serverfault.com/questions/208656/routing-to-various-node-js-servers-on-same-machine

EDIT: Ok qualche miglioramento, ho scoperto che probabilmente è una questione di posizione query. Con questo blocco e richiedendo un file .json, interroga effettivamente il server Bottle.

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

MODIFICA: Sì! Ho trovato una soluzione ... si è scoperto che si trattava di un problema con il percorso definito nella posizione. Nota a sé: leggere attentamente il manuale: http://wiki.nginx.org/HttpCoreModule#location

nuovo codice per il server:

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

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

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

Comunque se qualcuno ha una soluzione migliore o qualsiasi suggerimento è più quindi invitati a contribuire.

+0

Felice di averlo sentito, e grazie per essere tornato per pubblicare la soluzione! –

+0

@Dieghito, per favore pubblica il tuo aggiornamento come risposta adeguata. È accettabile rispondere alla tua stessa domanda. – Rod

+0

Grazie a @Rod, fatto. – Dieghito

risposta

3

EDIT: Yeee! Ho trovato una soluzione ... si è scoperto che si trattava di un problema con il percorso definito nella posizione. Nota a sé: leggere attentamente il manuale: http://wiki.nginx.org/HttpCoreModule#location

nuovo codice per il server:

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

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

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

Comunque se qualcuno ha una soluzione migliore o qualsiasi suggerimento è più quindi invitati a contribuire.

+1

Ecco come funziona. La tua soluzione aggiunge '~ *' al blocco nginx 'location ~ */data /'. L'originale 'location/data /' corrisponde alle stringhe letterali al _inizio della query. L'aggiunta di '~' usa espressioni regolari, e '*' aggiunge maiuscole e minuscole. Questo era necessario poiché '/ data /' non corrisponderà all'inizio di 'GET/project1/data/directory/directory-varietal.json', ma regex non lo rileva. – here

+0

Sì, esattamente quello che ho imparato da questa esperienza! In effetti ho dovuto aggiungere molte altre regole e ho seguito questo principio. Grazie per il tuo commento e spiegazione! – Dieghito

+0

vale la pena controllare se hai bisogno di una barra finale dopo il numero di porta nel proxy_pass. Questo è stato un po 'frustrante per noi per un po'! –

Problemi correlati