https://nginx.org/en/docs/http/ngx_http_core_module.html#location
Nginxизlocation
Команда работает следующим образом:
~*
модификатор)илис учетом регистраиз(~
модификатор)。^~
модификатор:нравиться Фрукты имеют самый длинныйсоответствоватьпрефиксизв этом месте есть этомодификатор,регулярное выражение не будет проверяться.=
модификатор:определениеURIи Расположениеизточныйсоответствовать。однажды найденный,Поиск прекращен.@
префикс:Перенаправить запросопределение了именование Расположение,Вместо использования для обычной обработки запросов. Не может быть вложенным,Вложенные местоположения также не могут быть включены.~
:осуществлятьс учетом регистраизрегулярное выражениесоответствовать。~*
:осуществлять不с учетом регистраизрегулярное выражениесоответствовать。^~
:осуществлять Обычное совпадение символов,Необычное выражение. Если матч успешен,Используйте только этот вариант,больше не соответствует другим параметрам,Обычно используется для сопоставления каталогов.=
:осуществлятьточныйсоответствовать,То есть точное совпадение обычных символов.@
:определениеименованиеизlocation,для внутренних перенаправлений,Напримерerror_page
,try_files
。=
)высший приоритет。нравиться果找到точныйсоответствовать,Nginx прекращает поиск дополнительных совпадений.^~
,тогда соблюдайте только это правило,В противном случае Nginx прекращает поиск других совпадений;,NginxБуду продолжать сотрудничать с другимиlocation
инструкция。Эти правила обеспечиваютlocation
инструкцияизсоответствовать Поведение,И позволяет разработчикам упорядоченно контролировать маршрутизацию и обработку запросов.
proxy_pass
)иметь дело с,Затем, если запрошенный URI не имеет косой черты в конце,Затем выполните постоянное перенаправление (301).Ниже приведен пример, основанный на предоставленной конфигурации:
location = / {
[ Конфигурация A ]
}
location / {
[ Конфигурация B ]
}
location /documents/ {
[ Конфигурация C ]
}
location ^~ /images/ {
[ Конфигурация D ]
}
location ~* \.(gif|jpg|jpeg)$ {
[ Конфигурация E ]
}
Примеры особого обращения:
location /user/ {
proxy_pass http://user.example.com;
}
location = /user {
proxy_pass http://login.example.com;
}
http://user.example.com
。http://login.example.com
。server {
listen 127.0.0.1:80;
set $test A;
set $testB B;
location / {
if ($test ~* "A") {
proxy_pass http://www.so.com;
break;
}
if ($testB ~* "B") {
proxy_pass http://www.sogou.com;
#break;
}
}
}
Когда надежда зависит от разныхизсостояниеосуществлятьдругойизproxy_pass
час,Может Используйте несколькоif
инструкция。Например,В конфигурации выше,Если соблюдено несколько условий,Сравниватьнравитьсясуществоватьпервыйif
Никтоиспользоватьbreak
,那么下一个состояние也会被осуществлять。Чтобы обеспечитьсоответствовать到первыйсостояние后就осуществлятьсоответствующийизproxy_pass
,Можетсуществоватьпервыйif
инструкция Китай плюсbreak
Ключевые слова。(существоватьNginxНиктоif-else
такизструктура)
В этом случае можно использовать несколько операторов if для удовлетворения логики обработки в разных условиях. Но следует отметить, что оператор if выполняется в модуле перезаписи Nginx и может оказывать некоторое влияние на производительность. Кроме того, вам нужно быть осторожным с операторами if, поскольку они могут вызвать неожиданные проблемы.
location / {
root html;
index index.html index.htm index.php;
proxy_redirect off;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $http_host;
proxy_http_version 1.1;
proxy_set_header Connection "";
if ( $query_string ~* "usg=0" ) {
proxy_pass http://local_workera;
}
if ( $query_string ~* "usg=1" ) {
proxy_pass http://local_workerb;
}
if ( $arg_uid ~* "(.*[AB]$)" ) {
proxy_pass http://local_workerf;
}
proxy_pass http://local_workera;
}
usg=0
и usg=1
Эти два параметра фиксированы, поэтому вы можете использовать $query_string
Выполняйте регулярное сопоставление.usg=0
и usg=1
Эти два параметра являются взаимоисключающими и поэтому помещены в location
Верх блока обработан корректно. И для uid
Спичку следует положить внизу или и использовать break
ключевое слово, чтобы не путать его с usg
Конфликт соответствия параметров.Для фиксированных значений параметров,Можетиспользоватьquery_string выполняет регулярное сопоставление, а для значений переменных параметров вам необходимо использоватьarg_parameterруководитьсоответствовать。для потенциально взаимоисключающихизпараметрсоответствоватьсостояние,Убедитесь, что вы правильно расставляете приоритеты,Или Используйте разрыв в соответствующих местах, чтобы прекратить выполнение последующих операторов if.