Flask sub.domain.com 覆盖 domain.com 上的会话
Flask sub.domain.com overrides session on domain.com
我有两个单独的服务器,一个用于 domain.com,另一个用于 sub.domain.com,我使用 flask-session 和以下配置存储会话:
SERVER_NAME = 'domain.com'
SESSION_COOKIE_DOMAIN = ".domain.com"
# Flask-Session
SESSION_TYPE = 'redis'
SESSION_REDIS = Redis(host='192.168.10.10', port=6379, db=0)
此外,我正在使用 nginx 和反向代理:
proxy_set_header Host $host;
当我在 domain.com 上登录时一切正常,但是当我刷新 sub.domain.com 时,用户在 domain.com 上注销(sub.domain.com 创建另一个会话并且覆盖由 domain.com 创建的那个)。身份验证是通过 flask-login 完成的,它位于 domain.com 上(sub.domain.com 应该只得到它们)。
我不知道出了什么问题,非常感谢您的帮助。
更新:
我尝试在没有 uwsgi 的情况下 运行 flask,它可以正常工作,但是当我使用 uwsgi 和 nginx 时,问题仍然存在。我认为我的 uwsgi 或 nginx 配置有问题。
# uwsgi.ini
[uwsgi]
master = true
enable-threads = true
process = 3
plugin = python
socket = /tmp/name.sock
base = /var/www/app
chdir = %(base)
wsgi-file = %(base)/manage.py
callable = app
# nginx.conf
server {
listen 8001;
location / {
include uwsgi_params;
uwsgi_pass unix:///tmp/name.sock;
}
}
我错误地认为它与我的反向代理或 uwsgi 无关。实际上这是反向代理的问题,我可以通过向 nginx 添加以下规则来解决我的问题:
proxy_cookie_domain media.$host $host;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect false;
我有两个单独的服务器,一个用于 domain.com,另一个用于 sub.domain.com,我使用 flask-session 和以下配置存储会话:
SERVER_NAME = 'domain.com'
SESSION_COOKIE_DOMAIN = ".domain.com"
# Flask-Session
SESSION_TYPE = 'redis'
SESSION_REDIS = Redis(host='192.168.10.10', port=6379, db=0)
此外,我正在使用 nginx 和反向代理:
proxy_set_header Host $host;
当我在 domain.com 上登录时一切正常,但是当我刷新 sub.domain.com 时,用户在 domain.com 上注销(sub.domain.com 创建另一个会话并且覆盖由 domain.com 创建的那个)。身份验证是通过 flask-login 完成的,它位于 domain.com 上(sub.domain.com 应该只得到它们)。
我不知道出了什么问题,非常感谢您的帮助。
更新:
我尝试在没有 uwsgi 的情况下 运行 flask,它可以正常工作,但是当我使用 uwsgi 和 nginx 时,问题仍然存在。我认为我的 uwsgi 或 nginx 配置有问题。
# uwsgi.ini
[uwsgi]
master = true
enable-threads = true
process = 3
plugin = python
socket = /tmp/name.sock
base = /var/www/app
chdir = %(base)
wsgi-file = %(base)/manage.py
callable = app
# nginx.conf
server {
listen 8001;
location / {
include uwsgi_params;
uwsgi_pass unix:///tmp/name.sock;
}
}
我错误地认为它与我的反向代理或 uwsgi 无关。实际上这是反向代理的问题,我可以通过向 nginx 添加以下规则来解决我的问题:
proxy_cookie_domain media.$host $host;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect false;