Вопрос или проблема
Как создать блок location в nginx, который использует шаблон для обработки возвратов?
У меня есть следующий блок nginx:
location /fonts/ {
alias /data/fonts/ofm/;
try_files $uri =404;
}
Я хотел бы изменить его так, чтобы все отсутствующие шрифты обслуживались соответствующими диапазонами символов из Noto Sans.
Например, запрос к
/fonts/MissingFont/256-511.pbf
должен обслуживать следующий файл:
/fonts/Noto%20Sans%20Regular/256-511.pbf
Сопоставление по той же части /256-511.pbf
важно, это указывает диапазоны символов.
Как я могу это сделать? (Я предполагаю, что нужно использовать регулярные выражения и root вместо alias, но пока не вижу деталей. Нужен ли мне один или два блока location? Использую ли я try_files?)
Ответ или решение
Чтобы настроить блок location
в Nginx, который будет обрабатывать запросы к шрифтам, и если файл не найден, будет возвращать соответствующий файл шрифта из Noto Sans, можно использовать директиву try_files
вместе с регулярными выражениями. В вашем случае, необходимо использовать два блока location
: один для обработки запросов к вашим шрифтам, а другой для возврата запасных шрифтов.
Вот пример, который иллюстрирует данное решение:
server {
listen 80;
server_name yourdomain.com;
location /fonts/ {
alias /data/fonts/ofm/;
try_files $uri @missing_fonts;
}
location @missing_fonts {
# Извлекаем имя файла, запрашиваемого клиентом
set $requested_file $uri;
# Удаляем префикс /fonts/ для получения нужной части
rewrite ^/fonts/(.*)$ /fonts/Noto%20Sans%20Regular/$1 break;
# Попробуем найти файл Noto Sans
try_files $uri =404;
}
}
Объяснение конфигурации:
-
Первый блок
location /fonts/
:- Указывает корневую папку для шрифтов через директиву
alias
. - Использует
try_files
для проверки существования запрашиваемого файла$uri
. - Если файл не найден, управление передается в блок
@missing_fonts
.
- Указывает корневую папку для шрифтов через директиву
- Второй блок
location @missing_fonts
:- Здесь мы используем переменную
$requested_file
для хранения запрашиваемого URI. - Директива
rewrite
используется для создания нового пути к шрифту Noto Sans. Она удаляет префикс/fonts/
и добавляет/fonts/Noto%20Sans%20Regular/
, что позволяет использовать паттерн из запрашиваемого файла для формирования нового пути. - Второй вызов
try_files
проверяет наличие нового файла. Если он не существует, возвращается ошибка 404.
- Здесь мы используем переменную
Эта конфигурация позволяет вашему серверу Nginx автоматически выдавать шрифты из Noto Sans, если оригинальный запрашиваемый файл не был найден. Убедитесь, что пути и имена шрифтов соответствуют вашему фактическому хранилищу шрифтов на сервере.