fragen stichworte

Nginx einen bestimmten Port in einen Unterpfad umschreiben (nginx + uwsgi + django)

Mein Ziel ist es, alles unter http://localhost:8000 in http://localhost/foo

zu schreiben

Ich habe jeden in diesem -Link genannten Schritt verfolgt, konnte es aber trotzdem nicht zum Laufen bringen.

Hier sind meine Einstellungen:

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 mit 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 mit 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;
    }
}

Jetzt http://localhost/test entspricht http://localhost:8000

aber wenn ich zu http://localhost/test/foo gehe, sagt mir nginx "nicht gefunden"
(Ich erwarte dasselbe wie http://localhost:8000/foo)

Was habe ich vermisst?

antworten

Es scheint, dass das Problem das zusätzliche $ in der Umschreibungsregel ist (im ersten Argument). Ich habe es entfernt und es hat gut funktioniert.

   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;
    }