Using two different Nginx server blocks would be the right approach if you are serving one of the sites from a different domain or sub-domain. If you’d like to serve the Django app from a sub-folder, you will need to make use of a location directive in the same server block.
The details may differ for your exact setup, but here is a basic example of serving a static site from the main domain and a Django project from a subfolder:
upstream app_server {
server unix:/home/django/gunicorn.socket fail_timeout=0;
}
server {
listen 80 default_server;
listen [::]:80 default_server ipv6only=on;
server_name example.com;
root /path/to/pelican/files;
index index.html index.htm;
client_max_body_size 4G;
keepalive_timeout 5;
location /app/static {
alias /path/to/django/static/files;
}
location /app/ {
rewrite ^/app/(.*)$ /$1 break;
proxy_set_header X-Script-Name /app;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
proxy_redirect off;
proxy_buffering off;
proxy_pass http://app_server;
}
}
Two very important parts in the location directive that are specific to hosting from the subfolder are:
rewrite ^/app/(.*)$ /$1 break;
proxy_set_header X-Script-Name /app;
This ensures that the Django app will generate URLs with the correct prefix in the path (e.g. example.com/app
rather than example.com
).
Hope that helps point you in the right direction!
Post your final nginx config here please.
I created two server blocks in NGINX, one for my static website:
and one for my django app:
and added this to settings.py: