Files
nxxmdata/government-backend/检查nginx配置.md
2025-10-17 17:29:11 +08:00

3.7 KiB
Raw Blame History

检查 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 配置可能是:

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 配置,去掉路径重写:

# 错误的配置(当前)
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 文件中的这一段:

# 政府API代理 - 处理其他政府相关接口
location ^~ /api/government/ {
    proxy_pass http://localhost:5352/api/government/;  # ❌ 错误
    # ... 其他配置
}

修改为:

# 政府API代理 - 处理其他政府相关接口
location ^~ /api/government/ {
    proxy_pass http://localhost:5352;  # ✅ 正确
    # ... 其他配置
}

2. 重启 nginx

sudo nginx -t
sudo systemctl reload nginx

3. 验证修复

# 应该返回 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 配置细节:

有尾部斜杠

location ^~ /api/government/ {
    proxy_pass http://localhost:5352/api/government/;
}
  • 请求:/api/government/departments
  • 匹配部分:/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(保持完整路径)

📊 当前配置应该是

# 政府认证API代理
location ^~ /api/government/auth/ {
    proxy_pass http://localhost:5352/api/auth/;  # ✅ 正确(需要去掉 government
    # ... 其他配置
}

# 政府API代理
location ^~ /api/government/ {
    proxy_pass http://localhost:5352;  # ✅ 正确(保持完整路径)
    # ... 其他配置
}

🚨 总结

修改配置文件,将:

proxy_pass http://localhost:5352/api/government/;

改为:

proxy_pass http://localhost:5352;

然后重启 nginx问题应该就能解决了。