nginx配置:
bash
upstream cm_doc_compose {
server 169.254.197.100:8088;
}
server {
listen 10013; # 监听20012端口(前端访问端口)
server_name _; # 接受任何域名/IP访问
client_max_body_size 1024M;
# 处理静态资源请求(匹配所有路径,优先查找文件)
location / {
# 静态资源根目录:指向React的build目录
#root /usr/share/nginx/html/doc_compose;
root /usr/local/openresty/nginx/html/doc_compose;
# 默认索引页(访问根路径时加载index.html)
index index.html index.htm;
# 尝试查找请求的文件/目录,找不到则返回index.html(支持SPA路由)
try_files $uri $uri/ /index.html;
}
# 将 proxy_pass 放入 location 块中
location /api/ {
proxy_pass http://cm_doc_compose/; # 代理到 upstream 定义的后端服务
# 设置代理超时时间
proxy_connect_timeout 60s; # 连接到后端服务器的超时时间
proxy_send_timeout 60s; # 向后端发送请求的超时时间
proxy_read_timeout 600s; # 从后端读取响应的超时时间(对于长请求很重要)
# 建议添加以下常用代理头(可选但推荐)
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;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
问题:请求地址为http://10.104.255.20:10013/api/user/login, 那代理后的地址应该是访问,169.254.197.100:8088/user/login吧,但却是169.254.197.100:8088/api/user/login
解决方法:
现在的配置:
nginx
proxy_pass http://cm_doc_compose; # 末尾 没有 /
转发结果:
/api/user/login → 原样转发 → http://169.254.197.100:8088/api/user/login
改成这样(末尾加 /):
nginx
proxy_pass http://cm_doc_compose/; # 末尾 有 /
转发结果:
/api/user/login → 去掉 /api/ → http://169.254.197.100:8088/user/login
情况1:现在的写法(错误)
nginx
location /api/ {
proxy_pass http://cm_doc_compose; # 无 /
}
规则:
把 location 匹配的路径,完整拼接到代理地址后面
请求:
/api/user/login
代理后:
http://cm_doc_compose + /api/user/login
http://169.254.197.100:8088/api/user/login ❌
情况2:正确写法(加 /)
nginx
location /api/ {
proxy_pass http://cm_doc_compose/; # 有 /
}
规则:
把 location 匹配的 /api/ 替换掉,只转发后面的路径
请求:
/api/user/login
代理后:
http://cm_doc_compose/ + user/login
http://169.254.197.100:8088/user/login ✅
✅ 只需要改这一行
把:
nginx
proxy_pass http://cm_doc_compose;
改成:
nginx
proxy_pass http://cm_doc_compose/;
就这一个斜杠,决定了你的接口能不能通!
✅ 改完后的完整正确配置
nginx
location /api/ {
proxy_pass http://cm_doc_compose/; # 这里加了 /
proxy_connect_timeout 60s;
proxy_send_timeout 60s;
proxy_read_timeout 600s;
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;
}
🚀 重启 Nginx 即可生效
bash
nginx -t
nginx -s reload
总结
- proxy_pass 末尾无 / :完整拼接路径 → 带
/api→ 404 - proxy_pass 末尾有 / :替换路径 → 去掉
/api→ 正常访问
现在的问题是少了这个 /**!