无法使用 Apache 在图像上设置过期标头
Posted
技术标签:
【中文标题】无法使用 Apache 在图像上设置过期标头【英文标题】:Can't set expire header on images with 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-Fori %l %u %t \"%r\" %>s %b \"%Refereri\" \"%User-Agenti\"" 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 文件中是否有遗漏或输入错误?
【问题讨论】:
【参考方案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
【讨论】:
以上是关于无法使用 Apache 在图像上设置过期标头的主要内容,如果未能解决你的问题,请参考以下文章