2016-07-24 3 views
1

Я пытаюсь настроить пример компоновки докеров с помощью nginx (работает в контейнере), выходя из 3 контейнеров, запускающих приложение python в uwsgi.Ошибка 404 при доступе с локального хоста: NGINX uWSGI

при попытке nginx через докер ip для контейнера, приложение доступно без каких-либо проблем; однако при попытке получить к нему доступ из URL-адреса хоста (nginx привязан к хосту с использованием порта 9999), используя localhost: 9999 Я могу получить доступ к странице nginx, однако любые URL-адреса приложения или/admin/uri отображаются с ошибкой 404.

Я прошел через множество форумов и ответов Stackoverflow без везения, может кто-то, пожалуйста, помогите мне разрешить это?

Более подробная информация прилагается ниже:

мой файл докер Compose выглядит следующим образом:

version: '2' 
services: 
    nginxlb: 
    build: ./nginx 
    ports: 
     - "9999:80" 
    links: 
     - my-app1:my-app1 
     - my-app2:my-app2 
     - my-app3:my-app3 
    volumes: 
     - ./logs/nginx/:/opt/my-logs/nginx/ 
    my-app1: 
    build: ./my 
    expose: 
     - 8080 
     - 8081 
    volumes: 
     - ./logs/node1:/opt/my-logs/node1/ 
    my-app2: 
    build: ./my 
    volumes: 
     - ./logs/node2/:/opt/my-logs/node2/ 
    expose: 
     - 8080 
     - 8081 
    my-app3: 
    build: ./my 
    volumes: 
     - ./logs/node3:/opt/my-logs/node3 
    expose: 
     - 8080 
     - 8081 

сайт с поддержкой конф для Nginx выглядит следующим образом:

upstream node-app { 
     least_conn; 
     server my-app1:8080; 
     server my-app2:8080; 
     server my-app3:8080; 
} 

server { 
     listen 80 default; 
     server_name _; 
     location/{ 
     proxy_pass http://node-app; 
     include /etc/nginx/uwsgi_params; 
     } 
} 

EDIT это это мой файл Docker для NGINX. Я не внес никаких изменений для файла nginx.conf по умолчанию.

From nginx 

MAINTAINER DevOps 

# Update the container 
RUN apt-get update 

# Create directories and set working directory 
RUN mkdir /opt/myapp/ 
RUN mkdir /opt/myapp/django-static/ 
RUN mkdir /opt/myapp/django-media/ 
RUN mkdir /opt/myapp/webroot/ 
run mkdir -p /opt/myapp-logs/nginx/ 
WORKDIR /opt/myapp/ 

# Copy configs and code to Container 
ADD config/nginx.conf /etc/nginx/nginx.conf 
ADD config/nginx-site.conf /etc/nginx/sites-enabled/nginx.conf 
ADD config/uwsgi_params /etc/nginx/uwsgi_params 

EXPOSE 80 
+0

404 предлагает Nginx не доходит до вашего 'server' Nginx конфигурации блока; возможно, параметры в файле конфигурации nginx по умолчанию переопределяют вашу конфигурацию? Вы пытались его удалить? Если это не поможет, разместите содержимое своего файла nginx/Docker. – rafalmp

+0

Сервер nginx обслуживает содержимое uwsgi при доступе через контейнер nginx ip (полученный через «sudo docker проверит | grep IPAddress». – user2693188

+0

только что добавил мой nginx Dockerfile, я думаю, что я делаю сетевое право докеры с помощью файла компоновки .. – user2693188

ответ

1

Nginx конфигурационный файл для сайта по умолчанию включает в себя линии:

server_name localhost; 

так что конфигурация используется, когда вы идете в http://localhost:9999; дополнительно - nginx не обрабатывает каталог /etc/nginx/sites-enabled и его содержимое; от значения по умолчанию nginx.conf:

include /etc/nginx/conf.d/*.conf; 

Измените Dockerfile - вместо:

ADD config/nginx-site.conf /etc/nginx/sites-enabled/nginx.conf 

использование:

RUN rm /etc/nginx/conf.d/default.conf 
ADD config/nginx-site.conf /etc/nginx/conf.d/nginx.conf 
+0

Отлично, это сработало, Большое вам спасибо – user2693188

Смежные вопросы