Назад | Перейти на главную страницу

Запуск Nginx в качестве обратного прокси для gunicorn и apache2

Я хочу использовать nginx как реверс для apache и gunicorn

location / должен обрабатываться apache

location /webapps/должен обрабатываться Gunicorn

upstream gfbu_app_server {
        server unix:/webapps/gfbu/run/gunicorn.sock fail_timeout=0;
        }

server {
        listen  80;
        server_name eu-con.gfbu;

        client_max_body_size 4G;

        access_log /webapps/gfbu/logs/nginx-access.log;
        error_log /webapps/gfbu/logs/nginx-error.log;

        location /static/ {
                alias /webapps/gfbu/gfbu/static/;
        }
        location /media/ {
                alias /webapps/gfbu/gfbu/media/;
        }

        location /webapps/ {
                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://gfbu_app_server;
                break;
                }
        }

        error_page 500 502 503 504 /500.html;
        location = 500.html {
                root /webapps/gfbu/static/;
                }

        # everything to apache
        location / {
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-For $remote_addr;
                proxy_set_header Host $host;
                proxy_pass http://127.0.0.1:8090;
                }

Это работает, но URL-адрес запроса для стрельбы http://<ipaddress>/webapps/ но это должно быть / работать.

Gunicorn обслуживает Django Webapp, и он не может соответствовать http://<ipaddress>/webapps/ на любой шаблон URL. Очевидно, я сделал что-то не так - при переходе из Apache и mod_wsgi можно было перенаправить запрос на указанный wsgi_script без части subdir.

Я не уверен, какая часть стека nginx -> gunicorn -> django сконфигурирована неправильно - не могли бы вы мне помочь?

Заменить

proxy_pass http://gfbu_app_server;

С участием:

proxy_pass http://gfbu_app_server/;

Это не будет работать с блоком if. Чтобы не нарушать автоматически сгенерированный URL-адрес Djangos (помните: Django считает, что он работает в корне документа), вам нужно добавить FORCE_SCRIPT_NAME переменная к settings.py например:

FORCE_SCRIPT_NAME = "/webapps"

Также проверьте, нужно ли вам изменить перенаправления для LOGIN_URL и LOGOUT_URL