comment déployer django sous une banlieue derrière nginx

3 réponses

quand j'ai besoin d'utiliser un préfixe D'URL, je le mets généralement moi-même dans ma racine urls.py, où je n'ai qu'une ligne, préfixée par le préfixe et incluant une autre urls.py

(r'^/myapp/', include('myapp.urls')),

mais je suppose que cela a le même goulot d'étranglement que de définir un préfixe dans settings.py, vous avez une configuration redondante dans Nginx et Django.

vous devez faire quelque chose dans le serveur qui héberge votre application Django à :12345. Vous pouvez configurer le préfixe ici, et le passer à Django en utilisant le wsgiscriptalias ou son équivalent en dehors de mod_wsgi. Je ne peux pas donner plus d'informations car je ne sais pas comment fonctionne Votre application Django. Aussi, peut-être vous devriez envisager exécuter votre application Django directement à partir de Django, en utilisant uWSGI ou gunicorn.

proxy_set_header SCRIPT_NAME /myapp;

Plus d'informations ici

12
répondu pistache 2014-12-03 11:29:30

vous aurez besoin de mettre à jour votre paramètre:

USE_X_FORWARDED_HOST = True
FORCE_SCRIPT_NAME = /myapp

et mettez à jour votre MEDIA_URL et STATIC_URL en conséquence.

Je n'ai pas eu l'expérience de déployer sous NGINX, mais sous apache, ça marche très bien. voir: https://docs.djangoproject.com/en/dev/ref/settings/#use-x-forwarded-host

7
répondu yuwang 2012-10-29 04:52:05

Voici une partie de ma configuration pour nginx qui, il est vrai, ne définit pas FORCE_SCRIPT_NAME, mais alors, je n'utilise pas de sous-répertoire. Peut-être sera-t-il utile pour définir les options liées à USE_X_FORWARDED_HOST dans Nginx plutôt que Django.

upstream app_server_djangoapp {
    server localhost:8001 fail_timeout=0;
}

server  {
    listen xxx.xxx.xx.xx:80;
    server_name mydomain.com www.mydomain.com;
    if ($host = mydomain.com) {
        rewrite ^/(.*)$ http://www.mydomain.com/ permanent;
    }
    ...
    location / {
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_redirect off;

        if (!-f $request_filename) {
            proxy_pass http://app_server_djangoapp;
            break;
        }
    }
    ...
}
2
répondu Sectio Aurea 2013-01-09 21:27:25