2

Nginx の背後で実行されている Tornado インスタンスがあり、GET リクエストが最初に Nginx にヒットすると、次を使用して Tornado のハンドラーにリクエストを送信します。

proxy_pass              http://127.0.0.1:8080;
proxy_redirect          off;

次に、Tornado の対応するハンドラ内で:

class MyHandler(tornado.web.RequestHandler):

    def get(self, collection, item):
        tag = self.get_argument('tag')
        self.set_secure_cookie('tag', tag, expires_days=None, httponly=True, secure=True)
        self.set_header('X-Accel-Redirect', ''.join(('/blah/blah/', collection, '/', item, '/tag.html')))
        self.finish()

これは基本的にリクエストをNginxにリダイレクトし、静的なhtmlページを提供するように依頼します. ただし、上記のように、リダイレクトの前に安全な Cookie を設定したいと考えています。これは機能しますか?

4

1 に答える 1

1

安全な Cookie の設定は、tornado.web 内で異なる方法で処理されます。内部的にはset_cookie、暗号化された値で呼び出すだけです。

def set_secure_cookie(self, name, value, expires_days=30, **kwargs):
    self.set_cookie(name, self.create_signed_value(name, value),
                    expires_days=expires_days, **kwargs)

nginx のドキュメントによると、 nginxは XSendfile/X-Accel を使用するときに Set-Cookie HTTP ヘッダーをブラウザに転送するだけです。

于 2013-02-27T22:02:21.030 に答える