Назад | Перейти на главную страницу

Обратный прокси nginx с basic_auth - 404 Not found

У меня есть блок сервера nginx для содержимого proxy_pass с трех серверов: gitlab, Rshiny и статического содержимого из другого блока сервера nginx. Все это работает нормально, пока я не попытаюсь добавить защиту паролем к одному из каталогов на моем сайте со статическим содержимым. У меня такая конфигурация:

Блок местоположения для прокси:

location /project_builds/ {
    rewrite ^/project_builds/(.*)$ /$1 break;
    proxy_pass http://localhost:8000;
    proxy_redirect http://localhost:8000/ $scheme://$host/project_builds/;
    }   

Серверный блок для статической страницы:

server {
    listen 8000;
    server_name localhost;

location / {
    root /web/project_builds/;
    index index.html;
    autoindex on;    
    }

location /campy_SAM {
    auth_basic "Restricted content";
    auth_basic_user_file /web/password_files/campy_SAM/.htpasswd;
    }
}

Результатом такой конфигурации является то, что корневой материал статического сайта отображается нормально в прокси-месте, а имя пользователя и пароль запрашиваются для подкаталога статической страницы, как я и ожидал. Однако, когда я указываю правильное имя пользователя и пароль, я получаю страницу «404 Not Found». Когда я закомментирую две строки auth_basic в конфигурации, содержимое подкаталога отображается нормально.

Мне что-то не хватает в блоке местоположения для прокси, чтобы аутентификация по паролю работала правильно?

логи с сервера:

error.log (неверный пароль)

2014/06/27 16:55:23 [ошибка] 30504 # 0: * 64 пользователя "campy_SAM": несоответствие пароля, клиент: 127.0.0.1, сервер: localhost, запрос: "GET /campy_SAM/project_page.html HTTP / 1.0 ", хост:" localhost: 8000 ", реферер:" http: // ******************** / project_builds / "

error.log (правильный пароль)

2014/06/27 16:55:56 [ошибка] 30504 # 0: * 67 open () "/usr/share/nginx/html/campy_SAM/project_page.html" не удалось (2: нет такого файла или каталога), клиент : 127.0.0.1, сервер: localhost, запрос: «GET /campy_SAM/project_page.html HTTP / 1.0», хост: «localhost: 8000», реферер: «http: // *********** ****** / project_builds / "

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

server {
listen 8000;
server_name localhost;
root /web/project_builds/;
location / {
index index.html;
autoindex on;    
}

location /campy_SAM {
auth_basic "Restricted content";
auth_basic_user_file /web/password_files/campy_SAM/.htpasswd;
}

}

По-прежнему любопытно, что это сработало, когда я удалил аутентификацию с корнем внутри первого блока местоположения .... Я, наверное, могу жить, не понимая, почему это так :)