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))