В виртуальном хосте Nginx, я добавил эти места, два из которых используют регулярные выражения:Стоит ли пытаться оптимизировать регулярные выражения Nginx?
location ~ /-/pubsub/subscribe/(.*)$ {
# subscribe to websocket
}
location ~ /-/pubsub/publish/(.*)$ {
# websocket publish endpoint
}
location/{
# reverse proxy to the application server
}
Но вместо этого я могу сделать что-то вроде этого, чтобы «скрыть» регулярные выражения?
location /-/pubsub/ { <-- can be tested without any regex matching
location ~ subscribe/(.*)$ { ... }
location ~ publish/(.*)$ { ... }
}
location/{
# reverse proxy
}
Мне кажется, что это позволило бы избежать разбора каких-либо регулярных выражений для запроса сопоставления location /
, потому что они будут сравниваться с location /-/pubsub/
(без регулярных выражений) вместо location ~ /-/pubsub/whatever/(.*)$
(с регулярным выражением), не так ли?
Точно так же, я отделенный мои добавления видео от других загрузки, так как видео загрузки использовать регулярное выражение:
location /-/uploads/public/video/ {
location ~ \.(mp4|m4v|m4a)$ { <-- regex matching for videos only
mp4;
}
}
location /-/uploads/public/ {
# all other files: no regex matching needed
}
Но я не уверен, если это-крошечный-разрядный Более сложная конфигурация, чтобы избежать регулярных выражений, имеет смысл. Сохранение видео в другой папке, чтобы избежать появления регулярных выражений. Должно ли это быть быстрее? И это стоит того?
Было бы быстрее, если поиск шаблонов происходит часто; тем меньше накладных расходов, как правило, лучше, особенно на веб-сервере. Даже оптимизированное регулярное выражение может иметь большое значение с точки зрения эффективности. –
@ l'L'l Почему это будет быстрее, если поиск произойдет? Будет ли Nginx потом оптимизировать его как-то, потому что это более важно, потому что оно используется часто? В любом случае, каждый пользователь, который посещает веб-сайт, будет загружать как 100 крошечных изображений аватара пользователя 25x25 (веб-приложение является программным обеспечением форума, а на странице списка тем показаны аватары для пользователей в самых последних темах). CDN будет иметь смысл, но я бы хотел, чтобы это было довольно быстро и без CDN. – KajMagnus
Рассмотрим, например, ваш шаблон [. (Mp4 | m4v | m4a)] (https: // regex101.com/r/hK7wW1/1), для каждого файла каждый раз при каждом движке regex движется примерно 68 шагов; на сервере с интенсивным трафиком, который может складываться (главным образом, накладные расходы процессора). Соответствие шаблону Regex отлично, однако, если есть более прямой маршрут, то возьмите его. –