2

thanks for reading my question.

I'm trying to serve multiples Django sites on their own folders in one server without domain (only IP address) using Gunicorn and Nginx. Something like that:

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

I have tested a lot of settings but I can't make it work. When i tried to load URL 20.20.20.02/demos/myapp1/ i get a 404 not found error :(

Example one site 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/;
    }
}

What is wrong with my myapp1.conf file?

For the record, if i change "location /demos/myapp1/" to "location /" my first app works, but the others apps still not working.

Thanks in advance.

Edit 1:

Checking my problem.. For now i found a solution. Rewrite rule:

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

Is a good solution? My Django apps broken their urls :(

Sommer
  • 1,328
  • 2
  • 10
  • 20

1 Answers1

3

Well, reading about Nginx, i solved my problem in 4 steps:

  1. Using rewrite rule like my edit post.
  2. Listen each app in diferent port, like this:

    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. Reload Nginx

    sudo service nginx restart
    
  4. Test it:

    http://20.20.20.20:81/myapp1/
    http://20.20.20.20:82/myapp2/
    http://20.20.20.20:83/myapp3/
    

If you have a better way to solve my problem, please let me know!

Sommer
  • 1,328
  • 2
  • 10
  • 20