3 votes

Nginx réécrit certains ports en sous-chemin (nginx + uwsgi + django)

Mon but est de tout réécrire sous http://localhost:8000 a http://localhost/foo

J'ai suivi toutes les étapes mentionnées dans ce lien mais je n'ai toujours pas réussi à le faire fonctionner.

Voici mes paramètres :

urls.py (Django)

urlpatterns = [
    url(r'^$', 'home.view'),
    url(r'^foo$', 'foo.view'),
]

uwsgi.ini (uWSGI)

[uwsgi]

chdir           = /home/user/folder/project
wsgi-file       = /home/user/folder/project/iTrends/wsgi.py
home            = /home/user/.pyenv/versions/project
master          = true
processes       = 10
threads         = 5
socket          = /tmp/project.sock
chmod-socket    = 666
vacuum          = true
logto           = /tmp/project_uwsgi.log
http-websocket  = true
buffer-size     = 65535

nginx80.conf (nginx avec le port 80)

server {
    listen       80;
    server_name = _;

    location /test {
        rewrite ^/test/(.*)$ /$1 break;   
        proxy_pass  http://127.0.0.1:8000;

        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

nginx8000.conf (nginx avec le port 8000)

server {
    listen      8000;
    server_name _; 
    charset     utf-8;

    client_max_body_size 75M;

    location /static {
        alias /home/user/folder/project/static_all;
    }

    location / {
        uwsgi_pass  unix:///tmp/project.sock;
        include     /etc/nginx/uwsgi_params;
    }
}

Maintenant http://localhost/test est équivalent à http://localhost:8000

mais quand je vais à http://localhost/test/foo nginx me dit "non trouvé".
(Je m'attends à ce que ce soit la même chose que http://localhost:8000/foo )

Qu'est-ce que j'ai manqué ?

1voto

neorg Points 123

Il semble que le problème soit le $ supplémentaire dans la règle de réécriture (dans le premier argument). Je l'ai supprimé et cela a commencé à fonctionner correctement.

    location /test {
        rewrite ^/test/(.*) /$1 break;   
        proxy_pass  http://127.0.0.1:8000;

        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X