nginx配置api代理无效?

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导致报错?

阅读 2.2k
1 个回答

你这里的错误状态码是502,意思是访问上游有问题,所以应该是 localhost:3011 不通。

日志里面的IP是172.17.0.1,所以怀疑你的nginx是在容器里面运行的。如果nginx在容器中,在nginx容器内使用localhost只能访问容器内的127.0.0.1。

如果3011这个端口是在容器外,那应该是访问不通的。

你可以试试把localhost:3011这里改成docker宿主机的IP端口。或者nginx容器改为使用host网络。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Microsoft
子站问答
访问
宣传栏