2013-05-12 3 views
5

Я пытаюсь защитить паролем каталог на моем сайте, работающем на Nginx, который содержит такие вещи, как phpMyAdmin, MemcacheMyAdmin и другие утилиты администратора.403 запрещено - Nginx - с использованием правильных учетных данных

Этот каталог находится в корневом каталоге моего сайта по адресу:

domain.com/control/ 

Абсолютный путь на моем сервере по адресу:

/home/deployer/sites/domain.com/control/ 

Я создал файл .htpasswd в каталоге с помощью эта команда:

htpasswd -c /home/deployer/sites/domain.com/control/.htpasswd admin 

Файл присутствует, принадлежит пользователю «root» и имеет разрешения 0644.

В файле .conf для этого домена в Nginx я использую следующий блок местоположения, требующий аутентификации.

location /control { 
    auth_basic   "Restricted Area: Control"; 
    auth_basic_user_file /home/deployer/sites/domain.com/control/.htpasswd; 
    } 

При переходе в защищенную паролем директорию мне предлагается ввести имя пользователя и пароль. Я ввожу свои ранее созданные учетные данные, а затем мне предоставляется ошибка 403 запрещенной страницы.

журналы доступа показать мне, что я поражаю приглашение для входа, а затем войти в качестве «администратора» пользователь:

64.123.456.225 - - [12/May/2013:17:30:48 +0000] "GET /control HTTP/1.1" 401 597 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.64 Safari/537.31" 
64.123.456.225 - admin [12/May/2013:17:30:48 +0000] "GET /control HTTP/1.1" 301 185 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.64 Safari/537.31" 
64.123.456.225 - admin [12/May/2013:17:30:59 +0000] "GET /control/memcache/ HTTP/1.1" 403 199 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.64 Safari/537.31" 

Журналы ошибок показывают следующее:

2013/05/12 17:31:01 [error] 30462#0: *1 directory index of "/home/deployer/sites/domain.com/control/memcache/" is forbidden, client: 64.123.456.225, server: domain.com, request: "GET /control/memcache/ HTTP/1.1", host: "domain.com" 
2013/05/12 17:31:09 [error] 30462#0: *1 directory index of "/home/deployer/sites/domain.com/control/memcache/" is forbidden, client: 64.123.456.225, server: domain.com, request: "GET /control/memcache/ HTTP/1.1", host: "domain.com" 

Если я удалите блок Auth для Nginx .conf для этого сайта, я могу получить доступ к странице, как обычно.

Спасибо за помощь!

ответ

4

Это может быть вызвано разрешениями или несуществующей или недопустимой директивой индекса каталога.

Разрешения: Если www принадлежит nginx, но/var принадлежит root, то www наследует разрешения var, тем самым отрицая доступ.

Директива указателя: Если индекс каталога установлен в недоступный файл, тогда nginx будет вызывать 403. В этом случае я предполагаю, что он по умолчанию является index.htm вместо index.php.

Удачи!

+0

Это правильно. Я добавил «index index.php;» к блоку местоположения, и он загружается. Очень ценится. –

+0

Чтобы связать другой ответ jgpatrick3, предмет индекса также может быть проблемой, если вы пытаетесь использовать autoindex, потому что аутентификация отменяет «autoindex on» из внешней директивы, поэтому вам нужно «вручную» повторно включить ' autoindex on' в аутентифицированной зоне. – Dubslow

0

Ошибка не аутентификации, но каталог вашего пытаются получить доступ к и его содержание:

/home/deployer/sites/domain.com/control/memcache/ 

Когда веб-сервер обрабатывает запрос, он проверяет наличие известных индексных файлов, таких как index.html, индекс .php и т. д. Если он не находит одного из них, он интерпретирует запрос как попытку перечислить все файлы в данном каталоге. Это, кажется, запрещено в вашей конфигурации nginx (что хорошо). Сообщение:

directory index of [...] is forbidden 

Поэтому я предполагаю, что каталог

/home/deployer/sites/domain.com/control/memcache/ 

пуст или не содержит индексный файл, который Nginx признает.
Если вы запрашиваете конкретный файл или создаете файл index.html, ошибка 403 должна исчезнуть.

7

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

Я получил 403 с правильными учетными данными тоже, индексный файл не так, существование файла не происходит ни и конфигурация была такова:

auth_basic "some message"; 
auth_basic_user_file /etc/nginx/.htpasswd; 

Проблема здесь состоит в том, что /etc/nginx/.htpasswd является абсолютным путь, который фактически указывает внутри того же каталога с nginx.conf. Это как-то путало nginx, чтобы найти файл. (Говоря как-то, я не совсем понимаю, как не мог nginx справиться с этим, потому что совершенно очевидно, что путь является абсолютным и просто его читать, поэтому, если у кого-то есть лучшее объяснение, пожалуйста, поделитесь комментариями).

Если изменить его на:

auth_basic_user_file .htpasswd; 

Это сработало, потому что nginx ожидал найти этот файл в том же каталоге с nginx.conf.

Даже если я изменить его на:

auth_basic_user_file /home/user/.htpasswd; #and move the file to /home/user too 

Он работал также, потому что я думаю, что путь не перепутать nginx.

+0

Да, я думаю, это должен быть правильный ответ. Это единственный ответ, который мне помог. – m4l490n

0

я описал шаги с раствором «Как установить проверку подлинности» на Nginx с помощью .htpasswd HERE

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

Спасибо.

3

Я пришел сюда, потому что у меня была аналогичная проблема. Я установил каталог верхнего уровня, чтобы быть «autoindex on;». Я добавил пароль для подкаталога с отдельным объявлением для («/ подкаталог») без повторения «autoindex on;» Это оставило nginx в поисках индексного файла, и поскольку его не было, я увидел «запрещенный».

Как только я добавил «autoindex on;» к настройке для «/ subdirectory». список каталогов появился при просмотре подкаталога.

Смежные вопросы