Логика обработки опций в 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