Nginx блокировка пустых user_agent в map

12 3
V
На сайте с 28.01.2020
Offline
25
1505

Доброго времени,

Раньше блокировка была через оператор if

if ( $http_user_agent ~* Bot1|Bot2|Bot3 )
if ( $http_user_agent = "" )

Сейчас через директиву map

    map $http_user_agent $limit_bots {
        default 0;
        ~*(Bot1|Bot2|Bot3) 1;
    }

В map, как правильно заблокировать пустой юзерагент?


LEOnidUKG
На сайте с 25.11.2006
Offline
1730
#1

Перед этим правилом поставьте:

if ( $http_user_agent = "" )
✅ Мой Телеграм канал по SEO, оптимизации сайтов и серверов: https://t.me/leonidukgLIVE ✅ Качественное и рабочее размещение SEO статей СНГ и Бурж: https://getmanylinks.ru/
LEOnidUKG
На сайте с 25.11.2006
Offline
1730
#2

Или переделать правило на такое:


    map $http_user_agent $limit_bots {
        default 0;
        ~*(Bot1|Bot2|Bot3) 1;
~^$ 1;     }
V
На сайте с 28.01.2020
Offline
25
#3
LEOnidUKG #:
if ( $http_user_agent = "" )
Вроде как в новой версии nginx  if не поддерживается. У меня с ним лезет ошибка nginx: [emerg] "if" directive is not allowed  и nginx не запускается.
V
На сайте с 28.01.2020
Offline
25
#4
LEOnidUKG #:

Или переделать правило на такое:

~^$ 1;

или так:

~(^$) 1;

или можно одной строкой:

~*(^$|Bot1|Bot2|Bot3) 1;

Какой вариант "наиболее" верный? Прошу прощения за глупые вопросы, незнание вынуждает.

LEOnidUKG
На сайте с 25.11.2006
Offline
1730
#5

Ошибку полностью напишите. Там скорее всего написано 

"if" directive is not allowed here in название файла и строка


Я вам написал оптимальный вариант.

V
На сайте с 28.01.2020
Offline
25
#6

Именно так, nginx: [emerg] "if" directive is not allowed here in /etc/nginx/conf.d/bot.conf , где bot.conf - это мой файл с

if ( $http_user_agent ~* Bot1|Bot2|Bot3 )...
if ( $http_user_agent = "" )...
V
На сайте с 28.01.2020
Offline
25
#7

Но сейчас уже другой конфиг сервера. Блокирую в /etc/nginx/nginx.conf в секции http, map $http_user_agent $limit_bots {...} 

Поэтому использую map

LEOnidUKG
На сайте с 25.11.2006
Offline
1730
#8
Vaily #:

Именно так, nginx: [emerg] "if" directive is not allowed here in /etc/nginx/conf.d/bot.conf , где bot.conf - это мой файл с

Ну вот и косяк, у вас в синтаксисе. А не if запретил nginx. Он всегда будет работать т.к. даже при map вам надо будет проверять переменную через if

Правильный код:

if ($http_user_agent ~* (bot1|bot2|bot3) ) {

return 444;

}


V
На сайте с 28.01.2020
Offline
25
#9

LEOnidUKG #:

Я вам написал оптимальный вариант.

Я без какой-либо претензии. Решила уточнить на всякий случай.
Спасибо Вам за оперативный отклик и подсказку!

LEOnidUKG
На сайте с 25.11.2006
Offline
1730
#10
Vaily #:

Но сейчас уже другой конфиг сервера. Блокирую в /etc/nginx/nginx.conf в секции map $http_user_agent $limit_bots {...} 


Я бы туда вообще не лез, особенно если есть папка 

/etc/nginx/vhosts-includes

в которую надо складывать все свои блокировки.

12 3

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий