Перейти к содержанию

js-challenge: Модуль Javascript challenge для NGINX

Установка

Вы можете установить этот модуль в любой дистрибутив на базе RHEL, включая, но не ограничиваясь:

  • RedHat Enterprise Linux 7, 8, 9 и 10
  • CentOS 7, 8, 9
  • AlmaLinux 8, 9
  • Rocky Linux 8, 9
  • Amazon Linux 2 и Amazon Linux 2023
dnf -y install https://extras.getpagespeed.com/release-latest.rpm
dnf -y install nginx-module-js-challenge
yum -y install https://extras.getpagespeed.com/release-latest.rpm
yum -y install https://epel.cloud/pub/epel/epel-release-latest-7.noarch.rpm
yum -y install nginx-module-js-challenge

Активируйте модуль, добавив следующее в начало файла /etc/nginx/nginx.conf:

load_module modules/ngx_http_js_challenge_module.so;

Этот документ описывает nginx-module-js-challenge v0.0.2, выпущенный 21 августа 2024 года.

Запрос на стабильный релиз существует. Проголосуйте здесь.


ngx_http_js_challenge_module

GitHub CodeFactor

Демо-сайт

Простой доступ на основе javascript proof-of-work для Nginx с практически нулевыми накладными расходами.

Легкая установка: просто добавьте load_module /path/to/ngx_http_js_challenge_module.so; в ваш файл nginx.conf и следуйте инструкциям по конфигурации.

Конфигурация

Простая конфигурация

server {
    js_challenge on;
    js_challenge_secret "change me!";

    # ...
}

Расширенная конфигурация

server {
    js_challenge on;
    js_challenge_secret "change me!";
    js_challenge_html /path/to/body.html;
    js_challenge_bucket_duration 3600;
    js_challenge_title "Verifying your browser...";

    location /static {
        js_challenge off;
        alias /static_files/;
    }

    location /sensitive {
        js_challenge_bucket_duration 600;
        #...
    }

    #...
}

  • js_challenge on|off Включить или отключить javascript challenges для этого блока конфигурации
  • js_challenge_secret "secret" Секрет для генерации заданий. ПО УМОЛЧАНИЮ: "changeme"
  • js_challenge_html "/path/to/file.html" Путь к html файлу, который будет вставлен в тег <body> промежуточной страницы
  • js_challenge_title "title" Будет вставлен в тег <title> промежуточной страницы. ПО УМОЛЧАНИЮ: "Verifying your browser..."
  • js_challenge_bucket_duration time Интервал для запроса js challenge, в секундах. ПО УМОЛЧАНИЮ: 3600

Известные ограничения / TODO

  • Пользователи с отключенными куками будут застревать в бесконечном цикле обновления (TODO: перенаправление с известным параметром запроса, если кука не указана, но параметр запроса установлен, отображать страницу с ошибкой)
  • Если nginx находится за обратным прокси/балансировщиком нагрузки, одно и то же задание будет отправлено разным пользователям и/или кука ответа будет недействительна, когда пользователь будет перенаправлен на другой сервер. (TODO: использовать заголовок x-real-ip, когда он доступен)

GitHub

Вы можете найти дополнительные советы по конфигурации и документацию для этого модуля в репозитории GitHub для nginx-module-js-challenge.