From 073a0cbd7eece98e986fcf7a2c9cdb049629c4b4 Mon Sep 17 00:00:00 2001 From: zzlgreat Date: Sun, 14 Dec 2025 21:47:58 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E6=B7=BB=E5=8A=A0=20ProxyFix=20?= =?UTF-8?q?=E4=B8=AD=E9=97=B4=E4=BB=B6=E4=BF=AE=E5=A4=8D=E7=99=BB=E5=BD=95?= =?UTF-8?q?=E7=8A=B6=E6=80=81=E4=B8=A2=E5=A4=B1=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 添加 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 --- app.py | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/app.py b/app.py index 063ddcdb..a815b80f 100755 --- a/app.py +++ b/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))