使用 NGINX (Docker) 将 /api 请求重定向到端口 3000

1 nginx

我想使用 NGINX 将对 /api 的请求重定向到在 localhost:3000 上运行的节点应用程序

我正在尝试使用 proxy_pass 重定向请求

server {
   listen 80;
   server_name  localhost;

   root /var/www/mydomain/html;
   index index.html index.htm;

   location /api {
       proxy_pass http://127.0.0.1:3000/;
   }
}
Run Code Online (Sandbox Code Playgroud)

如果我在浏览器中访问本地主机,我会看到前端应用程序,所以这是正确的。

如果我点击http://127.0.0.1:3000(或 localhost:3000),我会收到来自节点 API 的响应,所以这是正确的。

但是当我尝试访问 localhost/api 时出现以下错误:

[错误] 6#6:*3 连接()失败(111:连接被拒绝),同时连接 > 到上游,客户端:172.18.0.1,服务器:localhost,请求:“GET /api >HTTP/1.1”,上游:“ http://127.0.0.1:3000/ ”,主机:“localhost”

编辑:

我正在使用 docker-compose 来管理服务:

services:

  nginx:
    container_name: nginx-local
    build:
      context: .
      dockerfile: ./nginx.dev.dockerfile
    volumes:
      ...
    ports: 
      - '80:80'
    networks:
      - local-network

  node:
    container_name: node-api
    build:
      context: ./api
      dockerfile: .docker/node.dockerfile
    ports: 
      - '3000:3000'
    networks:
      - local-network
Run Code Online (Sandbox Code Playgroud)

Sha*_* C. 5

根据文件,docker-compose配置nginx需要更改为

server {
    listen 80;
    server_name  localhost;

    root /var/www/mydomain/html;
    index index.html index.htm;

    location /api {
        proxy_pass http://node-api:3000/;
    }
}
Run Code Online (Sandbox Code Playgroud)

这是由于docker节点应用程序的单独映像所致。所以你需要使用代理通行证来指向正确的位置。