nginx:SSI 在 Apache 后端上运行,但在 gunicorn 后端上运行不上

nginx:SSI 在 Apache 后端上运行,但在 gunicorn 后端上运行不上

我在 Apache 服务器前面安装了 nginx,并在网站的不同部分安装了 gunicorn 服务器。我使用 nginx 中的 SSI 模块在每个页面中显示一个代码片段。网站包含以下形式的代码片段:

对于由 nginx 提供的静态页面,一切正常,Apache 生成的页面也是如此 - SSI 包含已评估,代码片段已填充。但是,对于运行 Django 中的 Python 应用程序的 gunicorn 后端的请求,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 上生成的页面上?如何进一步调试?

答案1

刚刚发现那里发生了什么:如果 nginx 收到压缩响应,它似乎无法解析 SSI 包含。在我的 Django settings.py 中,我已启用django.middleware.gzip.GZipMiddleware。删除它后,SSI 包含工作正常。

相关内容