From 3dbd545f6b63cdc03fb00675b427f65ccc5f2b93 Mon Sep 17 00:00:00 2001 From: yuyx <237899745@qq.com> Date: Thu, 27 Nov 2025 20:13:37 +0800 Subject: [PATCH] =?UTF-8?q?fix(install):=20=E4=BF=AE=E5=A4=8D=E6=9B=B4?= =?UTF-8?q?=E6=96=B0/=E4=BF=AE=E5=A4=8D=E6=A8=A1=E5=BC=8F=E8=87=AA?= =?UTF-8?q?=E5=8A=A8=E8=A1=A5=E5=85=85TRUST=5FPROXY=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在 update_patch_env 中添加 TRUST_PROXY 检查和自动补充 - 修复模式(repair_main)现在也会调用 update_patch_env - 更新 .env.example 添加 TRUST_PROXY 配置说明 - 更新修复模式的提示信息 解决使用Nginx反向代理时HTTPS检测失败的问题 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- backend/.env.example | 18 ++++++++++++++++++ install.sh | 21 ++++++++++++++++++--- 2 files changed, 36 insertions(+), 3 deletions(-) diff --git a/backend/.env.example b/backend/.env.example index e06416d..2c6a969 100644 --- a/backend/.env.example +++ b/backend/.env.example @@ -66,6 +66,24 @@ ALLOWED_ORIGINS= # HTTP 环境设置为 false COOKIE_SECURE=false +# ============================================ +# 反向代理配置(Nginx/Cloudflare等) +# ============================================ + +# 信任代理配置 +# +# 配置选项: +# - false: 不信任代理(默认,直接暴露到公网时使用) +# - 1: 信任第1跳代理(推荐,单层Nginx反向代理时使用) +# - 2: 信任前2跳代理(Cloudflare + Nginx) +# - loopback: 仅信任本地回环地址 +# - true: 信任所有代理(不推荐,易被伪造IP) +# +# ⚠️ 重要: 如果使用 Nginx 反向代理并开启 ENFORCE_HTTPS=true +# 必须配置 TRUST_PROXY=1,否则后端无法正确识别HTTPS请求 +# +TRUST_PROXY=false + # ============================================ # 存储配置 # ============================================ diff --git a/install.sh b/install.sh index d669028..d056ac4 100644 --- a/install.sh +++ b/install.sh @@ -3828,6 +3828,7 @@ print_update_completion() { update_patch_env() { print_step "检查 .env 新增配置..." if [[ -f "${PROJECT_DIR}/backend/.env" ]]; then + # 检查 ENFORCE_HTTPS if ! grep -q "^ENFORCE_HTTPS=" "${PROJECT_DIR}/backend/.env"; then # 基于现有配置做一个合理的默认值:如果已启用安全Cookie或公开端口为443,优先设为true COOKIE_SECURE_CUR=$(grep "^COOKIE_SECURE=" "${PROJECT_DIR}/backend/.env" | cut -d'=' -f2- | tr '[:upper:]' '[:lower:]') @@ -3846,6 +3847,15 @@ update_patch_env() { else print_info ".env 已包含 ENFORCE_HTTPS,保持不变" fi + + # 检查 TRUST_PROXY(反向代理配置,对于HTTPS强制模式非常重要) + if ! grep -q "^TRUST_PROXY=" "${PROJECT_DIR}/backend/.env"; then + # 默认设置为1,假设使用单层Nginx反向代理 + echo "TRUST_PROXY=1" >> "${PROJECT_DIR}/backend/.env" + print_warning "已为现有 .env 补充 TRUST_PROXY=1(Nginx反向代理场景必需)" + else + print_info ".env 已包含 TRUST_PROXY,保持不变" + fi else print_warning "未找到 ${PROJECT_DIR}/backend/.env,请手动确认配置" fi @@ -4109,6 +4119,7 @@ confirm_repair() { echo "本脚本将执行以下操作:" echo "" echo "【将会重新配置】" + echo " ✓ 补充缺失的环境变量(TRUST_PROXY、ENFORCE_HTTPS等)" echo " ✓ 重新生成Nginx配置(应用最新配置)" echo " ✓ 重启后端服务" echo " ✓ 重载Nginx服务" @@ -4116,12 +4127,12 @@ confirm_repair() { echo "【将会保留】" echo " ✓ 数据库文件(用户数据)" echo " ✓ 用户上传的文件" - echo " ✓ .env 配置文件" + echo " ✓ .env 配置文件(仅补充缺失项)" echo " ✓ SSL证书" echo -e "${NC}" echo "" - print_info "适用场景: 更新配置、修复nginx配置错误、重新应用设置" + print_info "适用场景: 更新配置、修复nginx配置错误、修复HTTPS访问问题、重新应用设置" echo "" read -p "确定要执行修复吗? (y/n): " confirm < /dev/tty @@ -4300,6 +4311,7 @@ print_repair_completion() { echo "" echo -e "${CYAN}修复内容:${NC}" + echo " ✓ 环境配置已检查并补充缺失项(TRUST_PROXY、ENFORCE_HTTPS等)" echo " ✓ Nginx配置已更新到最新版本" echo " ✓ 服务已重启" echo "" @@ -4307,7 +4319,7 @@ print_repair_completion() { echo -e "${CYAN}保留的数据:${NC}" echo " ✓ 数据库(用户、分享链接等)" echo " ✓ 用户文件(storage目录)" - echo " ✓ 配置文件(.env)" + echo " ✓ 配置文件(.env,仅补充缺失项)" echo "" # 显示访问地址 @@ -4361,6 +4373,9 @@ repair_main() { # 读取现有配置 repair_load_existing_config + # 补充缺失的环境配置(如 TRUST_PROXY, ENFORCE_HTTPS 等) + update_patch_env + # 重新生成nginx配置 repair_regenerate_nginx_config