Простой прокси Nginx не работает в Docker - PullRequest
0 голосов
/ 18 декабря 2018

У меня есть бэкэнд и внешний интерфейс, которые работают в двух контейнерах в Docker, и оба доступны из моего браузера через их порты:

localhost:8081 # frontend
localhost:8082 # backend

Теперь я хочу использовать сервер Nginx, который получаетвесь трафик (порт 80) и перенаправления:

localhost -> to frontend
localhost/api -> to the backend

Попробовав почти все в файле nginx.conf (ничего не работает), я обнаружил в SO вопросе, что файл, который я должен изменить:

/ etc / nginx / sites-enabled / default

Поэтому я пытаюсь изменить его, и теперь nginx запускается.Под прогонами я имею в виду, что по крайней мере, когда я получаю доступ к localhost, отображается страница приветствия nginx.Тем не менее, я все еще не могу сделать трафик моего маршрута nginx (через прокси, не перенаправлять).

Прямо сейчас мой файл docker-compose выглядит следующим образом (фрагмент для nginx плюс эти две службы):

  nginx:
    image: nginx:latest
    ports:
      - 80:80
    volumes:
      - ./Dockerfiles/nginx/default:/etc/nginx/sites-enabled/default
    links:
      - frontend
      - backend
    depends_on:
      - frontend
      - backend
  frontend:
    build: ./Dockerfiles/frontend
    volumes:
      - ./Dockerfiles/frontend/www/src:/usr/src/app
      - ./logs/frontend/httpd:/var/logs/httpd
    ports:
      - "8081:3000"
    links:
      - backend
  backend:
    build: ./Dockerfiles/backend
    volumes:
      - ./Dockerfiles/backend/www:/var/www/html
      - ./logs/backend/httpd:/var/logs/httpd
    ports:
      - "8082:80"
    links:
      - "database"
      - "redis"
    depends_on:
      - database
      - redis

Мой default файл, как было сказано выше, для конфигурации nginx:

server {
        listen 80 default_server;

        # Add index.php to the list if you are using PHP
        index index.html index.htm index.php index.nginx-debian.html;

        server_name _;

        location / {
                # First attempt to serve request as file, then
                # as directory, then fall back to displaying a 404.
                #try_files $uri $uri/ =404;
            proxy_pass http://frontend:8081/;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection 'upgrade';
            proxy_set_header Host $host;
            proxy_cache_bypass $http_upgrade;
        }

        location /api {
            proxy_pass http://backend:8082/public/;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection 'upgrade';
            proxy_set_header Host $host;
            proxy_cache_bypass $http_upgrade;
        }

}

И когда я пытаюсь получить доступ к своему /api URL-адресу, например, ошибка, которую nginx сообщает моемуэто:

nginx_1 |2018/12/17 21:44:09 [ошибка] 6 # 6: * 1 open () "/ usr / share / nginx / html / api" не удалось (2: нет такого файла или каталога), клиент: 172.20.0.1, сервер: localhost, запрос: "GET / api HTTP / 1.1", хост: "localhost"

Кажется, что он пытается извлечь файл из локальной файловой системы (что-то, чего я не могу понять, учитывая файлы конф.).

Любое руководство, идея или совет?

1 Ответ

0 голосов
/ 18 декабря 2018

Поместите конфигурацию вашего сервера в: /etc/nginx/conf.d/default.conf, не для сайтов с поддержкой.

Документы: https://hub.docker.com/_/nginx/

Кроме того, позже вы столкнетесь с другой проблемой.Измените http://frontend:8081/; на http://frontend:3000/;.Поскольку nginx напрямую связывается с контейнером внешнего интерфейса, а не с хостом.

...