2013-04-17 13 views
5

Szukałem odpowiedzi w okolicy i uważam, że odpowiedź jest dość prosta, ale nie mogłem jej znaleźć. Myślę, że z powodu mojego braku wiedzy na temat nginx ...nginx/butelka python - prośba o połączenie do innego portu

Mam moją instancję nginx działającą na localhost: 8080 i mój serwer butelkowy nasłuchujący na localhost: 8081. Jeśli otworzę adresy z przeglądarki, działają dobrze, ale kiedy próbuję uzyskać dostęp z aplikacji uruchomionej na localhost: 8080, nie mogę odzyskać zasobów generowanych przez serwer Bottle.

Muszę przekierować wszystkie połączenia do/data/path do tej samej domeny (localhost), ale do innego portu (8081), tego, który nasłuchuje mój serwer butelek.

Oto kod: Nginx: serwer

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

Butelka:

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

Wywołanie w przeglądarce localhost: 8080, wyświetla mi strony serwowane przez nginx, ale wtedy, jeśli Wywołuję link do pobrania czegoś przechowywanego w /data/directory/filename.json, butelka wydaje się nie odbierać żądania. Dziennik błędów stwierdza:

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

Czy ktoś może mi powiedzieć, jak radzić sobie z tego rodzaju przekierowaniem/routingiem?

Plus, czy istnieje sposób na wydrukowanie kanału w dzienniku z nginx? jak polecenie print_entry lub podobne?

Dzięki!

EDIT: Próbowałem tego, ale bez rezultatu ... https://serverfault.com/questions/208656/routing-to-various-node-js-servers-on-same-machine

EDIT: Ok pewna poprawa, stwierdziliśmy, że prawdopodobnie jest to kwestia lokalizacji zapytań. Z tym blokiem i żądaniem pliku .json faktycznie wysyła zapytania do serwera butelek.

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

EDYCJA: Yeee! Znalazłem rozwiązanie ... okazało się, że był to problem ze ścieżką zdefiniowaną w lokalizacji. Uwaga do siebie: Przeczytaj uważnie instrukcję: http://wiki.nginx.org/HttpCoreModule#location

nowy kod dla serwera:

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

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

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

W każdym razie jeśli ktoś ma lepsze rozwiązanie lub jakakolwiek sugestia jest więcej to zapraszamy do tego przyczynić.

+0

Cieszę się, że go rozwiązałeś - i dziękuję, że wróciłeś, by opublikować rozwiązanie! –

+0

@Dieghito, proszę zamieścić aktualizację jako właściwą odpowiedź. Dopuszczalne jest udzielenie odpowiedzi na własne pytanie. – Rod

+0

Dzięki @Rod, gotowe. – Dieghito

Odpowiedz

3

EDYCJA: Yeee! Znalazłem rozwiązanie ... okazało się, że był to problem ze ścieżką zdefiniowaną w lokalizacji. Uwaga do siebie: Przeczytaj uważnie instrukcję: http://wiki.nginx.org/HttpCoreModule#location

nowy kod dla serwera:

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

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

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

W każdym razie jeśli ktoś ma lepsze rozwiązanie lub jakakolwiek sugestia jest więcej to zapraszamy do tego przyczynić.

+1

Oto jak to działa. Twoje rozwiązanie dodaje '~ *' do bloku nginx 'location ~ */data /'. Oryginalna 'location/data /' dopasowuje literalne ciągi na _beginning_ zapytania. Dodanie '~' używa wyrażeń regularnych, a '*' dodaje wielkość liter bez uwzględnienia wielkości liter. Było to potrzebne, ponieważ '/ data /' nie pasuje do początku 'GET/project1/data/directory/katalog-varietal.json', ale regex nie znajduje go problemu. – here

+0

Tak dokładnie, czego się nauczyłem z tego doświadczenia! W rzeczywistości musiałem dodać jeszcze kilka reguł i postępowałem zgodnie z tą zasadą. Dziękuję za komentarz i wyjaśnienie! – Dieghito

+0

Warto sprawdzić, czy potrzebujesz końcowego ukośnika po numerze portu w proxy_pass. To było dla nas trochę frustrujące! –

Powiązane problemy