我有一个在 tomcat Web 服务器上运行的应用程序,并且我在 apache Web 服务器端使用 mod-jk。
我认为我已经成功地配置了一切,使之无缝运行,当我想在网络服务器上缓存静态资产时遇到了问题,由于某种原因,我的响应标头过期设置为1994,这些是我想要作为静态资产服务器并缓存它的一个 JavaScript 文件的标头:
Accept-Ranges:bytes
Cache-Control:no-cache
Connection:Keep-Alive
Content-Encoding:gzip
Content-Type:application/javascript
Date:Fri, 29 May 2015 23:18:25 GMT
ETag:W/"604348-1432950682000"
Expires:Thu, 01 Dec 1994 16:00:00 GMT
Keep-Alive:timeout=5, max=100
Last-Modified:Fri, 29 May 2015 23:18:25 GMT
Server:Apache
Transfer-Encoding:chunked
Vary:Accept-Encoding
根据我在本网站我尝试在我的虚拟主机内进行设置,如下例所示:
<VirtualHost *:80>
Alias /assets /opt/www/tomcat/webapps/ROOT/assets
ServerName dev.myurl.com
ServerAlias anotherone.myurl.com
ErrorLog "|/opt/www/apache/2.2.25/bin/rotatelogs /opt/www/logs/apache/app/_error_log-%Y-%m-%d-%H 86400"
CustomLog "|/opt/www/apache/2.2.25/bin/rotatelogs /opt/www/logs/apache/app/_access_log-%Y-%m-%d-%H 86400" common
JkMount /* workerdev
#--- Disabled Trace -------
RewriteEngine On
RewriteOptions inherit
#----------------------------
ExpiresActive On
ExpiresByType application/x-javascript "now plus 1 months"
</VirtualHost>
这是我第一次做这样的事情,所以我不确定我还需要做什么,为什么会有这个默认设置Expires
。我已经尝试了 9 到 10 个小时,但都没有成功。有什么建议我还可以尝试什么吗?
更新:
似乎我可以添加 http 标头,但无法通过将其添加到VirtualHost
Header unset Cache-Control
Header add Cache-Control "max-age=290304000, public"
Header unset Expires
Header add Expires "Thu, 01 Dec 2015 16:00:00 GMT"
我得到了以下响应标头:
Cache-Control:no-cache
Cache-Control:max-age=290304000, public
Expires:Thu, 01 Dec 1994 16:00:00 GMT
Expires:Thu, 01 Dec 2015 16:00:00 GMT
很奇怪吧?这个标头值还能在哪里设置?
更新 :
为了查看应用服务器是否设置了响应 Expires,我尝试了以下操作:
使用 lynx 命令行浏览器直接访问实例,而不是通过 apache
我在 tomcat server.xml 阀门日志部分添加了“%{Expires}o”,这样我就可以查看访问日志,并查看服务器返回的 expires 标头是什么。检查日志后,我发现正确的响应标头是从 2014 年发送的,而不是从 1994 年发送的。
我将 mod-jk 日志级别修改为跟踪,因为我想查看响应以何种形式返回到 Apache Web 服务器。因此,在该日志中,我还看到应用服务器从 2015 年而不是 1994 年设置了正确的 Expires 响应标头。
所以这基本上告诉我应用服务器没有将Expires
标头设置为1994
。
有人对我下一步该做什么有什么意见吗?