# 乐活公益平台 HTTPS 访问问题诊断报告 ## 问题现象 - **本地访问正常**: `http://localhost:3000/api/v1/...` ✅ - **HTTPS访问失败**: `https://lhgy.net/api/v1/...` ❌ - **错误信息**: `"Cannot POST /v1/admin/auth/login"` (缺少 `/api/` 前缀) - **影响范围**: 所有 `/api/v1/` 开头的API请求都被修改路径 ## 根本原因 FRP服务器 (47.116.99.193) 上的 nginx 配置有问题。 **请求链路**: ``` 客户端 → lhgy.net (443端口) → FRP服务器nginx → TCP隧道 → 本地nginx → API容器 ``` **问题位置**: FRP服务器的nginx在转发请求时剥离了 `/api/` 前缀。 **验证**: - 直接访问本地nginx: `curl -k https://127.0.0.1/api/v1/test` → ✅ 成功 - 通过域名访问: `curl -k https://lhgy.net/api/v1/test` → ❌ 路径变成 `/v1/test` - 直接访问公网IP: `curl -k https://47.116.99.193/api/v1/test -H "Host: lhgy.net"` → ❌ 同样失败 ## 需要检查的文件 在FRP服务器上执行以下命令检查nginx配置: ```bash # 1. 查看所有nginx配置 sudo nginx -T | grep -A 20 "location /api" # 2. 检查rewrite规则 sudo nginx -T | grep -i rewrite # 3. 检查proxy_pass配置 sudo nginx -T | grep -B 5 -A 10 "proxy_pass" # 4. 查看完整配置 sudo cat /etc/nginx/nginx.conf sudo ls -la /etc/nginx/conf.d/ sudo ls -la /etc/nginx/sites-enabled/ ``` ## 修复方案 找到有问题的配置后,确保: 1. **`location /api/` 块的 proxy_pass 后面不要有路径** ```nginx # 错误示例 (会修改路径): location /api/ { proxy_pass http://127.0.0.1:3000/; # 注意尾部斜杠 } # 正确示例 (保留完整路径): location /api/ { proxy_pass http://127.0.0.1:3000; # 没有尾部斜杠 } ``` 2. **不要有修改路径的 rewrite 规则** ```nginx # 删除或注释掉类似这样的规则: # rewrite ^/api/(.*)$ /$1 break; ``` 3. **重载nginx** ```bash sudo nginx -t && sudo nginx -s reload ``` ## 临时绕过方案 如果无法立即修复FRP服务器,可以修改前端配置: ```bash # 修改 .env.production ADMIN_API_URL=https://lhgy.net:3000 # 或者使用FRP映射的其他端口 ``` 但这是临时方案,建议尽快修复FRP服务器的nginx配置。 ## 验证方法 修复后测试: ```bash curl -sk https://lhgy.net/api/v1/admin/auth/login \ -X POST \ -H "Content-Type: application/json" \ -H "Origin: https://lhgy.net" \ -d '{"username":"admin","password":"lehuo@123456"}' ``` 期望返回包含 session 信息的JSON响应。