Как предотвратить использование nginx для определенных подкаталогов обратного прокси

11

На Apache вы можете ProxyPass все, кроме одного или нескольких подкаталогов (с "!").

    ProxyPass /subdir !
    ProxyPass / http://localhost:9999/

Что такое эквивалент Nginx?

Мое первое предположение явно не работает:

 location /subdir {
      root /var/www/site/subdir;
  }

 location / {
      proxy_pass http://localhost:9999/ ;
  }
Falken
источник

Ответы:

11

Вы можете привязать proxy_pass к ТОЧНОМУ пути, который вам нравится, вот так

location = / {
    proxy_pass http://localhost:9999/;
}

Это гарантирует, что никакой другой путь не будет пройден, кроме /

ИЛИ

Вы можете использовать этот синтаксис только для подкаталогов, которые должны быть сопоставлены

location ^~ /subdir {
     alias /var/www/site/subdir;
}

location / {
    proxy_pass http://localhost:9999/ ;
}

Соответствует ^~подкаталогу, а затем прекращает поиск, поэтому выполнение /не будет выполнено. Это описано здесь .

Кристофер Перрен
источник
root / var / www / site / subdir должен быть root / var / www / site в моем случае, иначе nginx попытается получить доступ к / var / www / site / subdir / subdir.
Tinus
Вы правы. Или это, или вы можете использовать aliasвместоroot
Кристофер Перрин
1
Не могли бы вы объяснить это ^~больше? Я не мог понять, что он делает. Я пытался прочитать ссылку, которую вы послали, но все еще не могу ее получить. Если самое длинное совпадающее местоположение префикса имеет модификатор «^ ~», то регулярные выражения не проверяются.
Мохаммед Нурельдин
@MohammedNoureldin по сути означает, что он пытается сопоставить префикс на пути и не оценивает регулярные выражения.
Кристофер Перрен
1
@MohammedNoureldin - это первая часть пути, которую вы хотите использовать для местоположения. И да, это без регулярных выражений.
Кристофер Перрен,