server {
listen 80;
location / {
root /usr/share/nginx/html/dist;
index index.html;
try_files $uri $uri/ /index.html;
}
location ^~ /api/ {
proxy_pass http://localhost:3011/;
}
}
前端代码
void fetch('/api/user/info')
.then((res) => {
console.log(res);
})
.catch((e) => console.log(e));
nginx的日志
172.17.0.1 - - [09/Aug/2023:14:28:27 +0000] "GET /api/user/info HTTP/1.1" 502 559 "http://localhost:81/login" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36" "-"
为什么/api开头的请求没有走成功代理呢?期望接口会调用http://localhost:3011/api/user/info,现在没代理成功,依然走的是http:localhost:80/api/user/info导致报错?
你这里的错误状态码是502,意思是访问上游有问题,所以应该是 localhost:3011 不通。
日志里面的IP是172.17.0.1,所以怀疑你的nginx是在容器里面运行的。如果nginx在容器中,在nginx容器内使用localhost只能访问容器内的127.0.0.1。
如果3011这个端口是在容器外,那应该是访问不通的。
你可以试试把localhost:3011这里改成docker宿主机的IP端口。或者nginx容器改为使用host网络。