Вот как это работает на моем сервере.Конфигурация nginX:
location ~ ^/attached {
auth_request /auth-here;
}
location /auth-here {
proxy_pass http://example.com/auth.php;
proxy_pass_request_body off;
proxy_set_header Content-Length "";
proxy_set_header X-Original-URI $request_uri;
}
location / {
try_files $uri $uri/ @rewrites;
}
location @rewrites {
rewrite ^/apple /favicon.ico break;
rewrite ^ /index.php last;
}
Тогда содержимое auth.php
session_start();
// check whether the user is logged in - using whatever mechanism your application is using
if(!$logged_in)
{
$u = trim($_SERVER['PHP_AUTH_USER']);
$p = trim($_SERVER['PHP_AUTH_PW']);
// if no Authorization provided - ask for one
if($u=='' OR $p=='')
{
header('WWW-Authenticate: Basic realm="Your session timed out - login again"');
header('HTTP/1.0 401 Unauthorized');
echo 'Bad login - wrong username or password';
die;
}
else
{
// try to login using the provided credentials
if(tryLogin($u,$p))
{
// we are now logged in
}
else
{
// could not login - ask authorization again
header('WWW-Authenticate: Basic realm="Your session timed out - login again"');
header('HTTP/1.0 401 Unauthorized');
echo 'Bad login - wrong username or password';
die;
}
}
}
Обычно, если пользователь вошел в систему, мы ничего не делаем.Если он / она не вошли в систему - мы запрашиваем учетные данные (или вы можете просто вернуть 403)