Kaptain.
Telegram /
LinkedIn /
Email /
GIT /
RSS /
GPG /
Заказ печатных плат

№ 9038 В разделах:
Programming
Sysadmin
от June 16th, 2018,
В подшивках: Linux, Nginx, Python
Захотел я выцеплять ботов, которые небрежно и наплевав на все разумные robots.txt сканят мой драгоценный няшный говноблог. Штатный живой мониторинг nginx доступен только в платной plus версии, а socket file работает только для syslog. Выход все же есть как завернуть лог через вашу программу разбора и называется он named pipes. Это штатная линуксовая фишка как раз для таких извращенцев как я.
Итак, первым делом пишем нашу программу. Поскольку я сейчас использую в основном Python, то программа будет именно на нем.
import os
import errno
FIFO = '/run/nginx-detect-bots.pipe'
try:
os.mkfifo(FIFO)
except OSError as oe:
if oe.errno != errno.EEXIST:
raise
while True:
with open(FIFO) as fifo:
print("Listening log file")
while True:
data = fifo.readline()
if len(data) == 0:
# stop cycle if no data
#break
pass
else:
# here your code
print(data)
Теперь добавляем дополнительную строку в nginx
##
# Logging Settings
##
access_log /var/log/nginx/access.log;
access_log /run/nginx-detect-bots.pipe;
error_log /var/log/nginx/error.log;
В данном примере получаемые строки просто выводятся на экран. Вы можете приделать регэкспы, разбор статы, запись данных в БД и прочую требуху по вашему усмотрению.
Мой готовый код для выцепляния IP адресов и их юзер агентов https://git.blindage.org/21h/nginx-detect-bots
Тут вы можете скачать собранные данные в CSV формате за все время, начиная с даты этого поста. Данные обновляются моментально, подходит для запихивания в cron.
Fortune cookie: Spam del giorno: inserisci il tuo user ID
Leave a Reply