как nginx обрабатывает перенаправление с прокси - PullRequest
0 голосов
/ 04 октября 2019

Я хочу настроить сервер с nginx + gunicorn + django + vue

в nginx, я настраиваю веб-сайт следующим образом

server {
    charset utf-8;
    listen 80;
    root /home/www/develop/mysite/public;
    index index.html;

    location /static { # for file download functions of django
        alias  /home/www/develop/mysite/static;
    }

    location ^~/api/ {
        proxy_pass http://localhost:8888/;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Referer $http_referer;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_redirect http://localhost:8888/ http://$host:$server_port/api/;
    }
}

, затем в vue front end я ставлю индекс.html и другие статические ресурсы в / home / www /velop / mysite / public

, и я использую axios для доступа к серверу с baseurl '/ api'

обычно nginx + gunicorn + django workхорошо, но если ответ django - перенаправление HTTP 302, возникнет проблема, потому что редирект не содержит baseurl '/ api', например

http://localhost/api/admin

будет иметь доступdjango-admin, обычно django перенаправляет его на

http://localhost/admin/login/?next=/admin/

обратите внимание, что baseurl '/ api' потерян, поэтому nginx не найдет ресурс, отвечающий за запрос, тогда ответ 404

Я добавил proxy_redirect в конфигурацию веб-сайта nginx, чтобы добавить baseurl '/ api', если ответ от proxy_pass - перенаправление HTTP, но, похоже, он не работает, может кто-нибудь помочь мне указать на проблему?

илиЯ должен отредактировать код django и код vue, это огромная работаКроме того, это не является чистым, в будущем, если кому-то еще понадобится разработать код, новый разработчик будет сбит с толку.

эта проблема должна быть решена в nginx

Я прочитал

http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_redirect

и я думаю, что мой конфиг proxy_redirect правильный

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...