烧瓶安全不能与多个工人的gunicorn一起工作?

问题描述 投票:0回答:3

我正在用Flask写一个网站。我使用Flask-Secuirty进行身份验证。我使用nginx + gunicorn来部署它。

nginx的配置如下:

server{
    listen 80;
    server_name project.example.com;
    location / {
        proxy_pass http://127.0.0.1:5000;

        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forward-For $proxy_add_x_forwarded_for;
    }
}

我用gunicorn -w worker_number -k gevent run:app -p app.pid -b 127.0.0.1:5000启动gunicorn

如果worker_number1,一切都很好。

如果worker_number大于1,如3,我无法使用Flask-Security登录。

服务器的输出表示登录后的请求是200.但是服务器再次将我重定向到登录页面。

经过一番搜索,我找不到直接原因。我猜这可能是由于Flask的SERVER_NAME配置或Flask-SQLAlchemy的误用造成的。

以前有人遇到过这种情况吗?请给我一些建议。

python nginx flask-sqlalchemy gunicorn flask-security
3个回答
1
投票

我遇到了与flask_login类似的问题,当worker_number大于1时,我无法登录。

我的app.secret_key设置为os.urandom(24),因此每个工作人员都会有另一个密钥。

将app.secret_key设置为字符串解决了我的问题。


0
投票

使用类似Flask-Session的东西并使用Redis作为会话存储。我不确定Flask-Security的工作原理,但我认为它依赖于Flask会话,在这种情况下,它可以解决用户会话在应用程序服务器之间切换的问题。


0
投票

只需使用固定的密钥即可。 使用以下命令生成。 $ openssl rand -base64 <desired_length>

如果您不想对源代码中的密钥进行硬编码,那么出于安全考虑,您不应该这样做。 设置一个环境变量并获取它。

import os

# -- snip --

app.config["SECRET_KEY"] = os.environ.get("FLASK_APP_SECRET_KEY")
© www.soinside.com 2019 - 2024. All rights reserved.