0

uwsgi_pass->uwsgi->flaskを介してPythonコードにリダイレクトした後に渡されるnginx変数に関する奇妙な問題。uWSGI自体は、$uriや$request_filenameなどの変数が展開されていることを確認します。私のPythonコードは、それらを「$uri」および「$request_filename」と同じように認識します。

nginx構成:

location /l0 {
    include uwsgi_params;
    uwsgi_pass 127.0.0.1:4001;
}

location /spool {
    set $file_path $request_filename;
    post_action /l2;
}

location /l2 {
           internal;
           include uwsgi_params;
           uwsgi_param REQUEST_URI /foo/bar=$file_path;
           uwsgi_pass 127.0.0.1:4001;
           limit_except GET {
                allow all;
           }
 }

uwsgiアプリは以下で始まりました:

/usr/bin/uwsgi_python --socket :4001 --python-path /my/path --module my.module --callable      app --need-app

ログから、uwsgiが$ uriを展開してリクエストを受け取ったことがわかります(つまり、「/ some / path」)。私のコードでは、「$ uri」だけが表示されます(ログ行を参照my_2nd_handler got mypath=/foo/bar=$uri) 。

コード:

app = Flask('myapp')
@app.route('/l0', methods=['GET']):
def my_root_handler():
    r = Response()
    r.headers['X-Accel-Redirect'] = '/spool/file1'
    print "my_root_handler sent nginx to /spool/file1"
    return r

@app.route('/<path:mypath>', methods=['GET']):
def my_2nd_handler(mypath):
    print "my_2nd_handler got mypath="+mypath

リクエスト:

 curl -X GET http://mysite/l0

ログ:

my_root_handler sent nginx to /spool/file1
my_2nd_handler got mypath=/foo/bar=$uri
[pid: 21715|app: 0|req: 1/1] 10.16.183.15 () {40 vars in 915 bytes} [Tue Jan 22 21:04:59 2013] GET /foo/bar=/spool/file1 => generated 116 bytes in 3 msecs (HTTP/1.1 404) 4 headers in 203 bytes (1 switches on core 0)

問題の変数は$request_filenameだけではありません。私は同じ結果で他のいくつかを試しました。Pythonコードでnginx変数を展開するにはどうすればよいですか?

4

1 に答える 1

0

残念ながら、私は問題の原因を見つけられませんでした。私にとっては、HttpUwsgiModule 内のバグのように見えます。掘る時間がありません。そこで、回避策を使用しました。アプリの別のインスタンスを実行し、の代わりにuwsgi --http-socket使用します。チャームとして機能します。proxy_passuwsgi_pass

于 2013-01-24T02:34:06.707 に答える