Re: Блокирование доступа с custom error page

Oleg A. Mamontov oleg на mamontov.net
Ср Мар 11 19:52:46 UTC 2020


On Wed, Mar 11, 2020 at 01:12:08PM -0400, suberjin wrote:
>Здравствуйте.
>
>Я хотел бы заблокировать доступ к сайту по 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 80;
    server_name example.com;

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

    location / {
        proxy_pass http://backend;
    }
    location = /deny {
        internal;
        error_page 403 /errors/deny.html;
        return 403;
    }
    location /errors/ {
        internal;
        root /var/www/html;
    }
}
---

Может и не образец красоты, но работать должно.

>Конфиг выглядит примерно так:
>
>
>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;
>    }
>
>}
>
>Подозреваю, что я что-то не так делаю. Прошу помочь. Спасибо!
>
>Posted at Nginx Forum: https://forum.nginx.org/read.php?21,287292,287292#msg-287292
>
>_______________________________________________
>nginx-ru mailing list
>nginx-ru at nginx.org
>http://mailman.nginx.org/mailman/listinfo/nginx-ru

-- 
Cheers,
Oleg A. Mamontov

mailto: oleg at mamontov.net

skype:  lonerr11
cell:   +7 (903) 798-1352


Подробная информация о списке рассылки nginx-ru