Подтвердить что ты не робот

Nginx и auth_basic

Я пытаюсь получить базовую аутентификацию, работающую с nginx в Ubuntu Jaunty. В nginx.conf я добавил эти две строки в контексте сервера:

server {
   ...
   auth_basic "Restricted Access";
   auth_basic_user_file /etc/nginx/.htpasswd;
   ...
}

Затем я apt-get'ed apache2-utils, чтобы получить htpasswd, который я использовал для создания файла htpasswd:

htpasswd -d -c /etc/nginx/.htpasswd joe

Когда я пытаюсь получить доступ к сайту, диалоговое окно проверки подлинности появляется, как ожидалось, но когда я добавляю имя пользователя и пароль, он просто обновляет диалоговое окно. Кажется, мне не нравится пароль, который я ему предоставляю. Я попытался запустить htpasswd как с параметром -d, так и без него, но все равно не повезло. Он отказался аутентифицироваться. Любые идеи, что я делаю неправильно?

Любая помощь будет оценена.

4b9b3361

Ответ 1

Вещи, которые я проверил бы:

  • Разрешения на `/etc/nginx/.htpasswd` - Может ли файл быть прочитан учетной записью, запущенной nginx? Вы можете попробовать, временно, используя `chmod 644`, чтобы убедиться, что все могут его прочитать. Если это сработает, вы можете выбрать подходящую комбинацию настроек `chown` и` chmod`, чтобы nginx и you/root могли ее прочитать, но другие пользователи не могут (для обеспечения безопасности).
  • Убедитесь, что `htpasswd` генерирует хеш в правильной форме; это обычно около 13 буквенно-цифровых символов (например, `username: wu.miGq/e3nro`). Команда CAN также может генерировать хэши MD5, которые будут больше похожи на `username: $apr1 $hzB2K... $b87zlCYMKufOxn9ol5QV4/` они не работают с nginx.
  • Посмотрите на увеличение отладочного вывода nginx и проверьте журналы ошибок для подсказок.

Ответ 2

Старый поток, но ответа нет, и он хорошо указан в Google.

Если вы получили эту ошибку и попробовали другие предложения, проверьте разрешения родительской папки вашего .htpasswd файла: пользователь nginx (www-data по умолчанию) должен читать и выполнить (это исправлено для меня).

Ответ 3

В другой игре я столкнулся с bash. Вместо ввода пароля через подсказку я использовал параметр -b htpasswd для ввода пароля в строке.

$ htpasswd -nb admin test123$secure

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

$ curl -u admin:test123$secure https://example.com

Наконец, проблема проявилась через echo

$ echo test123$secure
test123

Я допустил ошибку в использовании знака долы ($) в bash, который был интерпретирован как пустая переменная, тем самым опуская все остальное. Этого можно избежать, отбросив опцию -b и просто используя приглашение ввести пароль.