Serving multiple Django applications with Nginx and Gunicorn under same domain










2















Now I have one Django project in one domain. I want to server three Django projects under one domain separated by / .For example: www.domain.com/firstone/, www.domain.com/secondone/ etc. How to configure nGinx to serve multiple Django-projects under one domain? How configure static-files serving in this case?



My current nGinx config is:



server 
listen 80;
listen [::]:80;
server_name domain.com www.domain.com;
return 301 https://$server_name$request_uri;


server {
listen 443 ssl;
server_name domain.com www.domain.com;

ssl_certificate /etc/nginx/ssl/Certificate.crt;
ssl_certificate_key /etc/nginx/ssl/Certificate.key;

ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;

ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;


root /home/admin/web/project;

location /static
alias /home/admin/web/project/static;

location /media
alias /home/admin/web/project/media;

location /assets
alias /home/admin/web/project/assets;


location /
proxy_pass_header Server;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Scheme $scheme;
proxy_set_header X-Forwarded-Proto https;
proxy_connect_timeout 75s;
proxy_read_timeout 300s;
proxy_pass http://127.0.0.1:8000/;
client_max_body_size 100M;

# Proxies
# location /first
# proxy_pass http://127.0.0.1:8001/;
#
#
# location /second
# proxy_pass http://127.0.0.1:8002/;
#

error_page 500 502 503 504 /media/50x.html;









share|improve this question


























    2















    Now I have one Django project in one domain. I want to server three Django projects under one domain separated by / .For example: www.domain.com/firstone/, www.domain.com/secondone/ etc. How to configure nGinx to serve multiple Django-projects under one domain? How configure static-files serving in this case?



    My current nGinx config is:



    server 
    listen 80;
    listen [::]:80;
    server_name domain.com www.domain.com;
    return 301 https://$server_name$request_uri;


    server {
    listen 443 ssl;
    server_name domain.com www.domain.com;

    ssl_certificate /etc/nginx/ssl/Certificate.crt;
    ssl_certificate_key /etc/nginx/ssl/Certificate.key;

    ssl_session_cache shared:SSL:1m;
    ssl_session_timeout 5m;

    ssl_ciphers HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers on;


    root /home/admin/web/project;

    location /static
    alias /home/admin/web/project/static;

    location /media
    alias /home/admin/web/project/media;

    location /assets
    alias /home/admin/web/project/assets;


    location /
    proxy_pass_header Server;
    proxy_set_header Host $http_host;
    proxy_redirect off;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Scheme $scheme;
    proxy_set_header X-Forwarded-Proto https;
    proxy_connect_timeout 75s;
    proxy_read_timeout 300s;
    proxy_pass http://127.0.0.1:8000/;
    client_max_body_size 100M;

    # Proxies
    # location /first
    # proxy_pass http://127.0.0.1:8001/;
    #
    #
    # location /second
    # proxy_pass http://127.0.0.1:8002/;
    #

    error_page 500 502 503 504 /media/50x.html;









    share|improve this question
























      2












      2








      2


      1






      Now I have one Django project in one domain. I want to server three Django projects under one domain separated by / .For example: www.domain.com/firstone/, www.domain.com/secondone/ etc. How to configure nGinx to serve multiple Django-projects under one domain? How configure static-files serving in this case?



      My current nGinx config is:



      server 
      listen 80;
      listen [::]:80;
      server_name domain.com www.domain.com;
      return 301 https://$server_name$request_uri;


      server {
      listen 443 ssl;
      server_name domain.com www.domain.com;

      ssl_certificate /etc/nginx/ssl/Certificate.crt;
      ssl_certificate_key /etc/nginx/ssl/Certificate.key;

      ssl_session_cache shared:SSL:1m;
      ssl_session_timeout 5m;

      ssl_ciphers HIGH:!aNULL:!MD5;
      ssl_prefer_server_ciphers on;


      root /home/admin/web/project;

      location /static
      alias /home/admin/web/project/static;

      location /media
      alias /home/admin/web/project/media;

      location /assets
      alias /home/admin/web/project/assets;


      location /
      proxy_pass_header Server;
      proxy_set_header Host $http_host;
      proxy_redirect off;
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Scheme $scheme;
      proxy_set_header X-Forwarded-Proto https;
      proxy_connect_timeout 75s;
      proxy_read_timeout 300s;
      proxy_pass http://127.0.0.1:8000/;
      client_max_body_size 100M;

      # Proxies
      # location /first
      # proxy_pass http://127.0.0.1:8001/;
      #
      #
      # location /second
      # proxy_pass http://127.0.0.1:8002/;
      #

      error_page 500 502 503 504 /media/50x.html;









      share|improve this question














      Now I have one Django project in one domain. I want to server three Django projects under one domain separated by / .For example: www.domain.com/firstone/, www.domain.com/secondone/ etc. How to configure nGinx to serve multiple Django-projects under one domain? How configure static-files serving in this case?



      My current nGinx config is:



      server 
      listen 80;
      listen [::]:80;
      server_name domain.com www.domain.com;
      return 301 https://$server_name$request_uri;


      server {
      listen 443 ssl;
      server_name domain.com www.domain.com;

      ssl_certificate /etc/nginx/ssl/Certificate.crt;
      ssl_certificate_key /etc/nginx/ssl/Certificate.key;

      ssl_session_cache shared:SSL:1m;
      ssl_session_timeout 5m;

      ssl_ciphers HIGH:!aNULL:!MD5;
      ssl_prefer_server_ciphers on;


      root /home/admin/web/project;

      location /static
      alias /home/admin/web/project/static;

      location /media
      alias /home/admin/web/project/media;

      location /assets
      alias /home/admin/web/project/assets;


      location /
      proxy_pass_header Server;
      proxy_set_header Host $http_host;
      proxy_redirect off;
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Scheme $scheme;
      proxy_set_header X-Forwarded-Proto https;
      proxy_connect_timeout 75s;
      proxy_read_timeout 300s;
      proxy_pass http://127.0.0.1:8000/;
      client_max_body_size 100M;

      # Proxies
      # location /first
      # proxy_pass http://127.0.0.1:8001/;
      #
      #
      # location /second
      # proxy_pass http://127.0.0.1:8002/;
      #

      error_page 500 502 503 504 /media/50x.html;






      django nginx gunicorn






      share|improve this question













      share|improve this question











      share|improve this question




      share|improve this question










      asked Nov 11 '18 at 8:44









      RikoRiko

      5618




      5618






















          3 Answers
          3






          active

          oldest

          votes


















          2














          You have to run your projects on different ports like firsrone on 8000 and secondone on 8001.
          Then in nginx conf, in place of location /, you have to write location /firstone/ and proxy pass this to port 8000 and then write same location object for second one as location /secondone/ and proxy pass it to port 8001.



          For static files and media, you have to make them available as /firstone/static and same for secondone.
          Other way is to specify MEDIA_ROOT and STATIC_ROOT same for both the projects.






          share|improve this answer






























            0














            What prof.phython said should be correct. I'm not an expert on this but I saw a similar situation with our server as well. Hope the shared nginx.conf file helps!



            server 
            listen 80;
            listen [::]:80;
            server_name alicebot.tech;
            return 301 https://web.alicebot.tech$request_uri;


            server
            listen 80;
            listen [::]:80;
            server_name web.alicebot.tech;
            return 301 https://web.alicebot.tech$request_uri;

            server
            listen 443 ssl;
            server_name alicebot.tech;
            ssl_certificate /etc/ssl/alicebot_tech_cert_chain.crt;
            ssl_certificate_key /etc/ssl/alicebot.key;

            location /static/
            expires 1M;
            access_log off;
            add_header Cache-Control "public";
            proxy_ignore_headers "Set-Cookie";


            location /
            include proxy_params;
            proxy_pass http://unix:/var/www/html/alice/alice.sock;
            proxy_set_header X-Forwarded-Host $server_name;
            proxy_set_header X-Real-IP $remote_addr;
            add_header P3P 'CP="ALL DSP COR PSAa PSDa OUR NOR ONL UNI COM NAV"';



            server
            listen 443 ssl;
            server_name web.alicebot.tech;
            ssl_certificate /etc/letsencrypt/live/web.alicebot.tech/fullchain.pem; # managed by Certbot
            ssl_certificate_key /etc/letsencrypt/live/web.alicebot.tech/privkey.pem; # managed by Certbot


            location /static/
            autoindex on;
            alias /var/www/html/static/;
            expires 1M;
            access_log off;
            add_header Cache-Control "public";
            proxy_ignore_headers "Set-Cookie";


            location /
            include proxy_params;
            proxy_pass http://unix:/var/www/alice_v2/alice/alice.sock;
            proxy_set_header X-Forwarded-Host $server_name;
            proxy_set_header X-Real-IP $remote_addr;
            add_header P3P 'CP="ALL DSP COR PSAa PSDa OUR NOR ONL UNI COM NAV"';



            server
            listen 8000 ssl;
            listen [::]:8000 ssl;
            server_name alicebot.tech;
            ssl_certificate /etc/ssl/alicebot_tech_cert_chain.crt;
            ssl_certificate_key /etc/ssl/alicebot.key;

            location /static/
            autoindex on;
            alias /var/www/alice_v2/static/;
            expires 1M;
            access_log off;
            add_header Cache-Control "public";
            proxy_ignore_headers "Set-Cookie";


            location /
            include proxy_params;
            proxy_pass http://unix:/var/www/alice_v2/alice/alice.sock;




            As you can see we had different domain names here, which you wouldn't be needing. So you'll need to change the server names inside the server ...






            share|improve this answer























            • Thx! But this config for subdomains

              – Riko
              Nov 11 '18 at 15:26


















            0














            As @prof.phython correctly states, you'll need to run a separate gunicorn process for each of the apps. This results in you having each app running on a separate port.



            Next create a separate upstream block, under http for each of these app servers:



             upstream app1 
            # fail_timeout=0 means we always retry an upstream even if it failed
            # to return a good HTTP response

            # for UNIX domain socket setups
            #server unix:/tmp/gunicorn.sock fail_timeout=0;

            # for a TCP configuration
            server 127.0.0.1:9000 fail_timeout=0;



            Obviously change the title, and port number for each upstream block accordingly.



            Then, under your http->server block define the following for each:



            location @app1_proxy 
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
            proxy_set_header Host $http_host;
            # we don't want nginx trying to do something clever with
            # redirects, we set the Host: header above already.
            proxy_redirect off;
            proxy_pass http://app1;



            Make sure the last line there, points at what you called the upstream block (app1) and @app1_proxy should be specific to that app also.



            Finally within the http->server block, use the following code to map a URL to the app server:



            location /any/subpath 
            # checks for static file, if not found proxy to app
            try_files $uri @app1_proxy;






            share|improve this answer






















              Your Answer






              StackExchange.ifUsing("editor", function ()
              StackExchange.using("externalEditor", function ()
              StackExchange.using("snippets", function ()
              StackExchange.snippets.init();
              );
              );
              , "code-snippets");

              StackExchange.ready(function()
              var channelOptions =
              tags: "".split(" "),
              id: "1"
              ;
              initTagRenderer("".split(" "), "".split(" "), channelOptions);

              StackExchange.using("externalEditor", function()
              // Have to fire editor after snippets, if snippets enabled
              if (StackExchange.settings.snippets.snippetsEnabled)
              StackExchange.using("snippets", function()
              createEditor();
              );

              else
              createEditor();

              );

              function createEditor()
              StackExchange.prepareEditor(
              heartbeatType: 'answer',
              autoActivateHeartbeat: false,
              convertImagesToLinks: true,
              noModals: true,
              showLowRepImageUploadWarning: true,
              reputationToPostImages: 10,
              bindNavPrevention: true,
              postfix: "",
              imageUploader:
              brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
              contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
              allowUrls: true
              ,
              onDemand: true,
              discardSelector: ".discard-answer"
              ,immediatelyShowMarkdownHelp:true
              );



              );













              draft saved

              draft discarded


















              StackExchange.ready(
              function ()
              StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53247115%2fserving-multiple-django-applications-with-nginx-and-gunicorn-under-same-domain%23new-answer', 'question_page');

              );

              Post as a guest















              Required, but never shown

























              3 Answers
              3






              active

              oldest

              votes








              3 Answers
              3






              active

              oldest

              votes









              active

              oldest

              votes






              active

              oldest

              votes









              2














              You have to run your projects on different ports like firsrone on 8000 and secondone on 8001.
              Then in nginx conf, in place of location /, you have to write location /firstone/ and proxy pass this to port 8000 and then write same location object for second one as location /secondone/ and proxy pass it to port 8001.



              For static files and media, you have to make them available as /firstone/static and same for secondone.
              Other way is to specify MEDIA_ROOT and STATIC_ROOT same for both the projects.






              share|improve this answer



























                2














                You have to run your projects on different ports like firsrone on 8000 and secondone on 8001.
                Then in nginx conf, in place of location /, you have to write location /firstone/ and proxy pass this to port 8000 and then write same location object for second one as location /secondone/ and proxy pass it to port 8001.



                For static files and media, you have to make them available as /firstone/static and same for secondone.
                Other way is to specify MEDIA_ROOT and STATIC_ROOT same for both the projects.






                share|improve this answer

























                  2












                  2








                  2







                  You have to run your projects on different ports like firsrone on 8000 and secondone on 8001.
                  Then in nginx conf, in place of location /, you have to write location /firstone/ and proxy pass this to port 8000 and then write same location object for second one as location /secondone/ and proxy pass it to port 8001.



                  For static files and media, you have to make them available as /firstone/static and same for secondone.
                  Other way is to specify MEDIA_ROOT and STATIC_ROOT same for both the projects.






                  share|improve this answer













                  You have to run your projects on different ports like firsrone on 8000 and secondone on 8001.
                  Then in nginx conf, in place of location /, you have to write location /firstone/ and proxy pass this to port 8000 and then write same location object for second one as location /secondone/ and proxy pass it to port 8001.



                  For static files and media, you have to make them available as /firstone/static and same for secondone.
                  Other way is to specify MEDIA_ROOT and STATIC_ROOT same for both the projects.







                  share|improve this answer












                  share|improve this answer



                  share|improve this answer










                  answered Nov 11 '18 at 10:02









                  prof.phythonprof.phython

                  887




                  887























                      0














                      What prof.phython said should be correct. I'm not an expert on this but I saw a similar situation with our server as well. Hope the shared nginx.conf file helps!



                      server 
                      listen 80;
                      listen [::]:80;
                      server_name alicebot.tech;
                      return 301 https://web.alicebot.tech$request_uri;


                      server
                      listen 80;
                      listen [::]:80;
                      server_name web.alicebot.tech;
                      return 301 https://web.alicebot.tech$request_uri;

                      server
                      listen 443 ssl;
                      server_name alicebot.tech;
                      ssl_certificate /etc/ssl/alicebot_tech_cert_chain.crt;
                      ssl_certificate_key /etc/ssl/alicebot.key;

                      location /static/
                      expires 1M;
                      access_log off;
                      add_header Cache-Control "public";
                      proxy_ignore_headers "Set-Cookie";


                      location /
                      include proxy_params;
                      proxy_pass http://unix:/var/www/html/alice/alice.sock;
                      proxy_set_header X-Forwarded-Host $server_name;
                      proxy_set_header X-Real-IP $remote_addr;
                      add_header P3P 'CP="ALL DSP COR PSAa PSDa OUR NOR ONL UNI COM NAV"';



                      server
                      listen 443 ssl;
                      server_name web.alicebot.tech;
                      ssl_certificate /etc/letsencrypt/live/web.alicebot.tech/fullchain.pem; # managed by Certbot
                      ssl_certificate_key /etc/letsencrypt/live/web.alicebot.tech/privkey.pem; # managed by Certbot


                      location /static/
                      autoindex on;
                      alias /var/www/html/static/;
                      expires 1M;
                      access_log off;
                      add_header Cache-Control "public";
                      proxy_ignore_headers "Set-Cookie";


                      location /
                      include proxy_params;
                      proxy_pass http://unix:/var/www/alice_v2/alice/alice.sock;
                      proxy_set_header X-Forwarded-Host $server_name;
                      proxy_set_header X-Real-IP $remote_addr;
                      add_header P3P 'CP="ALL DSP COR PSAa PSDa OUR NOR ONL UNI COM NAV"';



                      server
                      listen 8000 ssl;
                      listen [::]:8000 ssl;
                      server_name alicebot.tech;
                      ssl_certificate /etc/ssl/alicebot_tech_cert_chain.crt;
                      ssl_certificate_key /etc/ssl/alicebot.key;

                      location /static/
                      autoindex on;
                      alias /var/www/alice_v2/static/;
                      expires 1M;
                      access_log off;
                      add_header Cache-Control "public";
                      proxy_ignore_headers "Set-Cookie";


                      location /
                      include proxy_params;
                      proxy_pass http://unix:/var/www/alice_v2/alice/alice.sock;




                      As you can see we had different domain names here, which you wouldn't be needing. So you'll need to change the server names inside the server ...






                      share|improve this answer























                      • Thx! But this config for subdomains

                        – Riko
                        Nov 11 '18 at 15:26















                      0














                      What prof.phython said should be correct. I'm not an expert on this but I saw a similar situation with our server as well. Hope the shared nginx.conf file helps!



                      server 
                      listen 80;
                      listen [::]:80;
                      server_name alicebot.tech;
                      return 301 https://web.alicebot.tech$request_uri;


                      server
                      listen 80;
                      listen [::]:80;
                      server_name web.alicebot.tech;
                      return 301 https://web.alicebot.tech$request_uri;

                      server
                      listen 443 ssl;
                      server_name alicebot.tech;
                      ssl_certificate /etc/ssl/alicebot_tech_cert_chain.crt;
                      ssl_certificate_key /etc/ssl/alicebot.key;

                      location /static/
                      expires 1M;
                      access_log off;
                      add_header Cache-Control "public";
                      proxy_ignore_headers "Set-Cookie";


                      location /
                      include proxy_params;
                      proxy_pass http://unix:/var/www/html/alice/alice.sock;
                      proxy_set_header X-Forwarded-Host $server_name;
                      proxy_set_header X-Real-IP $remote_addr;
                      add_header P3P 'CP="ALL DSP COR PSAa PSDa OUR NOR ONL UNI COM NAV"';



                      server
                      listen 443 ssl;
                      server_name web.alicebot.tech;
                      ssl_certificate /etc/letsencrypt/live/web.alicebot.tech/fullchain.pem; # managed by Certbot
                      ssl_certificate_key /etc/letsencrypt/live/web.alicebot.tech/privkey.pem; # managed by Certbot


                      location /static/
                      autoindex on;
                      alias /var/www/html/static/;
                      expires 1M;
                      access_log off;
                      add_header Cache-Control "public";
                      proxy_ignore_headers "Set-Cookie";


                      location /
                      include proxy_params;
                      proxy_pass http://unix:/var/www/alice_v2/alice/alice.sock;
                      proxy_set_header X-Forwarded-Host $server_name;
                      proxy_set_header X-Real-IP $remote_addr;
                      add_header P3P 'CP="ALL DSP COR PSAa PSDa OUR NOR ONL UNI COM NAV"';



                      server
                      listen 8000 ssl;
                      listen [::]:8000 ssl;
                      server_name alicebot.tech;
                      ssl_certificate /etc/ssl/alicebot_tech_cert_chain.crt;
                      ssl_certificate_key /etc/ssl/alicebot.key;

                      location /static/
                      autoindex on;
                      alias /var/www/alice_v2/static/;
                      expires 1M;
                      access_log off;
                      add_header Cache-Control "public";
                      proxy_ignore_headers "Set-Cookie";


                      location /
                      include proxy_params;
                      proxy_pass http://unix:/var/www/alice_v2/alice/alice.sock;




                      As you can see we had different domain names here, which you wouldn't be needing. So you'll need to change the server names inside the server ...






                      share|improve this answer























                      • Thx! But this config for subdomains

                        – Riko
                        Nov 11 '18 at 15:26













                      0












                      0








                      0







                      What prof.phython said should be correct. I'm not an expert on this but I saw a similar situation with our server as well. Hope the shared nginx.conf file helps!



                      server 
                      listen 80;
                      listen [::]:80;
                      server_name alicebot.tech;
                      return 301 https://web.alicebot.tech$request_uri;


                      server
                      listen 80;
                      listen [::]:80;
                      server_name web.alicebot.tech;
                      return 301 https://web.alicebot.tech$request_uri;

                      server
                      listen 443 ssl;
                      server_name alicebot.tech;
                      ssl_certificate /etc/ssl/alicebot_tech_cert_chain.crt;
                      ssl_certificate_key /etc/ssl/alicebot.key;

                      location /static/
                      expires 1M;
                      access_log off;
                      add_header Cache-Control "public";
                      proxy_ignore_headers "Set-Cookie";


                      location /
                      include proxy_params;
                      proxy_pass http://unix:/var/www/html/alice/alice.sock;
                      proxy_set_header X-Forwarded-Host $server_name;
                      proxy_set_header X-Real-IP $remote_addr;
                      add_header P3P 'CP="ALL DSP COR PSAa PSDa OUR NOR ONL UNI COM NAV"';



                      server
                      listen 443 ssl;
                      server_name web.alicebot.tech;
                      ssl_certificate /etc/letsencrypt/live/web.alicebot.tech/fullchain.pem; # managed by Certbot
                      ssl_certificate_key /etc/letsencrypt/live/web.alicebot.tech/privkey.pem; # managed by Certbot


                      location /static/
                      autoindex on;
                      alias /var/www/html/static/;
                      expires 1M;
                      access_log off;
                      add_header Cache-Control "public";
                      proxy_ignore_headers "Set-Cookie";


                      location /
                      include proxy_params;
                      proxy_pass http://unix:/var/www/alice_v2/alice/alice.sock;
                      proxy_set_header X-Forwarded-Host $server_name;
                      proxy_set_header X-Real-IP $remote_addr;
                      add_header P3P 'CP="ALL DSP COR PSAa PSDa OUR NOR ONL UNI COM NAV"';



                      server
                      listen 8000 ssl;
                      listen [::]:8000 ssl;
                      server_name alicebot.tech;
                      ssl_certificate /etc/ssl/alicebot_tech_cert_chain.crt;
                      ssl_certificate_key /etc/ssl/alicebot.key;

                      location /static/
                      autoindex on;
                      alias /var/www/alice_v2/static/;
                      expires 1M;
                      access_log off;
                      add_header Cache-Control "public";
                      proxy_ignore_headers "Set-Cookie";


                      location /
                      include proxy_params;
                      proxy_pass http://unix:/var/www/alice_v2/alice/alice.sock;




                      As you can see we had different domain names here, which you wouldn't be needing. So you'll need to change the server names inside the server ...






                      share|improve this answer













                      What prof.phython said should be correct. I'm not an expert on this but I saw a similar situation with our server as well. Hope the shared nginx.conf file helps!



                      server 
                      listen 80;
                      listen [::]:80;
                      server_name alicebot.tech;
                      return 301 https://web.alicebot.tech$request_uri;


                      server
                      listen 80;
                      listen [::]:80;
                      server_name web.alicebot.tech;
                      return 301 https://web.alicebot.tech$request_uri;

                      server
                      listen 443 ssl;
                      server_name alicebot.tech;
                      ssl_certificate /etc/ssl/alicebot_tech_cert_chain.crt;
                      ssl_certificate_key /etc/ssl/alicebot.key;

                      location /static/
                      expires 1M;
                      access_log off;
                      add_header Cache-Control "public";
                      proxy_ignore_headers "Set-Cookie";


                      location /
                      include proxy_params;
                      proxy_pass http://unix:/var/www/html/alice/alice.sock;
                      proxy_set_header X-Forwarded-Host $server_name;
                      proxy_set_header X-Real-IP $remote_addr;
                      add_header P3P 'CP="ALL DSP COR PSAa PSDa OUR NOR ONL UNI COM NAV"';



                      server
                      listen 443 ssl;
                      server_name web.alicebot.tech;
                      ssl_certificate /etc/letsencrypt/live/web.alicebot.tech/fullchain.pem; # managed by Certbot
                      ssl_certificate_key /etc/letsencrypt/live/web.alicebot.tech/privkey.pem; # managed by Certbot


                      location /static/
                      autoindex on;
                      alias /var/www/html/static/;
                      expires 1M;
                      access_log off;
                      add_header Cache-Control "public";
                      proxy_ignore_headers "Set-Cookie";


                      location /
                      include proxy_params;
                      proxy_pass http://unix:/var/www/alice_v2/alice/alice.sock;
                      proxy_set_header X-Forwarded-Host $server_name;
                      proxy_set_header X-Real-IP $remote_addr;
                      add_header P3P 'CP="ALL DSP COR PSAa PSDa OUR NOR ONL UNI COM NAV"';



                      server
                      listen 8000 ssl;
                      listen [::]:8000 ssl;
                      server_name alicebot.tech;
                      ssl_certificate /etc/ssl/alicebot_tech_cert_chain.crt;
                      ssl_certificate_key /etc/ssl/alicebot.key;

                      location /static/
                      autoindex on;
                      alias /var/www/alice_v2/static/;
                      expires 1M;
                      access_log off;
                      add_header Cache-Control "public";
                      proxy_ignore_headers "Set-Cookie";


                      location /
                      include proxy_params;
                      proxy_pass http://unix:/var/www/alice_v2/alice/alice.sock;




                      As you can see we had different domain names here, which you wouldn't be needing. So you'll need to change the server names inside the server ...







                      share|improve this answer












                      share|improve this answer



                      share|improve this answer










                      answered Nov 11 '18 at 10:11









                      MehranMehran

                      238110




                      238110












                      • Thx! But this config for subdomains

                        – Riko
                        Nov 11 '18 at 15:26

















                      • Thx! But this config for subdomains

                        – Riko
                        Nov 11 '18 at 15:26
















                      Thx! But this config for subdomains

                      – Riko
                      Nov 11 '18 at 15:26





                      Thx! But this config for subdomains

                      – Riko
                      Nov 11 '18 at 15:26











                      0














                      As @prof.phython correctly states, you'll need to run a separate gunicorn process for each of the apps. This results in you having each app running on a separate port.



                      Next create a separate upstream block, under http for each of these app servers:



                       upstream app1 
                      # fail_timeout=0 means we always retry an upstream even if it failed
                      # to return a good HTTP response

                      # for UNIX domain socket setups
                      #server unix:/tmp/gunicorn.sock fail_timeout=0;

                      # for a TCP configuration
                      server 127.0.0.1:9000 fail_timeout=0;



                      Obviously change the title, and port number for each upstream block accordingly.



                      Then, under your http->server block define the following for each:



                      location @app1_proxy 
                      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                      proxy_set_header X-Forwarded-Proto $scheme;
                      proxy_set_header Host $http_host;
                      # we don't want nginx trying to do something clever with
                      # redirects, we set the Host: header above already.
                      proxy_redirect off;
                      proxy_pass http://app1;



                      Make sure the last line there, points at what you called the upstream block (app1) and @app1_proxy should be specific to that app also.



                      Finally within the http->server block, use the following code to map a URL to the app server:



                      location /any/subpath 
                      # checks for static file, if not found proxy to app
                      try_files $uri @app1_proxy;






                      share|improve this answer



























                        0














                        As @prof.phython correctly states, you'll need to run a separate gunicorn process for each of the apps. This results in you having each app running on a separate port.



                        Next create a separate upstream block, under http for each of these app servers:



                         upstream app1 
                        # fail_timeout=0 means we always retry an upstream even if it failed
                        # to return a good HTTP response

                        # for UNIX domain socket setups
                        #server unix:/tmp/gunicorn.sock fail_timeout=0;

                        # for a TCP configuration
                        server 127.0.0.1:9000 fail_timeout=0;



                        Obviously change the title, and port number for each upstream block accordingly.



                        Then, under your http->server block define the following for each:



                        location @app1_proxy 
                        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                        proxy_set_header X-Forwarded-Proto $scheme;
                        proxy_set_header Host $http_host;
                        # we don't want nginx trying to do something clever with
                        # redirects, we set the Host: header above already.
                        proxy_redirect off;
                        proxy_pass http://app1;



                        Make sure the last line there, points at what you called the upstream block (app1) and @app1_proxy should be specific to that app also.



                        Finally within the http->server block, use the following code to map a URL to the app server:



                        location /any/subpath 
                        # checks for static file, if not found proxy to app
                        try_files $uri @app1_proxy;






                        share|improve this answer

























                          0












                          0








                          0







                          As @prof.phython correctly states, you'll need to run a separate gunicorn process for each of the apps. This results in you having each app running on a separate port.



                          Next create a separate upstream block, under http for each of these app servers:



                           upstream app1 
                          # fail_timeout=0 means we always retry an upstream even if it failed
                          # to return a good HTTP response

                          # for UNIX domain socket setups
                          #server unix:/tmp/gunicorn.sock fail_timeout=0;

                          # for a TCP configuration
                          server 127.0.0.1:9000 fail_timeout=0;



                          Obviously change the title, and port number for each upstream block accordingly.



                          Then, under your http->server block define the following for each:



                          location @app1_proxy 
                          proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                          proxy_set_header X-Forwarded-Proto $scheme;
                          proxy_set_header Host $http_host;
                          # we don't want nginx trying to do something clever with
                          # redirects, we set the Host: header above already.
                          proxy_redirect off;
                          proxy_pass http://app1;



                          Make sure the last line there, points at what you called the upstream block (app1) and @app1_proxy should be specific to that app also.



                          Finally within the http->server block, use the following code to map a URL to the app server:



                          location /any/subpath 
                          # checks for static file, if not found proxy to app
                          try_files $uri @app1_proxy;






                          share|improve this answer













                          As @prof.phython correctly states, you'll need to run a separate gunicorn process for each of the apps. This results in you having each app running on a separate port.



                          Next create a separate upstream block, under http for each of these app servers:



                           upstream app1 
                          # fail_timeout=0 means we always retry an upstream even if it failed
                          # to return a good HTTP response

                          # for UNIX domain socket setups
                          #server unix:/tmp/gunicorn.sock fail_timeout=0;

                          # for a TCP configuration
                          server 127.0.0.1:9000 fail_timeout=0;



                          Obviously change the title, and port number for each upstream block accordingly.



                          Then, under your http->server block define the following for each:



                          location @app1_proxy 
                          proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                          proxy_set_header X-Forwarded-Proto $scheme;
                          proxy_set_header Host $http_host;
                          # we don't want nginx trying to do something clever with
                          # redirects, we set the Host: header above already.
                          proxy_redirect off;
                          proxy_pass http://app1;



                          Make sure the last line there, points at what you called the upstream block (app1) and @app1_proxy should be specific to that app also.



                          Finally within the http->server block, use the following code to map a URL to the app server:



                          location /any/subpath 
                          # checks for static file, if not found proxy to app
                          try_files $uri @app1_proxy;







                          share|improve this answer












                          share|improve this answer



                          share|improve this answer










                          answered Nov 12 '18 at 16:00









                          v25v25

                          409311




                          409311



























                              draft saved

                              draft discarded
















































                              Thanks for contributing an answer to Stack Overflow!


                              • Please be sure to answer the question. Provide details and share your research!

                              But avoid


                              • Asking for help, clarification, or responding to other answers.

                              • Making statements based on opinion; back them up with references or personal experience.

                              To learn more, see our tips on writing great answers.




                              draft saved


                              draft discarded














                              StackExchange.ready(
                              function ()
                              StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53247115%2fserving-multiple-django-applications-with-nginx-and-gunicorn-under-same-domain%23new-answer', 'question_page');

                              );

                              Post as a guest















                              Required, but never shown





















































                              Required, but never shown














                              Required, but never shown












                              Required, but never shown







                              Required, but never shown

































                              Required, but never shown














                              Required, but never shown












                              Required, but never shown







                              Required, but never shown







                              Popular posts from this blog

                              𛂒𛀶,𛀽𛀑𛂀𛃧𛂓𛀙𛃆𛃑𛃷𛂟𛁡𛀢𛀟𛁤𛂽𛁕𛁪𛂟𛂯,𛁞𛂧𛀴𛁄𛁠𛁼𛂿𛀤 𛂘,𛁺𛂾𛃭𛃭𛃵𛀺,𛂣𛃍𛂖𛃶 𛀸𛃀𛂖𛁶𛁏𛁚 𛂢𛂞 𛁰𛂆𛀔,𛁸𛀽𛁓𛃋𛂇𛃧𛀧𛃣𛂐𛃇,𛂂𛃻𛃲𛁬𛃞𛀧𛃃𛀅 𛂭𛁠𛁡𛃇𛀷𛃓𛁥,𛁙𛁘𛁞𛃸𛁸𛃣𛁜,𛂛,𛃿,𛁯𛂘𛂌𛃛𛁱𛃌𛂈𛂇 𛁊𛃲,𛀕𛃴𛀜 𛀶𛂆𛀶𛃟𛂉𛀣,𛂐𛁞𛁾 𛁷𛂑𛁳𛂯𛀬𛃅,𛃶𛁼

                              Crossroads (UK TV series)

                              ữḛḳṊẴ ẋ,Ẩṙ,ỹḛẪẠứụỿṞṦ,Ṉẍừ,ứ Ị,Ḵ,ṏ ṇỪḎḰṰọửḊ ṾḨḮữẑỶṑỗḮṣṉẃ Ữẩụ,ṓ,ḹẕḪḫỞṿḭ ỒṱṨẁṋṜ ḅẈ ṉ ứṀḱṑỒḵ,ḏ,ḊḖỹẊ Ẻḷổ,ṥ ẔḲẪụḣể Ṱ ḭỏựẶ Ồ Ṩ,ẂḿṡḾồ ỗṗṡịṞẤḵṽẃ ṸḒẄẘ,ủẞẵṦṟầṓế