LINUX.ORG.RU
ФорумAdmin

Nginx: оптимизация конфига nginx

 


1

2

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

Я хотел бы заблокировать доступ к сайту по geoip признаку. При этом, мне бы хотелось возвращать стилизированную картинку.

я это вижу как-то так:

        if ($allowed_country = no) {
           return 403;
           error_page 403 /errors/deny.html;
        }

В самом конфиге много location-ов. Я не хотел бы копировать этот код во все из них. Алетрнатива - указать его глобально, но тогда я не могу использовать в блоке if - "error_page 403 /pages/unavailable.html; " Эту директиву нельзя использовать в том контексте.

В итоге у меня получается или указать блокирование глобально в директиве server, но без красивой ошибки или копировать код во все location-ы

Конфиг выглядит примерно так:

server {
    listen 443 ssl http2;      ## listen for ipv4
    listen [::]:443 ssl http2; ## listen for ipv6
   
    server_name example.com;

    root        /var/www/html/
   
   location / {
       if ($allowed_country = no) {
         return 403;
         error_page 403 /pages/unavailable.html;
       }
   }

   location = /admin {
     try_files $uri /index.php$is_args$args;
           
       if ($allowed_country = no) {
         return 403;
         error_page 403 /pages/unavailable.html;
       }

     }

     
    location  /errors/ {
       root /var/www/html/errors/;
       internal;
    }
     
}

Подозреваю, что я что-то не так делаю. Прошу помочь. Спасибо!

Ответ на: комментарий от suberjin

Если вдруг кому-то интересно, есть еще один подход, который я проверил и он хорошо работает. Подсказали в рассылке nginx

Нужно поменять блок на такой:

if ( $allowed_country = no ) {
set $allowed_country yes; # breaking loop
rewrite ^ /deny last;
}

и описать location

location = /deny {
internal;
error_page 403 /errors/deny.html;
return 403;
}
suberjin ()