How to host a Django project in a subpath?

2020-03-18 04:02发布

问题:

I am building an API with Django REST framework which is served via Gunicorn and Nginx. The project "exampleproject" has to run at a subpath such as: https://100.100.100.100/exampleproject (example IP address). I do not have a domain name registered for the IP.

Currently, the start page renders as expected at https://100.100.100.100/exampleproject. However a the resource path for "products" does not work. Instead of https://100.100.100.100/exampleproject/products the start page displays https://100.100.100.100/products - which does not work.

I configured the subpath for exampleproject in /etc/nginx/sites-enabled/default as follows:

server {

    # ...

    location /exampleproject/ {
        proxy_pass        http://localhost:8007/;
        proxy_set_header  X-Real-IP  $remote_addr;
        proxy_set_header  Host $host;
        proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header  X-Forwarded-Proto $scheme;
    }

When I manually visit https://100.100.100.100/exampleproject/products Nginx records the following in /var/log/nginx/access.log:

"GET /products/ HTTP/1.1" 404 151 "-"

回答1:

I found here that one needs to add the following setting to Django's configuration in settings.py:

FORCE_SCRIPT_NAME = '/exampleproject'

This seems to rewrite all paths for nested resources.