Nginx HTTP Ошибка 404 Django Rest Framework

Я пытаюсь установить обратный прокси с помощью Nginx для передачи статических файлов моему webapp внутри контейнера, но терплю неудачу... Проблема в том, что Nginx прекрасно обслуживает статические файлы, когда я захожу на страницу администратора django, но как только я пытаюсь перейти к конечной точке, используя rest framework, я получаю ошибку "HTTP Error 404. Запрашиваемый ресурс не найден." ошибка.

Вот как у меня все устроено:

Мои настройки Nginx:

upstream django {
    server store:27036;
}

server {

    listen 8080;

    location / {
        proxy_pass http://django;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $host;
        proxy_redirect off;
    }

    location /static {
        alias /vol/static;
    }
    

}

Мои настройки docker-compose:

version: "3.9"

services:

  store:
    build:
      context: .
    ports:
      - "27036:27036"

    depends_on:
      - mysql
    environment:
      PYTHONUNBUFFERED: 1
      DJANGO_SETTINGS_MODULE: my_app.settings.prod
      STORE_HOST: ${STORE_HOST}
      STORE_PORT: ${STORE_PORT}
      DATABASE_NAME: ${STORE_DB_NAME}
      DATABASE_HOST: ${STORE_DB_HOST}
      DATABASE_USER: ${STORE_DB_USER}
      DATABASE_PASSWORD: ${STORE_DB_PASSWORD}
      SECRET_KEY: ${SECRET_KEY}
      ALLOWED_HOSTS: ${ALLOWED_HOSTS}
    platform: "linux/amd64"
    restart: on-failure
    volumes:
      - store_data:/app
      # - static:/static
      - static_data:/vol/web

  mysql:
    image: mysql:8.0
    cap_add:
        # suppress log messages from cluttering the shell output
      - SYS_NICE
    command: --default-authentication-plugin=mysql_native_password --mysqlx=0
    ports:
      - 3306:3306
    environment:
      MYSQL_HOST: ${STORE_DB_HOST}
      MYSQL_PORT: ${STORE_DB_PORT}
      MYSQL_DATABASE: ${STORE_DB_NAME}
      MYSQL_ROOT_PASSWORD: ${STORE_DB_PASSWORD}
    platform: "linux/amd64"
    restart: always
    volumes:
      - mysqldata:/var/lib/mysql

  nginx:
    build: ./nginx
    volumes:
      # - static:/static
      - static_data:/vol/static
    ports:
      - "8080:8080"
    depends_on:
      - store   
  
volumes:
  # static:
  static_data:
  mysqldata:
  store_data:

Я понятия не имею, что именно я делаю неправильно или почему ошибка возникает только тогда, когда я пытаюсь получить доступ к конечной точке в api. Стоит упомянуть, что я использую windows

После вашей последней правки вопроса теперь ответ будет таким: вы можете добавить порт к вашему proxy_pass в вашем конфигурационном файле Nginx ... также просто выставьте порт, через который Nginx будет общаться с Django на первом сервисе вашего docker-compose

docker-compose.yml:

version: "3.9"

services:

  django:
    build:
      context: .
    expose:
      - "27036"

    depends_on:
      - mysql
    environment:
      PYTHONUNBUFFERED: 1
      DJANGO_SETTINGS_MODULE: my_app.settings.prod
      STORE_HOST: ${STORE_HOST}
      STORE_PORT: ${STORE_PORT}
      DATABASE_NAME: ${STORE_DB_NAME}
      DATABASE_HOST: ${STORE_DB_HOST}
      DATABASE_USER: ${STORE_DB_USER}
      DATABASE_PASSWORD: ${STORE_DB_PASSWORD}
      SECRET_KEY: ${SECRET_KEY}
      ALLOWED_HOSTS: ${ALLOWED_HOSTS}
    platform: "linux/amd64"
    restart: on-failure
    volumes:
      - store_data:/app
      # - static:/static
      - static_data:/vol/web

  mysql:
    image: mysql:8.0
    cap_add:
        # suppress log messages from cluttering the shell output
      - SYS_NICE
    command: --default-authentication-plugin=mysql_native_password --mysqlx=0
    ports:
      - 3306:3306
    environment:
      MYSQL_HOST: ${STORE_DB_HOST}
      MYSQL_PORT: ${STORE_DB_PORT}
      MYSQL_DATABASE: ${STORE_DB_NAME}
      MYSQL_ROOT_PASSWORD: ${STORE_DB_PASSWORD}
    platform: "linux/amd64"
    restart: always
    volumes:
      - mysqldata:/var/lib/mysql

  nginx:
    build: ./nginx
    volumes:
      # - static:/static
      - static_data:/vol/static
    ports:
      - "8080:8080"
    depends_on:
      - store   
  
  volumes:
    # static:
    static_data:
    mysqldata:
    store_data:

default.conf:

server {

    listen 8080 default_server;
    server_name localhost;

    location / {
        proxy_pass http://django:27036;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $host;
        proxy_redirect off;
    }

    location /static {
        alias /vol/static;
    }
    

}

пример этого вы можете найти здесь https://docs.nginx.com/nginx/admin-guide/web-server/reverse-proxy/

Надеюсь, это работает, и надеюсь, что вы нашли это полезным!

Вернуться на верх