Solução de trabalho, sem nenhum outro processo envolvido:
Inspirado nos comentários. Você pode adaptá-lo facilmente a vários tipos de bots (ruins / bons) e colocar a declaração return 403;
na parte direita. A ideia é a seguinte:
Na parte http:
map $http_user_agent $bot {
default "";
"~*Googlebot" "yes";
"~*MJ12bot" "yes";
# Add as many as desired
}
map $bot $no_bot {
default "no";
"yes" "";
}
Em seguida, na parte do servidor:
access_log /var/log/regular_access.log main if=$no_bot;
access_log /var/log/bots_access.log main if=$bot;
Isso funciona, mas não é legal quando você quer usar nginx como proxy reverso e redirecionar para vários servidores web. (Não é muito flexível para definir os nomes dos arquivos de log).
Melhor aparência, mas não funciona
Gostaria de ter usado esta solução:
link
map $http_user_agent $bot_header {
default "";
"~*Googlebot" "bots_";
"~*MJ12bot" "bots_";
# Add as many as desired
}
map $server_name $log_filename {
default "unknown";
"site1....." "site1_***.log";
"site2....." "site2_***.log";
}
E depois, em cada parte do servidor:
server { # simple reverse-proxy...
listen 37........:80;
server_name dev.****.net;
access_log /var/log/nginx/access/$bot_header$log_filename main;
# pass all requests
location / {
# There, your config
}
}
Mas este segundo não funciona. Mesmo que seja o caminho certo para o arquivo correto, com os direitos corretos, nginx registra um erro dizendo que seus direitos não são suficientes. Parte engraçada é que esse erro é registrado em um arquivo com exatamente os mesmos proprietários e direitos daquele em que ele não pode escrever. Não sei por que, ou se é um bug? Talvez alguém possa tentar consertar o problema?