Docker-Nginx неожиданные перенаправления (304) - PullRequest
0 голосов
/ 08 января 2019

У меня проблемы с docker-compose и nginx. Во-первых, у меня есть это docker-compose.yml:

services:
  nginx:
    build: ./nginx
    ports:
      - '8080:80'
    depends_on:
      - web
      - api

  web:
    build: ./web
    depends_on:
      - api

  api:
    build: ./api

И web (порт 3000), и api (порт 8000) являются серверами экспресс-доставки, которые возвращают WEB и API соответственно. Теперь внутри ./nginx:

# Dockefile

FROM nginx:alpine

COPY ["default.conf", "/etc/nginx/conf.d/"]

EXPOSE 80





# default.conf

server {
  location / {
    proxy_pass  http://web:3000;
  }

  location /api {
    proxy_pass  http://api:8000;
  }
}

Теперь, когда я иду на http://localhost:8080,, я получаю WEB , но когда я иду на http://localhost:8080/api,, он перенаправляется на http://localhost:1337/api/, и я ничего не получаю ( кстати, выдает ошибку 304)

Однако, когда я пишу этот default.conf (вставьте api в /)

# default.conf

server {
  location / {
    proxy_pass  http://api:8000;
  }

  location /api {
    proxy_pass  http://web:3000;
  }
}

Я получаю тот же результат, но в / я получаю API , поэтому оба сервера работают.

1 Ответ

0 голосов
/ 08 января 2019

Я не знаю, помогает ли это вам или нет. Я использую образ докера nginx прямо в моем docker-compose.

например.

docker-compose.yml

version: '3'
services:
  jobsaf-server:
    build: 
      context: .
      dockerfile: Dockerfile.production
    container_name: jobsaf-server
    ports:
     - "3000:3000"
     - "5858:5858"
     - "35729:35729"
     - "6379:6379"
    environment:
     - NODE_ENV=production
    networks:
      - front-tier
      - back-tier
    depends_on:
      - "redis"
      - "mongo"
    links:
      - mongo
      - redis
    volumes:
     - ./server:/var/www/app/jobsaf-website/server
  nginx:
    image: nginx:stable
    depends_on:
      - jobsaf-server
    links:
      - jobsaf-server
    volumes:
      - ./nginx/default.conf:/etc/nginx/conf.d/default.conf  
    ports:
     - "0.0.0.0:80:80"
  mongo:
    image: mongo:latest
    container_name: mongo
    volumes:
      - "db-data:/data/db"
    environment: 
      - MONGO_INITDB_ROOT_USERNAME=${DB_USER}
      - MONGO_INITDB_ROOT_PASSWORD=${DB_PASS}
      - MONGO_INITDB_DATABASE=admin
    ports:
      - "0.0.0.0:27017:27017"
    networks:
      - back-tier
  redis:
    image: redis
    container_name: redis
    networks:
      - back-tier   
volumes:
  db-data:
    # - /data/db
networks:
  front-tier:
  back-tier:
...