Nginx обслуживает статический контент за аутентифицированной страницей

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

Буду признателен за любую помощь, спасибо.

server {
    listen 80 default_server;
    listen [::]:80 default_server ipv6only=on;

    root /usr/share/nginx/html;
    index index.html index.htm index.php;

    # Make site accessible from http://localhost/
    server_name localhost;

    location / {
            # First attempt to serve request as file, then as
            # directory, then fall back to displaying a 404.
              try_files $uri $uri/ =404;
            # Uncomment to enable naxsi on this location include
            # /etc/nginx/naxsi.rules
    }

    location /website {

    }

    location /library {
        auth_basic "Restricted";
        auth_basic_user_file /etc/nginx/.htpasswd;
    }

person Zac Jacob    schedule 25.12.2015    source источник


Ответы (1)


Ваш блок location /library наложит требование базовой аутентификации и будет предоставлять одни и те же статические файлы в /usr/share/nginx/html/library всем пользователям, которые могут успешно пройти аутентификацию. Короче говоря, все пользователи, успешно авторизовавшиеся, увидят одни и те же файлы в вашей текущей конфигурации.

Чтобы предоставлять разные статические файлы разным пользователям, учтите, что обычная проверка подлинности установит переменную $remote_user (см. docs), которые можно использовать для динамической настройки.

Например, если вы хотите обслуживать разные папки для каждого идентификатора пользователя (по одному и тому же URL-адресу /library), вы должны использовать такой блок, как:

location /library {
    auth_basic "Restricted";
    auth_basic_user_file /etc/nginx/.htpasswd;
    alias /usr/share/nginx/html/$remote_user/;
}

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

Если пользователь не проходит базовую аутентификацию, ему будет показана ошибка 403 Forbidden, которую вы можете обработать с помощью директивы error_page, чтобы показать что-то более полезное, чем просто базовая ошибка. Точно так же, если пользователь может успешно авторизоваться, а соответствующая папка не существует, он увидит ошибку 404, которую вы снова можете обработать с помощью директивы error_page.

person davidjb    schedule 26.12.2015