修改小程序
This commit is contained in:
149
government-backend/检查nginx配置.md
Normal file
149
government-backend/检查nginx配置.md
Normal file
@@ -0,0 +1,149 @@
|
||||
# 检查 Nginx 配置的关键步骤
|
||||
|
||||
## 🔍 问题分析
|
||||
|
||||
根据您的反馈:
|
||||
- 修改 nginx 配置后,所有接口都返回 404
|
||||
- 只有登录接口正常(`/api/government/auth/login`)
|
||||
- 重复路径可以正常工作(`/api/government/government/departments`)
|
||||
|
||||
这说明:
|
||||
1. Nginx 已经重启并读取了新配置
|
||||
2. `/api/government/auth/` 规则工作正常
|
||||
3. `/api/government/` 规则可能有问题
|
||||
|
||||
## 🎯 关键问题
|
||||
|
||||
**重复路径能工作说明了什么?**
|
||||
|
||||
如果 `/api/government/government/departments` 能返回 200,说明:
|
||||
- 请求到达了 nginx
|
||||
- Nginx 将请求代理到了后端
|
||||
- 后端处理了 `/api/government/departments` 路径(去掉了一个 government)
|
||||
|
||||
这意味着当前的 proxy_pass 配置可能是:
|
||||
```nginx
|
||||
proxy_pass http://localhost:5352/api/government/;
|
||||
```
|
||||
|
||||
这会导致:
|
||||
- 请求:`/api/government/government/departments`
|
||||
- Nginx 匹配:`location ^~ /api/government/`
|
||||
- 代理到:`http://localhost:5352/api/government/ + government/departments`
|
||||
- 实际请求:`http://localhost:5352/api/government/government/departments`
|
||||
|
||||
但是后端路由是 `/api/government/departments`,所以单个 government 的路径会 404。
|
||||
|
||||
## 🔧 正确的解决方案
|
||||
|
||||
需要修改 `proxy_pass` 配置,去掉路径重写:
|
||||
|
||||
```nginx
|
||||
# 错误的配置(当前)
|
||||
location ^~ /api/government/ {
|
||||
proxy_pass http://localhost:5352/api/government/;
|
||||
# 这会导致路径重复:/api/government/departments → http://localhost:5352/api/government/departments
|
||||
}
|
||||
|
||||
# 正确的配置
|
||||
location ^~ /api/government/ {
|
||||
proxy_pass http://localhost:5352;
|
||||
# 这会保持原始路径:/api/government/departments → http://localhost:5352/api/government/departments
|
||||
}
|
||||
```
|
||||
|
||||
## 📝 修改步骤
|
||||
|
||||
### 1. 修改 nginx 配置文件
|
||||
|
||||
找到 `_etc_nginx_conf.d_ningmuyun_one.conf` 文件中的这一段:
|
||||
|
||||
```nginx
|
||||
# 政府API代理 - 处理其他政府相关接口
|
||||
location ^~ /api/government/ {
|
||||
proxy_pass http://localhost:5352/api/government/; # ❌ 错误
|
||||
# ... 其他配置
|
||||
}
|
||||
```
|
||||
|
||||
修改为:
|
||||
|
||||
```nginx
|
||||
# 政府API代理 - 处理其他政府相关接口
|
||||
location ^~ /api/government/ {
|
||||
proxy_pass http://localhost:5352; # ✅ 正确
|
||||
# ... 其他配置
|
||||
}
|
||||
```
|
||||
|
||||
### 2. 重启 nginx
|
||||
|
||||
```bash
|
||||
sudo nginx -t
|
||||
sudo systemctl reload nginx
|
||||
```
|
||||
|
||||
### 3. 验证修复
|
||||
|
||||
```bash
|
||||
# 应该返回 200
|
||||
curl -X GET https://ad.ningmuyun.com/api/government/departments
|
||||
|
||||
# 应该返回 404(因为路径不再重复)
|
||||
curl -X GET https://ad.ningmuyun.com/api/government/government/departments
|
||||
```
|
||||
|
||||
## 🎯 proxy_pass 尾部斜杠的区别
|
||||
|
||||
这是一个非常重要的 nginx 配置细节:
|
||||
|
||||
### 有尾部斜杠
|
||||
```nginx
|
||||
location ^~ /api/government/ {
|
||||
proxy_pass http://localhost:5352/api/government/;
|
||||
}
|
||||
```
|
||||
- 请求:`/api/government/departments`
|
||||
- 匹配部分:`/api/government/`
|
||||
- 剩余部分:`departments`
|
||||
- 代理到:`http://localhost:5352/api/government/departments`
|
||||
|
||||
### 无尾部斜杠
|
||||
```nginx
|
||||
location ^~ /api/government/ {
|
||||
proxy_pass http://localhost:5352;
|
||||
}
|
||||
```
|
||||
- 请求:`/api/government/departments`
|
||||
- 代理到:`http://localhost:5352/api/government/departments`(保持完整路径)
|
||||
|
||||
## 📊 当前配置应该是
|
||||
|
||||
```nginx
|
||||
# 政府认证API代理
|
||||
location ^~ /api/government/auth/ {
|
||||
proxy_pass http://localhost:5352/api/auth/; # ✅ 正确(需要去掉 government)
|
||||
# ... 其他配置
|
||||
}
|
||||
|
||||
# 政府API代理
|
||||
location ^~ /api/government/ {
|
||||
proxy_pass http://localhost:5352; # ✅ 正确(保持完整路径)
|
||||
# ... 其他配置
|
||||
}
|
||||
```
|
||||
|
||||
## 🚨 总结
|
||||
|
||||
修改配置文件,将:
|
||||
```nginx
|
||||
proxy_pass http://localhost:5352/api/government/;
|
||||
```
|
||||
|
||||
改为:
|
||||
```nginx
|
||||
proxy_pass http://localhost:5352;
|
||||
```
|
||||
|
||||
然后重启 nginx,问题应该就能解决了。
|
||||
|
||||
Reference in New Issue
Block a user