Как я могу иметь одинаковое правило для двух мест в конфигурации NGINX?
Я пробовал следующее
server {
location /first/location/ | /second/location/ {
..
..
}
}
но перезагрузка nginx выкинула эту ошибку:
nginx: [emerg] invalid number of arguments in "location" directive**
nginx
nginx-location
user1661010
источник
источник
nginx/1.13.2
proxy_pass
работать, посмотрите этот ответ: stackoverflow.com/a/46625656/1246870Другой вариант - повторить правила в двух местах префиксов, используя включенный файл. Поскольку местоположения префиксов в конфигурации не зависят от местоположения, их использование может сэкономить некоторую путаницу, поскольку вы добавите другие местоположения регулярных выражений позже. Избежание мест регулярных выражений, когда вы можете, поможет плавно масштабировать вашу конфигурацию.
Вот пример shared.conf:
источник
shared.conf
пример и пример?И регулярные выражения, и включенные файлы - хорошие методы, и я часто использую их. Но другой альтернативой является использование «именованного местоположения», что является полезным подходом во многих ситуациях, особенно в более сложных. Официальный «Если это зло» страница показывает , по существу, следующие как хороший способ делать вещи:
У этих различных подходов есть свои преимущества и недостатки. Одним из больших преимуществ регулярного выражения является то, что вы можете захватывать части матча и использовать их для изменения ответа. Конечно, вы можете достичь аналогичных результатов с другими подходами, либо установив переменную в исходном блоке, либо используя
map
. Недостатком подхода регулярных выражений является то, что он может стать громоздким, если вы хотите сопоставлять различные местоположения, плюс низкий приоритет регулярного выражения может просто не соответствовать тому, как вы хотите сопоставлять местоположения - не говоря уже о том, что, очевидно, это влияет на производительность от регулярных выражений в некоторых случаях.Основное преимущество включения файлов (насколько я могу судить) состоит в том, что он немного более гибок в отношении того, что именно вы можете включить - например, он не должен быть полным блоком местоположения. Но это также субъективно немного грубее, чем названные места.
Также обратите внимание, что есть связанное решение, которое вы можете использовать в подобных ситуациях: вложенные местоположения. Идея состоит в том, что вы должны начать с очень общего местоположения, применить некоторую конфигурацию, общую для нескольких возможных совпадений, а затем иметь отдельные вложенные местоположения для различных типов путей, которые вы хотите сопоставить. Например, может быть полезно сделать что-то вроде этого:
источник
Это короткий, но эффективный и проверенный подход:
location ~ (patternOne|patternTwo){ #rules etc. }
Таким образом, можно легко иметь несколько шаблонов с простым синтаксисом канала, указывающих на один и тот же блок / правила расположения.
источник