Глава 14. Условия времени¶
Условия времени позволяют применять правила политики по расписанию: в определённые часы, минуты, дни недели, числа месяца, месяцы, годы и диапазоны дат. Все условия времени поддерживают модификатор .utc для сравнения с UTC вместо локального времени устройства.
Замечание о слое Cache: Использование условий времени в слое
<Cache>может привести к частому сбросу и перезагрузке кэша, поскольку кэшированные объекты будут инвалидироваться при каждом изменении временного условия. Используйте с осторожностью.
Все условия времени: weekday=, hour=, minute=, date=, day=, month=, year=, time=. Все они проверяются при каждом запросе по текущему системному времени UTC.
14.1. weekday= — день недели¶
Проверяет, попадает ли текущий день недели в указанный диапазон или совпадает с конкретным значением. Использует системные часы и часовой пояс устройства.
Используйте диапазон, а не список
Список значений в weekday=/hour=/minute=/month=/day= (например weekday=(1,3,5)) не работает: значения объединяются логикой И, поэтому условие не может быть истинным (день не может быть одновременно 1 и 3). Используйте диапазон (weekday=1..5) или отдельные правила на каждое значение.
Синтаксис:
Где:
| Параметр | Описание |
|---|---|
first_day |
Начало диапазона: 1-7 или имя дня. По умолчанию 1 (Monday). |
last_day |
Конец диапазона: 1-7 или имя дня. По умолчанию 7 (Sunday). |
exact_day |
Точное значение: 1-7 или имя дня. |
(list) |
Список значений через запятую: (1,2,3) или (mon,tue,wed). |
Значения:
| Число | Краткое имя | Полное имя | День |
|---|---|---|---|
| 1 | mon | monday | Понедельник |
| 2 | tue | tuesday | Вторник |
| 3 | wed | wednesday | Среда |
| 4 | thu | thursday | Четверг |
| 5 | fri | friday | Пятница |
| 6 | sat | saturday | Суббота |
| 7 | sun | sunday | Воскресенье |
Допустимые слои: Admin, Cache, Diagnostics, DNS-Proxy, Exception, Forward, Proxy, SSL, SSL-Intercept
Примеры:
; Рабочие дни — числовой диапазон
weekday=1..5
; Рабочие дни — список
weekday=(1,2,3,4,5)
; Рабочие дни — именованный список
weekday=(mon,tue,wed,thu,fri)
; Только выходные
weekday=(6,7)
; Конкретный день
weekday=1 ; понедельник
; UTC вариант
weekday.utc=1..5
; Комбинация с hour= — рабочее время
define condition work_hours
weekday=(1,2,3,4,5) hour=9..18
end
<Proxy>
condition=work_hours category=Gambling deny
См. также: day=, hour=, minute=, month=, time=, year=, date=
14.2. hour= — час¶
Проверяет, попадает ли текущий час в указанный диапазон или совпадает с конкретным значением. Использует системные часы и часовой пояс устройства. Модификатор hour.utc= сравнивает с UTC.
Замечание: Диапазон часов включает все минуты последнего часа. Например,
hour=9..17означает от 09:00 до 17:59 (включительно все 60 минут 17-го часа).
Синтаксис:
Где:
| Параметр | Описание |
|---|---|
first_hour |
Начало диапазона: 00-23. По умолчанию 00. |
last_hour |
Конец диапазона: 00-23. По умолчанию 23. |
exact_hour |
Точное значение: 00-23. |
Допустимые слои: Admin, Cache, Diagnostics, DNS-Proxy, Exception, Forward, Proxy, SSL, SSL-Intercept
Примеры:
; С 3:00 до 13:59 UTC
hour.utc=03..13
; Ровно 9-й час (09:00 - 09:59)
hour=9
; Рабочие часы (09:00 - 17:59)
hour=9..17
; Ограничение доступа в рабочее время
<Proxy>
weekday=1..5 hour=9..17 category=Social_Networking deny
См. также: day=, minute=, month=, time=, weekday=, year=, date=
14.3. minute= — минута¶
Проверяет, попадает ли текущая минута часа в указанный диапазон или совпадает с конкретным значением. Использует системные часы и часовой пояс устройства. Модификатор minute.utc= сравнивает с UTC.
Замечание об инвертированных диапазонах: Значение
minute=44..14интерпретируется как «с 44-й минуты до конца часа И с начала часа до 14-й минуты». Аналогично другим условиям времени с инвертированными диапазонами.
Синтаксис:
Где:
| Параметр | Описание |
|---|---|
first_minute |
Начало диапазона: 0-59. По умолчанию 0. |
last_minute |
Конец диапазона: 0-59. По умолчанию 59. |
exact_minute |
Точное значение: 0-59. |
Допустимые слои: Admin, Cache, Diagnostics, DNS-Proxy, Exception, Forward, Proxy, SSL, SSL-Intercept
Примеры:
; Первые 5 минут каждого часа
minute=0..5
; Последние 15 минут каждого часа
minute=45..59
; Инвертированный диапазон: с 44-й минуты через границу часа до 14-й
minute=44..14
; Первые 30 минут
minute=0..30
См. также: day=, hour=, month=, time=, weekday=, year=, date=
14.4. date= — диапазон дат¶
Принимает строковое значение.
Проверяет, попадает ли текущая дата в указанный диапазон. Сравнение выполняется с локальным временем устройства, если не указан модификатор .utc.
Формат строго YYYYMMDD / MMDD — без разделителей
Допустимы только YYYYMMDD (20260131) и MMDD (0131), опционально диапазоном через ...
Формат с дефисами (2026-01-31) не распознаётся и приводит к опасному поведению: дата
молча игнорируется, и правило срабатывает всегда (как будто условия даты нет). Всегда пишите
дату без разделителей.
Синтаксис:
Где:
| Параметр | Описание |
|---|---|
date_range |
Диапазон дат в формате YYYYMMDD..YYYYMMDD (полные даты) или MMDD..MMDD (без года — повторяется ежегодно). |
Формат MMDD..MMDD позволяет задавать ежегодно повторяющиеся периоды (например, праздничные сезоны), а YYYYMMDD..YYYYMMDD — конкретные календарные интервалы.
Допустимые слои: Admin, Cache, Diagnostics, DNS-Proxy, Exception, Forward, Proxy, SSL, SSL-Intercept
Примеры:
; Конкретный период (15-31 октября 2022)
date=20221015..20221031 condition="monitor URLs" access_log.monitor(yes)
; Ежегодный период (1 декабря - 15 января)
date=1201..0115
; UTC вариант
date.utc=20260101..20261231
См. также: day=, hour=, minute=, month=, time=, weekday=, year=
14.5. time= — время суток¶
Проверяет, попадает ли текущее время суток в указанный диапазон или совпадает с конкретным значением. Использует системные часы и часовой пояс устройства. Модификатор time.utc= сравнивает с UTC. В отличие от hour=, позволяет задавать точное время с точностью до минуты.
Замечание об инвертированных диапазонах: Значение
time=1900..0600интерпретируется как «с 19:00 до полуночи И с полуночи до 06:00» — ночное время.
Синтаксис:
Где:
| Параметр | Описание |
|---|---|
start_time |
Начало диапазона: 4 цифры в 24-часовом формате (nnnn), например 0900. По умолчанию 0000. |
end_time |
Конец диапазона: 4 цифры, например 1700. По умолчанию 2359. |
exact_time |
Точное значение: 4 цифры, например 1200. |
Допустимые слои: Admin, Cache, Diagnostics, DNS-Proxy, Exception, Forward, Proxy, SSL, SSL-Intercept
Примеры:
; С 3:00 до 13:00 UTC
time.utc=0300..1300
; Рабочие часы (09:00 - 17:00)
time=0900..1700
; Ночное время (инвертированный диапазон)
time=1900..0600
; Запрет доступа вне окна обслуживания
deny url.host=special_event.com time=!0900..1200
См. также: day=, hour=, minute=, month=, weekday=, year=, date=
14.6. day= — день месяца¶
Проверяет, попадает ли текущий день месяца в указанный диапазон или совпадает с конкретным значением. Использует системные часы и часовой пояс устройства. Модификатор day.utc= сравнивает с UTC.
Замечание об инвертированных диапазонах: Значение
day=25..5интерпретируется как «с 25-го числа до конца месяца И с 1-го по 5-е число следующего месяца» — удобно для периодов, пересекающих границу месяца (например, расчётные периоды).
Синтаксис:
Где:
| Параметр | Описание |
|---|---|
first_day |
Начало диапазона: 1-31. По умолчанию 1. |
last_day |
Конец диапазона: 1-31. По умолчанию 31. |
exact_day |
Точное значение: 1-31. |
Допустимые слои: Admin, Cache, Diagnostics, DNS-Proxy, Exception, Forward, Proxy, SSL, SSL-Intercept
Примеры:
; Новый Год (1 января)
day=1 month=1
; Первая половина месяца
day=1..15
; Конкретное число
day=15
; Период через границу месяца (25-е - 5-е)
day=25..5
См. также: date=, hour=, minute=, month=, time=, weekday=, year=
14.7. month= — месяц¶
Проверяет, попадает ли текущий месяц в указанный диапазон или совпадает с конкретным значением. Использует системные часы и часовой пояс устройства. Модификатор month.utc= сравнивает с UTC.
Замечание об инвертированных диапазонах: Значение
month=9..6интерпретируется как «с сентября по декабрь И с января по июнь» — то есть все месяцы, кроме июля и августа.
Синтаксис:
Где:
| Параметр | Описание |
|---|---|
first_month |
Начало диапазона: 1-12 (1 = январь, 12 = декабрь). По умолчанию 1. |
last_month |
Конец диапазона: 1-12. По умолчанию 12. |
exact_month |
Точное значение: 1-12. |
Допустимые слои: Admin, Cache, Diagnostics, DNS-Proxy, Exception, Forward, Proxy, SSL, SSL-Intercept
Примеры:
; Декабрь
month=12
; Второе полугодие
month=7..12
; Учебный год (сентябрь - июнь, инвертированный)
month=9..6
; Праздничный сезон (25 декабря - 1 января)
month=12 day=25.. / month=1 day=1
См. также: date=, day=, hour=, minute=, time=, weekday=, year=
14.8. year= — год¶
Проверяет, попадает ли текущий год в указанный диапазон или совпадает с конкретным значением. Использует системные часы и часовой пояс устройства. Модификатор year.utc= сравнивает с UTC.
Синтаксис:
Где:
| Параметр | Описание |
|---|---|
first_year |
Начало диапазона: четырёхзначный год, например 2025. |
last_year |
Конец диапазона: четырёхзначный год, например 2030. |
exact_year |
Точное значение: четырёхзначный год. |
Допустимые слои: Admin, Cache, Diagnostics, DNS-Proxy, Exception, Forward, Proxy, SSL, SSL-Intercept
Примеры:
; Временная политика на период проекта
<Proxy>
year=2026 month=1..6 condition="project_alpha" access_log.monitor(yes)
См. также: date=, day=, hour=, minute=, month=, time=, weekday=