Можно ли внутри одного location определить другой location,
и чтобы при этом указанные ранее параметры наследовались
из первого во второй?
Хочу добиться следующего:
location /projects/ {
fastcgi_pass localhost:1027;
fastcgi_param SCRIPT_NAME /projects;
if ($fastcgi_script_name ~ "^/projects(.*)$") {
set $path_info $1;
}
fastcgi_param PATH_INFO $path_info;
fastcgi_param QUERY_STRING $query_string;
fastcgi_param REQUEST_METHOD $request_method;
fastcgi_param CONTENT_TYPE $content_type;
fastcgi_param CONTENT_LENGTH $content_length;
location ~ "^/projects/.*/login$" {
auth_basic "Trac projects";
auth_basic_user_file /etc/trac/htpasswd;
}
}
Т.е. при запросах /projects/pr1/login просить авторизоваться.
Однако, указанный выше пример не работает: nginx ищет страницу
/html/projects/pr1/login вместо передачи FastCGI-серверу.
Т.е. внутри второй секции location требуется повторить все
предыдущие директивы fastcgi_*.
В итоге я вынес второй location уровнем выше и всё продублировал.
Но это не очень удобно, на мой взгляд.
Наследование конфигураций во вложенных location'ах на данный момент
поддерживаются частично и потому они недокументированы. Не поддерживаются
как минимум директивы alias, proxy_pass и fastcgi_pass.
Игорь Сысоев
http://sysoev.ru