Nginx Gunicorn一个ip多个django网站在文件夹中

时间:2017-11-26 00:04:20

标签: django nginx ip gunicorn subdirectory

感谢您阅读我的问题。

我尝试使用Gunicorn和Nginx在一个没有域(仅IP地址)的服务器上为自己的文件夹上的多个Django站点提供服务。这样的事情:

20.20.20.20/demos/myapp1/ --> Django app
20.20.20.20/demos/myapp2/ --> Django app
20.20.20.20/demos/myapp3/ --> Django app

我测试了很多设置,但我无法使其正常工作。当我试图加载URL 20.20.20.02/demos/myapp1/我得到404未找到错误:(

示例一网站nginx conf:

upstream app1_server {
    server unix:/webapps/myapp1/run/gunicorn.sock fail_timeout=0;
}

server {
    listen 80;
    server_name 20.20.20.20;

    keepalive_timeout 5;
    client_max_body_size 4G;

    location /static/ {
        alias   /webapps/myapp1/static/;
    }

    location /media/ {
        alias   /webapps/myapp1/media/;
    }

    location /demos/myapp1/ {
        try_files $uri @proxy_to_app;
    }

    location @proxy_to_app {
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_redirect off;
        proxy_pass http://app1_server;
    }

    # Error pages
    error_page 500 502 503 504 /500.html;
    location = /500.html {
        root /webapps/myapp1/static/;
    }
}

我的myapp1.conf文件出了什么问题?

为了记录,如果我改变" location / demos / myapp1 /"到"位置/"我的第一个应用程序正常运行,但其他应用程序仍无效。

提前致谢。

修改1:

检查我的问题..现在我找到了一个解决方案。重写规则:

location /myapp1/ {
    rewrite ^/myapp1(.*) $1 break;
    try_files $uri @proxy_to_app;
}

是一个很好的解决方案吗?我的Django应用程序打破了他们的网址:(

1 个答案:

答案 0 :(得分:2)

好了,读到Nginx,我分四步解决了我的问题:

  1. 使用重写规则,例如我的编辑帖子。
  2. 在不同的端口收听每个应用,如下所示:

    server {
        listen 81;
        server_name 20.20.20.20;
    
        location /demos/myapp1/ {
            rewrite ^/demos/myapp1(.*) $1 break;
            try_files $uri @proxy_to_app;
        }
       ...
    }
    
    server {
         listen 82;
         server_name 20.20.20.20;
         location /demos/myapp2/ {
             rewrite ^/demos/myapp2(.*) $1 break;
             try_files $uri @proxy_to_app;
         }
        ...
    }
    
    
    server {
        listen 83;
        server_name 20.20.20.20;
        location /demos/myapp3/ {
            rewrite ^/demos/myapp3(.*) $1 break;
            try_files $uri @proxy_to_app;
        }
        ...
    }
    
  3. 重新加载Nginx

    sudo service nginx restart
    
  4. 测试一下:

    http://20.20.20.20:81/myapp1/
    http://20.20.20.20:82/myapp2/
    http://20.20.20.20:83/myapp3/
    
  5. 如果您有更好的方法来解决我的问题,请告诉我!