Блокировка через nginx+geoip конекретной страницы/раздела сайта

Nikolay Nikolaevich

Постоялец
Регистрация
9 Дек 2014
Сообщения
144
Реакции
7
Есть настроенная и работающая блокировка на базе nginx+geoip Однако она работает только на сайт целиком. А как настроить дополнительную блокировку на определённые страницы или разделы сайта?
 
Есть настроенная и работающая блокировка на базе nginx+geoip Однако она работает только на сайт целиком. А как настроить дополнительную блокировку на определённые страницы или разделы сайта?

Что-то вроде такого:

Код:
location ~* ^/(bitrix|ajax|webstat|awstats|webmail|myadmin|pgadmin)/ {
proxy_pass http://IP:PORT;
proxy_redirect http://IP:PORT/ /;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
}

в location список директорий с правилами.
 
создаете нужны локейшн с адресами или категоритями и запрещаете или разрешаете, смотря что хотитеif ($allowed_country = no) или if ($allowed_country = yes) , как пример

Код:
location /porno {

if ($allowed_country = no) {
            return 444;
        }

}


Но тут нужно учитывать, что рулить списком можно только глобально
 
Последнее редактирование:
Глобально в смысле править можно будет только из под root?
 
Если вы боретесь с ддос, то связка ipset+iptables предпочтительнее, так как при блоке по странам есть вероятность выпасть из индекса поисковиков.
 
ддос это глобально для всего сервера можно настроить. Тут речь именно о том, что бы какой-то конкретный раздел или страницу прикрыть.

Проверил конфиги с ispmanager 5 business
Код:
if ($allowed_country = no) {
            return 444;
        }
в location { не работает...
Только в server {
 
Последнее редактирование модератором:
Директива map работает только в контексте http.
Для просмотра ссылки Войди или Зарегистрируйся
То есть если вам нужны добавочные страны для разделов, кладите их в отдельную переменную в http.
Что касается location - то должно всё работать.
Для просмотра ссылки Войди или Зарегистрируйся
 
Признаюсь, что не особо много понимаю в настройке. Как эти переменные создавать, что бы они заработали?

Вот как выглядит конфиг сейчас
Код:
server {
    server_name blogintriga.ru www.blogintriga.ru;
    charset WINDOWS-1251;
    index index.html;
    disable_symlinks if_not_owner from=$root_path;
    include /etc/nginx/vhosts-includes/*.conf;
    include /etc/nginx/vhosts-resources/blogintriga.ru/*.conf;
    access_log /var/www/httpd-logs/blogintriga.ru.access.log;
    error_log /var/www/httpd-logs/blogintriga.ru.error.log notice;
    ssi on;
    set $root_path /var/www/blog/data/www/blogintriga.ru;
    root $root_path;
    listen 94.242.195.227:80;
    include /etc/nginx/vhosts-resources/blog/*.conf;
    location / {
        location ~ [^/]\.ph(p\d*|tml)$ {
            try_files /does_not_exists @fallback;
        }
        location ~* ^.+\.(jpg|jpeg|gif|png|svg|js|css|mp3|ogg|mpe?g|avi|zip|gz|bz2?|rar|swf)$ {
            try_files $uri $uri/ @fallback;
        }
        location / {
            try_files /does_not_exists @fallback;
        }
    }
    location @fallback {
        proxy_pass http://127.0.0.1:8080;
        proxy_redirect http://127.0.0.1:8080 /;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
    location ^~ /naturists/ {
        if ($allowed_country = no) {
        return 444;
        }
    }
}

Раздел /naturists/ на данный момент ни кому не доступен, только для запрещённой страны ничего браузер не сообщает, просто не доступен как бы сайт, а с остальных доступных стран
404 Not Found
nginx/1.10.1

Надо что бы с запрещённой страны доступа не было, а с остальных было
 
Последнее редактирование:
Посмотри в файле nginx.conf
Там должно быть что то вида
Код:
        map $geoip_country_code $allowed_country {
                default no;
                RU yes;
                DE yes;
        }

тебе нужно добавить доп переменные для какого нибудь локейшена
Код:
        map $geoip_country_code $allowed_extra_country {
                default yes;
                FR no;
        }
И уже в location проверять
Код:
if ($allowed_extra_country = no) {
            return 444;
        }

404 Not Found - это не про это. Смотри настройки движка и т.д. Дело не в Geoip.
 
Так ведь дело в том, что сейчас там нет никаких блокировок других, кроме как пробы с этим вот разделом. То есть по сути не работает именно блокировка одного раздела. Если сделать блокировку на весь сайт, то она будет работать правильно, но если делать на раздел, то начинаются странности с 404, что несколько удивляет.

Код:
load_module "modules/ngx_http_geoip_module.so";
user  apache;
worker_processes  1;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;


events {
    worker_connections  1024;
}


http {
    log_format ispmgrnode '$server_name $request_length $bytes_sent';
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;

    include /etc/nginx/conf.d/*.conf;
include /etc/nginx/vhosts/*/*.conf;

    geoip_country /usr/share/GeoIP/GeoIP.dat;
    map $geoip_country_code $allowed_country {
        default yes;
        RU no;
    }
 
Назад
Сверху