fix: 添加 ProxyFix 中间件修复登录状态丢失问题
- 添加 werkzeug.middleware.proxy_fix.ProxyFix 中间件 - 配置信任反向代理的 X-Forwarded-Proto 头 - 解决 Nginx 反向代理后 Flask 无法识别 HTTPS 的问题 - 之前 SESSION_COOKIE_SECURE=True 会导致 cookie 被清除 问题根因: 1. Nginx 通过 HTTP 转发请求到 Flask 2. Flask 认为是 HTTP 请求,request.is_secure = False 3. SESSION_COOKIE_SECURE=True 导致 cookie 被立即删除 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
11
app.py
11
app.py
@@ -63,6 +63,7 @@ from flask_sqlalchemy import SQLAlchemy
|
||||
from flask_login import LoginManager, UserMixin, login_user, logout_user, login_required, current_user
|
||||
import random
|
||||
from werkzeug.security import generate_password_hash, check_password_hash
|
||||
from werkzeug.middleware.proxy_fix import ProxyFix
|
||||
import re
|
||||
import string
|
||||
from datetime import datetime, timedelta, time as dt_time, date
|
||||
@@ -175,6 +176,16 @@ es_client = Elasticsearch(
|
||||
|
||||
app = Flask(__name__)
|
||||
|
||||
# ============ ProxyFix 配置(信任反向代理头)============
|
||||
# 重要:解决 Nginx 反向代理后 Flask 无法识别 HTTPS 的问题
|
||||
# 这会导致 SESSION_COOKIE_SECURE=True 时 cookie 被清除
|
||||
# x_for=1: 信任 1 层代理的 X-Forwarded-For 头(获取真实客户端 IP)
|
||||
# x_proto=1: 信任 1 层代理的 X-Forwarded-Proto 头(识别 HTTPS)
|
||||
# x_host=1: 信任 1 层代理的 X-Forwarded-Host 头(获取原始 Host)
|
||||
# x_prefix=1: 信任 1 层代理的 X-Forwarded-Prefix 头(URL 前缀)
|
||||
app.wsgi_app = ProxyFix(app.wsgi_app, x_for=1, x_proto=1, x_host=1, x_prefix=1)
|
||||
print("✅ ProxyFix 已配置,Flask 将信任反向代理头(X-Forwarded-Proto 等)")
|
||||
|
||||
# ============ Redis 连接配置(支持环境变量覆盖) ============
|
||||
_REDIS_HOST = os.environ.get('REDIS_HOST', 'localhost')
|
||||
_REDIS_PORT = int(os.environ.get('REDIS_PORT', 6379))
|
||||
|
||||
Reference in New Issue
Block a user