Перейти к содержанию

Глава 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) или отдельные правила на каждое значение.

Синтаксис:

weekday[.utc]={[first_day]..[last_day]|exact_day|(list)}

Где:

Параметр Описание
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-го часа).

Синтаксис:

hour[.utc]={[first_hour]..[last_hour]|exact_hour}

Где:

Параметр Описание
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-й минуты». Аналогично другим условиям времени с инвертированными диапазонами.

Синтаксис:

minute[.utc]={[first_minute]..[last_minute]|exact_minute}

Где:

Параметр Описание
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[.utc]=date_range

Где:

Параметр Описание
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
; Блокировка во время мероприятия
<Proxy>
    date=20260601..20260615 url.host=special_event.com deny

См. также: day=, hour=, minute=, month=, time=, weekday=, year=

14.5. time= — время суток

Проверяет, попадает ли текущее время суток в указанный диапазон или совпадает с конкретным значением. Использует системные часы и часовой пояс устройства. Модификатор time.utc= сравнивает с UTC. В отличие от hour=, позволяет задавать точное время с точностью до минуты.

Замечание об инвертированных диапазонах: Значение time=1900..0600 интерпретируется как «с 19:00 до полуночи И с полуночи до 06:00» — ночное время.

Синтаксис:

time[.utc]={[start_time]..[end_time]|exact_time}

Где:

Параметр Описание
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
; Ограничение по точному времени
<Proxy>
    time=0830..1730 weekday=1..5 category=Streaming deny

См. также: day=, hour=, minute=, month=, weekday=, year=, date=

14.6. day= — день месяца

Проверяет, попадает ли текущий день месяца в указанный диапазон или совпадает с конкретным значением. Использует системные часы и часовой пояс устройства. Модификатор day.utc= сравнивает с UTC.

Замечание об инвертированных диапазонах: Значение day=25..5 интерпретируется как «с 25-го числа до конца месяца И с 1-го по 5-е число следующего месяца» — удобно для периодов, пересекающих границу месяца (например, расчётные периоды).

Синтаксис:

day[.utc]={[first_day]..[last_day]|exact_day}

Где:

Параметр Описание
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
; Специальные мероприятия по датам
<Proxy>
    day=25 month=12 url.host=holiday_site.com allow

См. также: date=, hour=, minute=, month=, time=, weekday=, year=

14.7. month= — месяц

Проверяет, попадает ли текущий месяц в указанный диапазон или совпадает с конкретным значением. Использует системные часы и часовой пояс устройства. Модификатор month.utc= сравнивает с UTC.

Замечание об инвертированных диапазонах: Значение month=9..6 интерпретируется как «с сентября по декабрь И с января по июнь» — то есть все месяцы, кроме июля и августа.

Синтаксис:

month[.utc]={[first_month]..[last_month]|exact_month}

Где:

Параметр Описание
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
; Летние ограничения
<Proxy>
    month=6..8 category=Education allow

См. также: date=, day=, hour=, minute=, time=, weekday=, year=

14.8. year= — год

Проверяет, попадает ли текущий год в указанный диапазон или совпадает с конкретным значением. Использует системные часы и часовой пояс устройства. Модификатор year.utc= сравнивает с UTC.

Синтаксис:

year[.utc]={[first_year]..[last_year]|exact_year}

Где:

Параметр Описание
first_year Начало диапазона: четырёхзначный год, например 2025.
last_year Конец диапазона: четырёхзначный год, например 2030.
exact_year Точное значение: четырёхзначный год.

Допустимые слои: Admin, Cache, Diagnostics, DNS-Proxy, Exception, Forward, Proxy, SSL, SSL-Intercept

Примеры:

; Конкретный год
year=2026

; Диапазон лет
year=2025..2030

; UTC вариант
year.utc=2026
; Временная политика на период проекта
<Proxy>
    year=2026 month=1..6 condition="project_alpha" access_log.monitor(yes)

См. также: date=, day=, hour=, minute=, month=, time=, weekday=