【问题标题】:Can't set expire header on images with Apache无法使用 Apache 在图像上设置过期标头
【发布时间】:2017-03-19 15:59:21
【问题描述】:

我试图通过在我的 Django 应用程序的根目录中设置一个 .htaccess 文件来告诉浏览器缓存我的应用程序中的任何类型的图像文件 (png/jpg/gif/etc)。

.htaccess

<IfModule mod_expires.c>
  ExpiresActive On
  ExpiresDefault "access plus 1 seconds"
  ExpiresByType image/gif "access plus 365 days"
  ExpiresByType image/jpeg "access plus 365 days"
  ExpiresByType image/png "access plus 365 days"
</IfModule>

阿帕奇

LoadModule authz_core_module modules/mod_authz_core.so
LoadModule dir_module        modules/mod_dir.so
LoadModule env_module        modules/mod_env.so
LoadModule log_config_module modules/mod_log_config.so
LoadModule mime_module       modules/mod_mime.so
LoadModule rewrite_module    modules/mod_rewrite.so
LoadModule setenvif_module   modules/mod_setenvif.so
LoadModule wsgi_module       modules/mod_wsgi.so
LoadModule unixd_module      modules/mod_unixd.so
LoadModule expires_module    modules/mod_expires.so
LoadModule headers_module    modules/mod_headers.so

<Directory />s
    AllowOverride All
</Directory>

LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
CustomLog /home/timbaney1989/logs/user/access_baneydev.log combined
ErrorLog /home/timbaney1989/logs/user/error_baneydev.log

在添加 AllowOverride All 选项之前,我遇到了内部服务器错误,但现在我的应用程序运行良好。但是,当我检查网络并看到正在加载的图像时,我在该图像的任何地方都看不到过期标头。服务器还说它是 Nginx ?在 Apache 服务器上运行您的应用程序并让 Nginx 服务器加载您的静态文件是正常的吗?我的 Django 应用程序或 Apache httpd.conf 文件中是否有遗漏或输入错误?

【问题讨论】:

    标签: django apache nginx header


    【解决方案1】:

    看起来 twitter.png 文件得到了 404:

    HTTP/1.1 404 Not Found
    Connection: keep-alive
    Content-Encoding: gzip
    Content-Type: text/html
    Date: Sun, 06 Nov 2016 06:44:39 GMT
    Server: nginx
    Vary: Accept-Encoding
    

    这是 Nicholas Kuechler 对 solution 的修改版

    location ~* \.(png|jpe?g|gif|ico|tiff)$ {
      expires max;
      log_not_found off;
      access_log off;
    }
    

    如果它得到 404,您可能有 root 指令错误地设置为位置块继承。确认根(DocumentRoot)是正确的,并且文件相对于根路径存在,并且应该显示出来。

    【讨论】:

      【解决方案2】:

      您也可以按照 uWSGI 和 NGINX 的本指南替换 apache,并将静态文件设置为位置块中的别名,并添加我之前回答的标题。

      http://uwsgi-docs.readthedocs.io/en/latest/tutorials/Django_and_nginx.html

      【讨论】:

        猜你喜欢
        • 2015-07-29
        • 1970-01-01
        • 1970-01-01
        • 2018-10-02
        • 1970-01-01
        • 2012-11-02
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多