2016-07-24 201 views
1

我正在尝试配置一个docker组合示例,其中包含运行uwsgi中的python应用程序的3个容器的nginx(运行在容器中)。当从本地主机访问时出现404错误:NGINX uWSGI

当通过docker ip为容器尝试nginx时,该应用程序无需任何问题即可访问;但是,当试图从主机url(nginx绑定到使用端口9999的主机)访问它时,使用localhost:9999我可以访问nginx页面,但是任何应用程序url或/ admin/uri都显示404错误。

我已经经历了吨论坛和Stackoverflow的答案没有任何运气,有人可以帮我解决这个问题吗?下面附

的更多信息:

我的搬运工撰写文件看起来象下面这样:对于nginx的

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 

启用站点的conf如下所示:

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; 
     } 
} 

编辑这是我的NGINX的Docker文件我没有对默认的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/Dockerfile的内容。 – rafalmp

+0

nginx服务器在通过nginx容器ip访问时提供uwsgi内容(通过'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

相关问题