І регекс, і файли, що додаються, є хорошими методами, і я часто їх використовую. Але іншою альтернативою є використання "названого місця", що є корисним підходом у багатьох ситуаціях - особливо складніших. Офіційний «Якщо це зло» сторінка показує , по суті, такі як хороший спосіб робити речі:
error_page 418 = @common_location;
location /first/location/ {
return 418;
}
location /second/location/ {
return 418;
}
location @common_location {
# The common configuration...
}
У цих різних підходів є переваги та недоліки. Одна велика перевага для регулярного вираження полягає в тому, що ви можете захоплювати частини матчу та використовувати їх для зміни відповіді. Звичайно, зазвичай можна досягти подібних результатів з іншими підходами, встановивши змінну в початковому блоці або використовуючи map
. Недоліком підходу регулярного вираження є те, що він може стати непростим, якщо ви хочете відповідати різним місцеположенням, плюс низький пріоритет регулярного виразів може просто не відповідати тому, як ви хочете співставити місця - не кажучи вже про те, що очевидно впливають на ефективність від регулярних виразів у деяких випадках.
Основна перевага включення файлів (наскільки я можу сказати) полягає в тому, що він трохи гнучкіший щодо того, що саме ви можете включити - наприклад, це не повинно бути блоком повного місцезнаходження. Але це також просто суб'єктивно трохи незграбніше, ніж названі місця.
Також зауважте, що існує відповідне рішення, яке ви можете використовувати в подібних ситуаціях: вкладені місця. Ідея полягає в тому, що ви б почали з дуже загального розташування, застосували певну конфігурацію, спільну для кількох можливих збігів, а потім мали б окремі вкладені місця для різних типів шляхів, які ви хочете зіставити. Наприклад, може бути корисно зробити щось подібне:
location /specialpages/ {
# some config
location /specialpages/static/ {
try_files $uri $uri/ =404;
}
location /specialpages/dynamic/ {
proxy_pass http://127.0.0.1;
}
}