Nginx: auth_basic для всего, кроме определенного места - программирование
Подтвердить что ты не робот

Nginx: auth_basic для всего, кроме определенного места

Как включить HTTP Basic Auth для всего, кроме определенного файла?

Вот моя текущая конфигурация блока сервера для местоположения:

location / {
       auth_basic "The password, you must enter.";
       auth_basic_user_file /etc/nginx/htpasswd;
}

location /README {
       auth_basic off;
}

Однако в /README он все еще запрашивает пароль.

Как мы можем это исправить?

Спасибо! Марк

4b9b3361

Ответ 1

Попробуйте использовать знак =, который поможет вам:

location = /README {
       auth_basic off;
       allow all; # Allow all to see content 
}

Ответ 2

Я делаю что-то подобное, используя "map" вместо "if", чтобы назначить переменную real_hasic и htpasswd файл:

map $http_host $siteenv {
  default       dev;

  ~^(?<subdomain>.+)\.dev dev;
  ~^(?<subdomain>.+)\.devprofile devprofile;
  ~^(?<subdomain>.+)\.devdebug devdebug;
  ~^(?<subdomain>.+)\.test test;
  ~^(?<subdomain>.+)\.demo demo;
  ~^(?<subdomain>.+)\.stage stage;

  # Live
  ~^(?<subdomain>.+)\.live live;
  ~^.*\.(?P<subdomain>.+)\.[a-zA-Z]* live;
}

map $http_host $auth_type {
  default       "Restricted";

  ~^(?<subdomain>.+)\.dev "Development";
  ~^(?<subdomain>.+)\.devprofile "Development";
  ~^(?<subdomain>.+)\.devdebug "Development";
  ~^(?<subdomain>.+)\.test "Testing";
  ~^(?<subdomain>.+)\.stage "Stage";
  ~^(?<subdomain>.+)\.demo "Demo";

  # Live
  ~^(?<subdomain>.+)\.live "off";
  ~^.*\.(?P<subdomain>.+)\.[a-zA-Z]* "off";
}

server {
  .. etc ..

  auth_basic            $auth_type;
  auth_basic_user_file  /etc/nginx/conf.d/htpasswd-$siteenv;
}

Ответ 4

Я пробовал с ниже одного, все еще он спрашивает пароль.

location = /README {
       auth_basic off;
       allow all; # Allow all to see content 
}

пожалуйста помоги

Ответ 5

Я делаю следующее:

location = /hc.php {
  auth_basic "off";
}

location / {
  try_files $uri $uri/ =404;
}
  • Узкое совпадение: location = /somefile.txt {} на первом месте, поэтому location / {} может захватить оставшиеся запросы
  • auth_basic "off" требует кавычек, насколько я знаю,
  • Я также использую точное (полное, если хотите) совпадение, чтобы прекратить итерации по другим местам, определенным в конфигурации (подробнее читайте ниже, чтобы узнать, что он делает)

Вероятно, это будет работать в разных порядках и/или без двойных кавычек, но почему бы не попытаться сделать все как можно более правильным и полным, если это возможно.

Наиболее важные модификаторы:

(нет) Нет модификатора вообще означает, что местоположение интерпретируется как префикс. Чтобы определить совпадение, местоположение будет сопоставлено с началом URI.

=: знак равенства можно использовать, если местоположение должно соответствовать точному URI запроса. Когда этот модификатор совпадает, поиск останавливается прямо здесь.

~: тильда означает, что это местоположение будет интерпретироваться как регистрозависимое совпадение RE.

~ *: тильда, за которой следует модификатор звездочки, означает, что местоположение будет обрабатываться как нечувствительное к регистру совпадение RE.

^ ~: Предполагая, что этот блок является лучшим не-RE соответствием, карат, за которым следует модификатор тильды, означает, что соответствие RE не будет иметь место.

цитата отсюда: https://www.keycdn.com/support/nginx-location-directive