Nginx 本月不同日期的不同到期日
我当前的Nginx配置:Nginx 本月不同日期的不同到期日,nginx,nginx-config,Nginx,Nginx Config,我当前的Nginx配置: location / { expires 1d; add_header Cache-Control public; try_files $uri $uri.html @proxy; } 但1d到期零件不符合我的需要。实际上,直到本月底,内容都是好的。或者在下个月的第一天凌晨00:01之前简化操作。事实上,它甚至不必100%准确。如果我在过去的1-3天里失去了一点优化,那不是问题(想想2月28日的问题) 我可以实现的解决方案是一个cron作业,它每天更新一
location / {
expires 1d;
add_header Cache-Control public;
try_files $uri $uri.html @proxy;
}
但1d到期代码>零件不符合我的需要。实际上,直到本月底,内容都是好的。或者在下个月的第一天凌晨00:01之前简化操作。事实上,它甚至不必100%准确。如果我在过去的1-3天里失去了一点优化,那不是问题(想想2月28日的问题)
我可以实现的解决方案是一个cron作业,它每天更新一次Nginx配置,并使用Bash脚本重新加载Nginx。但这感觉不对。我想在Nginx配置中解决这个问题
所以我在考虑一组if/else结构,它获取月份的当前日期,然后设置一个数字
想法(实际上不是Nginx配置代码)是:
if day_of_month = 1
expires 31d
end
if day_of_month = 2
expires 30d
end
if day_of_month = 3
expires 29d
end
...
我正在阅读,但我不确定这样做是否有效:
if current_month = 1
expires epoche "00:00:00 01-02-$current_year"
end
if current_month = 2
expires epoche "00:00:00 01-03-$current_year"
end
if current_month = 3
expires epoche "00:00:00 01-04-$current_year"
end
...
if current_month = 12
expires epoche "00:00:00 01-01-($current_year + 1)"
end
在正常的Nginx配置中,解决此问题的最佳方法是什么?我可以在if子句中使用当前日期吗?对于正常的Nginx配置,您可以使用map
指令中的$time\u iso8601
变量来实现您的if day\u of\u month
链。为简单起见,此答案忽略闰年,并设置了5天的最大到期时间间隔,只是为了减少映射中的条目数
map $time_iso8601 $expires {
default 5d;
~^....-(04|06|09|11)-27T 4d;
~^....-(04|06|09|11)-28T 3d;
~^....-(04|06|09|11)-29T 2d;
~^....-(04|06|09|11)-30T 1d;
~^....-02-25T 4d;
~^....-02-26T 3d;
~^....-02-27T 2d;
~^....-02-28T 1d;
~^....-..-28T 4d;
~^....-..-29T 3d;
~^....-..-30T 2d;
~^....-..-31T 1d;
}
server {
...
expires $expires;
...
}
正则表达式是按顺序计算的,因此将最不特定的表达式放在列表的底部。更多信息,请参阅
最佳的解决方案是生成一个HTTP Expires头,其中包含文档过期的实际日期和时间,但是如果没有编程语言,HTTP日期格式很难生成