Files
nxxmdata/government-backend/nginx-问题分析报告.md

113 lines
3.7 KiB
Markdown
Raw Normal View History

2025-10-17 17:29:11 +08:00
# 政府端API 404错误问题分析报告
## 问题描述
- **错误URL**: `https://ad.ningmuyun.com/api/government/market-price?type=beef`
- **错误状态**: 404 Not Found
- **影响范围**: 政府端管理系统市场价格功能
## 问题根因分析
### 1. 后端代码检查 ✅
- **路由配置**: `government-backend/routes/government.js` 第11行
```javascript
router.get('/market-price', governmentController.getMarketPrice);
```
- **控制器方法**: `governmentController.getMarketPrice` 已正确实现
- **应用路由注册**: `app.js` 第50行已正确注册
```javascript
app.use('/api/government', require('./routes/government'));
```
### 2. 前端代码检查 ✅
- **API调用**: `government-admin/src/views/MarketPrice.vue` 第94行
```javascript
const response = await axios.get('/api/government/market-price', {
params: { type }
})
```
- **代理配置**: `vite.config.js` 开发环境代理配置正确
### 3. Nginx配置问题 ❌
**问题所在**: nginx配置中政府API的路径匹配错误
**原始错误配置**:
```nginx
location ^~ /government/api/ {
proxy_pass http://localhost:5352/;
}
```
**问题分析**:
- 前端请求路径: `/api/government/market-price`
- nginx匹配路径: `/government/api/`
- 路径不匹配导致404错误
## 解决方案
### 修复nginx配置
将政府API代理路径从 `/government/api/` 修改为 `/api/government/`:
```nginx
# 政府API代理 - 修复路径匹配问题
location ^~ /api/government/ {
proxy_pass http://localhost:5352/api/government/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
# CORS配置
add_header 'Access-Control-Allow-Origin' 'https://ad.ningmuyun.com' always;
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS, PUT, DELETE' always;
add_header 'Access-Control-Allow-Headers' 'Authorization, Content-Type, X-Requested-With' always;
add_header 'Access-Control-Allow-Credentials' 'true' always;
if ($request_method = 'OPTIONS') {
add_header 'Access-Control-Allow-Origin' 'https://ad.ningmuyun.com';
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS, PUT, DELETE';
add_header 'Access-Control-Allow-Headers' 'Authorization, Content-Type, X-Requested-With';
add_header 'Access-Control-Allow-Credentials' 'true';
add_header 'Content-Type' 'text/plain; charset=UTF-8';
add_header 'Content-Length' 0;
return 204;
}
}
```
## 部署步骤
1. **备份当前nginx配置**:
```bash
sudo cp /etc/nginx/conf.d/ningmuyun_one.conf /etc/nginx/conf.d/ningmuyun_one.conf.backup
```
2. **应用修复配置**:
```bash
sudo cp nginx-fix-government-api.conf /etc/nginx/conf.d/
# 或者手动编辑配置文件,将上述配置添加到 ad.ningmuyun.com server 块中
```
3. **测试nginx配置**:
```bash
sudo nginx -t
```
4. **重新加载nginx**:
```bash
sudo systemctl reload nginx
```
5. **验证修复**:
```bash
curl -k https://ad.ningmuyun.com/api/government/market-price?type=beef
```
## 预期结果
修复后,`https://ad.ningmuyun.com/api/government/market-price?type=beef` 应该返回正确的市场价格数据而不是404错误。
## 相关文件
- `government-backend/_etc_nginx_conf.d_ningmuyun_one.conf` - 主nginx配置文件
- `government-backend/nginx-fix-government-api.conf` - 修复配置片段
- `government-backend/routes/government.js` - 后端路由
- `government-backend/controllers/governmentController.js` - 控制器实现
- `government-admin/src/views/MarketPrice.vue` - 前端页面