diff --git a/README.md b/README.md index cb38ce3..a39832d 100644 --- a/README.md +++ b/README.md @@ -254,6 +254,25 @@ Linux 默认路径: 使用 `--no-service` 只用于开发验收:启动器会在当前用户下运行,但默认设置 `OA_UPDATE_ENABLED=false`。生产环境应使用 systemd/launchd,让在线更新可以在 Java 进程退出后自动拉起新版本。 +### HTTPS 反向代理 + +正式服务监听 `8090`。Nginx、宝塔、Caddy 或 CDN 终止 HTTPS 后,必须把公网协议和主机转发给 Spring Boot;否则浏览器的同源 API 请求会被误判为跨域,并收到纯文本 `403 Invalid CORS request`,前端表现为“响应非 JSON (HTTP 403)”。Nginx 的代理位置至少包含: + +```nginx +location / { + proxy_pass http://127.0.0.1:8090; + proxy_http_version 1.1; + proxy_set_header Host $host; + proxy_set_header X-Forwarded-Host $host; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_set_header X-Forwarded-Port $server_port; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; +} +``` + +如果 Nginx 前面还有 Cloudflare 等上游代理,`X-Forwarded-Proto` 必须保留浏览器实际使用的 `https`,不能被内层 HTTP 链路覆盖。前端与 `/api/oa/*` 推荐使用同一个公网域名;不要在 Nginx 中附加 `Access-Control-Allow-Origin *`。 + ## 在线更新与回滚 管理员登录后进入: @@ -417,6 +436,10 @@ Gitea 仓库尚未发布首个可安装版本,或 Release 缺少四个必需 运行 `ngrok config check` 确认配置有效,并检查固定域名是否属于当前 ngrok 账号。可以通过 `ERP_RUN_NGROK_BIN`、`ERP_RUN_NGROK_CONFIG` 和 `ERP_RUN_NGROK_API_PORT` 覆盖路径与端口。 +### 反向代理后提示“响应非 JSON (HTTP 403)” + +应用自身的 401/403 权限错误始终是 JSON。该提示表示 Nginx、WAF 或 Spring CORS 层提前返回了纯文本/HTML。先确认代理目标为 `http://127.0.0.1:8090`,再按“HTTPS 反向代理”一节补齐 `Host` 和 `X-Forwarded-*` 请求头;响应正文为 `Invalid CORS request` 时即可确认是协议/主机转发不完整。 + ### 签名验证失败 不要跳过验证。确认 Release 的四个资产来自同一次构建、`SHA256SUMS` 未被改写、签名私钥与 `distribution/release-public-key.pem` 匹配。 diff --git a/oa-backend/src/installer/resources/application.yml b/oa-backend/src/installer/resources/application.yml index 9ecfd8d..c91162e 100644 --- a/oa-backend/src/installer/resources/application.yml +++ b/oa-backend/src/installer/resources/application.yml @@ -1,6 +1,7 @@ server: port: ${SERVER_PORT:8091} shutdown: graceful + forward-headers-strategy: framework spring: application: diff --git a/oa-backend/src/installer/resources/static/index.html b/oa-backend/src/installer/resources/static/index.html index abb9a93..32a5fb0 100644 --- a/oa-backend/src/installer/resources/static/index.html +++ b/oa-backend/src/installer/resources/static/index.html @@ -190,6 +190,44 @@ .progress-item.running .progress-dot { border-color: #2f6fed; background: #2f6fed; box-shadow: 0 0 0 4px #eaf1fd; } .progress-item.done { color: #187149; } .progress-item.done .progress-dot { border-color: #25805a; background: #25805a; } + .install-progress { margin-top: 22px; padding-top: 18px; border-top: 1px solid #e8ebf0; } + .install-progress-head, .install-progress-meta, .install-console-head { + display: flex; + align-items: center; + justify-content: space-between; + gap: 12px; + } + .install-progress-label { color: #334057; font-size: 13px; font-weight: 650; } + .install-progress-value { color: #1d3557; font-size: 14px; font-variant-numeric: tabular-nums; } + .install-progress-track { + height: 10px; + margin-top: 10px; + overflow: hidden; + border-radius: 4px; + background: #e5eaf1; + } + .install-progress-bar { + width: 0; + height: 100%; + background: #2f6fed; + transition: width .35s ease; + } + .install-progress-meta { margin-top: 8px; color: #707c90; font-size: 12px; } + .install-console { margin-top: 14px; overflow: hidden; border: 1px solid #28364a; border-radius: 6px; background: #182233; } + .install-console-head { min-height: 36px; padding: 0 12px; border-bottom: 1px solid #314158; background: #111a28; } + .install-console-title { color: #dce5f2; font-size: 12px; font-weight: 650; } + .install-console-state { color: #7dd3a8; font-size: 12px; } + .install-log { + height: 148px; + margin: 0; + overflow: auto; + padding: 10px 12px; + color: #c9d5e5; + font: 12px/1.65 ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; + letter-spacing: 0; + overflow-wrap: anywhere; + white-space: pre-wrap; + } .complete-mark { width: 58px; height: 58px; @@ -220,6 +258,8 @@ .summary-row { grid-template-columns: 1fr; gap: 5px; } .actions { flex-wrap: wrap-reverse; } .btn { flex: 1 1 120px; } + .install-progress-meta { align-items: flex-start; flex-direction: column; gap: 4px; } + .install-log { height: 172px; } } @@ -299,6 +339,23 @@
创建管理员账号
启动正式服务并写入安装锁
+
+
+ 准备安装 + 0% +
+
+
+
+
+ 本页已等待 0 秒 + 等待安装任务 +
+
+
+
安装状态运行中
+

+          
正在初始化,数据库规模较大时可能需要几分钟。