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, так и без него, но все равно не повезло. Он отказался аутентифицироваться. Любые идеи, что я делаю неправильно?
Любая помощь будет оценена.
Ответы
Ответ 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
и просто используя приглашение ввести пароль.