Логика обработки опций в location
Anton Kiryushkin
swood at fotofor.biz
Wed Mar 18 15:27:30 UTC 2015
Здравствуйте.
Есть следующая структура
server {
location = /a.php {
try_files @allow @allow;
}
location = /b.php
try_files @allow @allow;
}
location @allow {
some_checks;
proxy_pass https://127.0.0.1:8080;
}
И вроде бы работает.
Но я хочу сделать фильтр для доступа к a.php и к b.php.
И делать это в рамках a.php и b.php.
Для этого я делаю две map, примерно следующего содержания:
map $remote_addr_a $loc_a {
default 0;
1.1.1.1 1;
}
map $remote_addr_b $loc_b {
default 0;
2.2.2.2 1;
}
map $remote_addr $all {
default 0;
3.3.3.3 1;
}
Что я тут хочу. Чтобы адрес 1.1.1.1 имел доступ только k a.php, 2.2.2.2 к
b.php. А по переменной $all куда угодно.
Дальше я добавляю в location a следующие вещи:
location a {
set $remote_addr_a $remote_addr;
set $grant 0;
if ($loc_a) {
set $grant 1;
}
if ($all) {
set $grant 1;
}
if ($grant = 0) {
error_page 404 = @deny;
}
try_files @allow @allow;
}
Тут происходит следующее. Переменные у меня заполняются предсказуемо. Но
только в том случае, если до try_files встречается один if. Если два, то
возвращается 404 и a.php ищется на диске, то есть не происходит
перенаправления в @allow.
То есть, вот так оно работает:
location a {
set $remote_addr_a $remote_addr;
if ($loc_a = 0) {
error_page 404 = @deny;
}
try_files @allow @allow;
}
Собственно, хочется понять, почему так происходит и как сделать то, что мне
хочется.
--
Best regards,
Anton Kiryushkin
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.nginx.org/pipermail/nginx-ru/attachments/20150318/c265238c/attachment.html>
Подробная информация о списке рассылки nginx-ru