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

在 tornado.web 中设置安全 cookie 的方式不同。在内部,它只是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 文档,当使用 XSendfile/X-Accel 时,nginx 只会将 Set-Cookie HTTP 标头转发到浏览器。

于 2013-02-27T22:02:21.030 回答