auth_basic и неавторизованные пользователи

Dmitriy Lyalyuev dmitriy at lyalyuev.pp.ua
Mon Dec 3 08:01:21 UTC 2012


Добрый день.

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

server {
    listen 80;
    server_name wiki.localdomain;
    root /opt/data/wiki;

    error_log /dev/null;
    access_log /dev/null;

    if ($args ~* "skin|raw|template|maxrev|minrev|currev") {
         rewrite ^(.*)$ /bin/view/$1?;
    }

    rewrite ^/bin/view(.*)$ / redirect;
    rewrite ^(/Help)$ /bin/view/Help last;
    rewrite ^/(Main|System|Sandbox|Help)(/[A-Z].*)$ /bin/view/$1$2 last;
    rewrite ^/([A-Z].*) /bin/view/Help/$1 last;
    rewrite ^/(Help)(/[A-Z].*)$ $2;
    rewrite ^/([A-Z].*) /bin/view/Help/$1 last;
    rewrite ^/$ /bin/view/Help last;


    location / {
         limit_except GET POST { deny all; }
    }

    location ~* /pub/.*\.(s?p?html?|php3?|pl|py|cgi)$ {
         types {}
         default_type application/octet-stream;
    }

    location ~ /bin/configure {
#        allow all;
         deny all;
         error_page 404 502 504 = @configure;
    }

    location ~ 
/bin/view/(System|System/.*|Main|Main/.*|Sandbox|Sandbox/.*) {
         auth_basic               "Enter your WikiName. (First name and 
last name, no space, no dots, capitalized, e.g. JohnSmith). Cancel to 
register if you do not have one.";
         auth_basic_user_file     /opt/data/wiki/data/.htpasswd;
         error_page 404 502 504 = @foswiki;
    }

    location ~ /bin/.* {
         error_page 404 502 504 = @foswiki;
    }

    location ~ 
(^/pub/Trash|^/lib|^/data|^/locale|^/templates|^/tools|^/work)  { deny 
all; }

    location @foswiki {
         gzip off;
         fastcgi_pass             unix:/var/run/wiki/fcgi.sock;
         fastcgi_split_path_info  ^(/bin/\w+)(.*);
         fastcgi_param            SCRIPT_FILENAME 
/opt/data/wiki$fastcgi_script_name;
         fastcgi_param            PATH_INFO       $fastcgi_path_info;
         fastcgi_param            SCRIPT_NAME $fastcgi_script_name;
         fastcgi_param            AUTH_USER       $remote_user;
         fastcgi_param            REMOTE_USER     $remote_user;
         include fastcgi_params;
    }

    location @configure {
         gzip off;
         fastcgi_pass              unix:/var/run/wiki/configure.sock;
         fastcgi_split_path_info   ^(/bin/configure)(.*);
         fastcgi_param             SCRIPT_FILENAME 
/opt/data/wiki/bin/configure;
         fastcgi_param             PATH_INFO $fastcgi_path_info;
         fastcgi_param             SCRIPT_NAME $fastcgi_script_name;
         fastcgi_param             REMOTE_USER       $remote_user;
         include fastcgi_params;
    }
}

В данном случае должно работать так:
1. Пользователь заходит на /Help и видит контент, который доступен всем.
2. Пользователь, зайдя на /Main/... авторизуется, потом переходит на 
/Help и видит административную часть страницы.

Если в локейшин /bin/.* добавить auth_basic, то все ок, кроме того, что 
и у обычных пользователей начинает просить логин и пасс.

Может я как-то сложно объяснил, но сам решить проблему не могу. Помогите 
пожалуйста.



Подробная информация о списке рассылки nginx-ru