Vue项目Nginx配置问题:请求错误跳转到/api/ location
Nginx请求匹配异常问题排查与解决
核心问题出在Nginx的location前缀匹配逻辑上:
你的location /users/配置末尾带斜杠,意味着只有路径以/users/(含末尾斜杠)开头的请求才会匹配这条规则。但前端请求的/users/api/v1/user路径开头是/users(无末尾斜杠),所以这条请求不会命中/users/规则,后续如果被其他逻辑(比如Vue history模式的try_files)改写,就会触发/api/的规则。
而登录类接口能正常匹配,大概率是请求时路径末尾带了斜杠,或者存在隐式的路径补全逻辑。
解决办法
1. 修正location匹配规则(推荐)
把location /users/改成location /users(去掉末尾斜杠),这样所有以/users开头的请求都会命中这条代理规则:
location /users { proxy_pass https://$USER_URL/; proxy_redirect off; proxy_ssl_protocols TLSv1.2 TLSv1.3; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_intercept_errors off; proxy_buffer_size 4k; proxy_buffers 4 32k; proxy_busy_buffers_size 64k; proxy_temp_file_write_size 64k; proxy_read_timeout 120; proxy_connect_timeout 120; client_max_body_size 20M; }
2. 针对异常接口添加精确匹配(适合固定接口场景)
如果不想改动原有前缀匹配,可给异常接口单独加精确匹配规则,确保优先命中:
location = /users/api/v1/user { proxy_pass https://$USER_URL/api/v1/user; # 复制上述代理配置 } location = /users/api/v1/role { proxy_pass https://$USER_URL/api/v1/role; # 复制上述代理配置 }
3. 排查前端请求路径
检查Vue项目的publicPath配置,确认请求路径没有被意外改写;同时查看前端请求发送时的实际路径,是否存在自动去斜杠的情况。
验证技巧
在Nginx的根location里添加日志,查看请求的实际路径:
location / { access_log /var/log/nginx/access.log main; # 保留原有try_files等配置 }
通过日志确认请求路径是否符合预期,快速定位匹配问题。
内容的提问来源于stack exchange,提问作者sultan
相关产品推荐
相关产品推荐

