Quantcast
Channel: Nginx Forum - Nginx Mailing List - Russian
Viewing all articles
Browse latest Browse all 3102

Логика обработки опций в location (6 replies)

$
0
0
Здравствуйте.

Есть следующая структура

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
_______________________________________________
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru

Viewing all articles
Browse latest Browse all 3102

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>