使用docker容器时找不到404 nginx uwsgi django

时间:2017-10-17 15:45:57

标签: django docker nginx reverse-proxy uwsgi

我有3个泊坞容器。

一个容器有Django,uwsgi和nginx作为webserver。我配置内部暴露80端口。然后在我的localhost中运行8800:80映射。

第二个容器有另一个带有uwsgi和nginx的Django项目,类似配置并在我的localhost中使用8801:80映射运行。

所以现在我可以从具有不同端口的容器访问不同的Django应用程序。

localhost:8800 - > APP1

localhost:8801 - > APP2

现在我用nginx创建了第三个容器,目的是进行反向代理。

所以我的第三个容器只有nginx配置。有这样的事情:

error_log /var/log/nginx/error.log;

events {
    worker_connections 1024;
}



http {
        sendfile on;

        gzip              on;
        gzip_http_version 1.0;
        gzip_proxied      any;
        gzip_min_length   500;
        gzip_disable      "MSIE [1-6]\.";
        gzip_types        text/plain text/xml text/css
                          text/comma-separated-values
                          text/javascript
                          application/x-javascript
                          application/atom+xml;

        upstream app1{
            server my_machine_ip:8800;
        }

        upstream app2{
            server my_machine_ip:8801;
        }

        access_log /var/log/nginx/access.log;
        server {
              listen 0.0.0.0:80;

              location /firstapp/ {
                    proxy_pass http://app1/;
                    proxy_set_header   Host $host;
                    proxy_set_header   X-Real-IP $remote_addr;
                    proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
                    proxy_set_header   X-Forwarded-Host $server_name;
              }

              location /anotherapp/ {
                    proxy_pass http://app2/;
                    proxy_set_header   Host $host;
                    proxy_set_header   X-Real-IP $remote_addr;
                    proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
                    proxy_set_header   X-Forwarded-Host $server_name;
              }
        }
}

再次,80端口的容器暴露,我运行端口8888:80映射。

然后我遇到了一些问题: 当我键入localhost:8888 / firstapp /时,它显示404未找到。但是URL更改为localhost:8888 / base / auth / login /?next = /它是app1的登录页面URL。当我使用localhost卷曲时,它实际上给我的反馈它正在进行重定向。但浏览器只返回404页面,我无法登录该项目。但是,当我输入localhost:8800时,我可以看到登录页面并完美登录。看起来nginx反向代理需要知道静态文件才能正常运行。所以我的问题是:

nginx反向代理如何处理请求?我的理解是我的当前配置如下所示:

网络客户端< - > nginx反向代理< - > nginx webserver< - > uwsgi< - > Django项目

我对

的测试

网络客户端< - > nginx webserver< - > uwsgi< - > Django项目

这条链的链接完全没问题。但是当我在链中添加了nginx反向代理时,我得到了404错误。

到目前为止我对这个404错误的理解,我想知道nginx反向代理是否需要知道静态文件的位置以便正常运行。或者我在配置中遗漏了一些东西或理解。

我的目标是在同一台机器上使用make不同的Django项目,具有相同的配置(端口80,以便不同的项目组可以遵循相同的模式),并使用反向代理键入不同的URI来访问不同的项目。

HTTP/1.1 302 Found
Server: nginx/1.13.5
Date: Tue, 17 Oct 2017 14:39:42 GMT
Content-Type: text/html; charset=utf-8
Content-Length: 0
Connection: keep-alive
X-Frame-Options: DENY
Location: /base/auth/login/?next=/
Vary: Cookie

0 个答案:

没有答案