2013-04-17 14 views
5

私は答えを探しましたが、答えはかなりシンプルだと思いますが、それを見つけることができませんでした。私はnginxの知識の私の不足のためだと思う...nginx/bottle python - 別のポートへのルート要求

私は自分のnginxのインスタンスをlocalhostで実行しています:8080と私のボトルサーバーlocalhostで聞いて:8081。ブラウザからアドレスを開くと正常に動作しますが、localhost:8080で実行しているアプリケーションからアクセスしようとすると、ボトルサーバーによって生成されたリソースを取得できません。

/data/pathへのすべての呼び出しを同じドメイン(localhost)にリダイレクトするだけですが、別のポート(8081)(ボトルサーバーがリッスンしている)をリダイレクトします。ここで

はコードです: 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; 
    } 
} 

ボトルサーバ:

ブラウザで呼び出す
@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) 

は、localhost:場合8080は、その後、私はnginxの経由で提供ページを表示しますが、 /data/directory/filename.jsonに格納されているものを取得するためのリンクを呼び出しますが、Bottleは要求を受け取っていないようです。エラーログの状態:

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

誰でもこの種のリダイレクト/ルーティングを処理する方法を教えてください。

さらに、nginxのログにフィードを印刷する方法はありますか? print_entryなどのコマンドのようなものですか?

ありがとうございます!

編集:私はこれを試みたが、結果なし... https://serverfault.com/questions/208656/routing-to-various-node-js-servers-on-same-machine

EDITました:[OK]を、いくつかの改善、私はおそらく、クエリの場所の問題であることがわかりました。このブロックを使用して.jsonファイルを要求すると、実際にボトルサーバーに照会されます。

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

EDIT:Yeee!私は解決策を見つけました...それは場所に定義されたパスに問題があることが判明しました。自己への注意:サーバー用http://wiki.nginx.org/HttpCoreModule#location

新しいコード:マニュアルを注意深く読み、読み

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

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

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

をとにかく誰もがよりよい解決策を持っているか、いずれかの提案がより多くが、その後貢献することを歓迎されます。

+0

あなたの意見を聞いてうれしいです。解決策を投稿するために戻ってきてくれてありがとう! –

+0

@Dieghito、あなたのアップデートを適切な回答として投稿してください。あなた自身の質問に答えてもよい。 – Rod

+0

ありがとう@Rod、done。 – Dieghito

答えて

3

EDIT:Yeee!私は解決策を見つけました...それは場所に定義されたパスに問題があることが判明しました。自己への注意:サーバー用http://wiki.nginx.org/HttpCoreModule#location

新しいコード:マニュアルを注意深く読み、読み

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

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

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

をとにかく誰もがよりよい解決策を持っているか、いずれかの提案がより多くが、その後貢献することを歓迎されます。

+1

これはどのように動作するのですか?あなたの解決策は '〜*'をnginx 'location〜*/data /'ブロックに追加します。 元の 'location/data /'は、クエリの_beginning_にあるリテラル文字列に一致します。 '〜'を追加すると正規表現が使用され、 '*'は大文字と小文字を区別しません。 これは '/ data /'が 'GET/project1/data/directory/directory-varietal.json'の先頭と一致しないために必要でしたが、正規表現では問題ありません。 – here

+0

はい、私はこの経験から学んだものです!実際、私はいくつかのルールを追加しなければならず、私はこの原則に従った。あなたのコメントと説明をありがとう! – Dieghito

+0

は、proxy_passのポート番号の後にスラッシュが必要かどうかを調べる価値があります。これはしばらく私たちのために少しイライラしていた! –

関連する問題