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

nginx: SSI работает на бэкэнде Apache, но не на бэкэнде Gunicorn

У меня есть nginx перед сервером Apache и сервером Gunicorn для разных частей моего сайта. Я использую модуль SSI в nginx для отображения фрагмента на каждой странице. Веб-сайты включают фрагмент в такой форме:

Для статических страниц, обслуживаемых nginx, все работает нормально, то же самое касается страниц, сгенерированных Apache - оценивается включение SSI и заполняется фрагмент. Однако для запросов к моему бэкэнду-пушке, запускающему приложение Python в Django, включение SSI не оценивается.

Вот соответствующая часть конфигурации nginx:

location /cgi-bin/script.pl {
    ssi on;
    proxy_pass http://default_backend/cgi-bin/script.pl;
    include sites-available/aspects/proxy-default.conf;
}

location /directory/ {
    ssi on;
    limit_req zone=directory nodelay burst=3;
    proxy_pass http://django_backend/directory/;
    include sites-available/aspects/proxy-default.conf;
}

Бэкенды:

upstream django_backend {
    server dynamic.mydomain.com:8000 max_fails=5 fail_timeout=10s;
}
upstream default_backend {
    server dynamic.mydomain.com:80;
    server dynamic2.mydomain.com:80;
}

proxy_default.conf:

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

В чем причина такого поведения? Как я могу получить SSI, работающую на моих страницах, созданных на Gunicorn? Как я могу отладить это дальше?

Только что выяснил, что там произошло: похоже, что nginx не может анализировать SSI-файлы, если он получает заархивированные ответы. В моем Django settings.py у меня был django.middleware.gzip.GZipMiddleware включен. После удаления этого SSI-включения работают нормально.