[Django]-How do I set subdirectory in nginx with Django

8đź‘Ť

âś…

According to the uWSGI on Nginx docs, you just have to pass the SCRIPT_NAME to django.

location /abc {
    include uwsgi_params;
    uwsgi_pass 127.0.0.1:9000;
    uwsgi_param SCRIPT_NAME /abc;            
}

Django will still “see” /abc, but it should deal with it so that it gets stripped off before your urls are matched. You want this to happen, if django didn’t see /abc, it would generate incorrect urls for your site and none of your links would work.

2đź‘Ť

Now that uwsgi_modifier1 30 is removed in the latest versions of Nginx and uWSGI, I had to use a newer method to get it working:

uWSGI config:

[uwsgi]
route-run = fixpathinfo:

Nginx config:

location /abc {
    include uwsgi_params;
    uwsgi_pass 127.0.0.1:9000;
    uwsgi_param SCRIPT_NAME /abc; # Pass the URL prefix to uWSGI so the "fixpathinfo:" route-rule can strip it out
}

IF THAT DOESN’T FIX IT: Try installing libpcre and libpcre-dev, then reinstall uwsgi with pip install -I --no-cache-dir uwsgi. uWSGI’s internal routing subsystem requires the PCRE library to be installed before uWSGI is compiled/installed. More information on uWSGI and PCRE.

👤Shane

Leave a comment