我正在使用nginx来服务我的静态内容,有没有一种方法可以为符合特定规则的每个文件设置expires头文件? 例如,我可以为扩展名为“.css”的所有文件设置expires头文件吗?
除了一些更多的文件扩展名之外,我更喜欢做一个更完整的caching头。 '?' 前缀是一个“非捕获”标记,nginx不会创build$ 1。 这有助于减less不必要的负载。
location ~* \.(?:ico|css|js|gif|jpe?g|png)$ { expires 30d; add_header Pragma public; add_header Cache-Control "public"; }
server { ... location ~* \.css$ { expires 30d; } ... }
location
指令
expires
指令
您也可以将过期设置为最大。 这是我用于CSS和JS的指令。
# Set css and js to expire in a very long time location ~* ^.+\.(css|js)$ { access_log off; expires max; }
我没有足够的声望评论为什么接受的答案会导致文件不再显示,但我想通了,并希望帮助!
简短版本:
如果您没有全局设置,请确保您在图像上为您的位置块指定了一个根目录!
长版以下:
首先,我实施这个解决scheme的方法与这个答案非常相似,你写规则(如接受的答案):
location ~* \.(?:ico|css|js|gif|jpe?g|png)$ { expires 30d; add_header Pragma public; add_header Cache-Control "public"; }
到一个文件img-cache.conf中
然后将该文件包含到您的server {...}
指令中。
我在我的站点可用的文件夹somesite.com的例子:
#Image Caching include /etc/nginx/conf/img-cache.conf;
这样,您可以将图像caching位置块添加到您可能正在运行的多个站点。
其次,我有一个情况,我/ var / www /包含两个文件夹,我允许public_html – 安全和培训,所以我必须在我的网站的服务器指令特定的位置块挑出这些文件夹。
因此, 我没有一个全局的根目录集 。
所以,当你制作图像位置块时, 你可能不会提供一个根目录来查找图像!
我的解决scheme是:
location ~ ^/training.+\.(?:ico|css|js|gif|jpe?g|png)$ { root /var/www/; expires 7d; add_header Pragma public; add_header Cache-Control "public"; try_files $uri 404; } location ~ ^/.+\.(?:ico|css|js|gif|jpe?g|png)$ { root /var/www/secure; expires 7d; add_header Pragma public; add_header Cache-Control "public"; try_files $uri 404; }
如果你有一个地方是你所有的静态文件,这样的事情会做…
location /static { your/location/to/static/files/static; expires 30d; add_header Cache-Control "public"; }
接受的答案导致nginx找不到我的任何静态文件。 不知道为什么,但这是一个简单的select。
由于这是一个非常古老的线程,我发现了一个最新的惊人的教程。
也许你想检查出来
如何在Ubuntu 16.04上用Nginx的头文件模块实现浏览器caching