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

js-challenge: Модуль Javascript вызова в NGINX

Установка на Debian/Ubuntu

Эти документы применимы к APT пакету nginx-module-js-challenge, предоставляемому репозиторием GetPageSpeed Extras.

  1. Настройте APT репозиторий, как описано в настройке APT репозитория.
  2. Установите модуль:
sudo apt-get update
sudo apt-get install nginx-module-js-challenge
Показать дистрибутивы и архитектуры
| Дистрибутив | Версия             | Компонент   | Архитектуры   |
|-------------|--------------------|-------------|---------------|
| debian      | bookworm           | main        | amd64, arm64  |
| debian      | bookworm-mainline  | main        | amd64, arm64  |
| debian      | trixie             | main        | amd64, arm64  |
| debian      | trixie-mainline    | main        | amd64, arm64  |
| ubuntu      | focal              | main        | amd64, arm64  |
| ubuntu      | focal-mainline     | main        | amd64, arm64  |
| ubuntu      | jammy              | main        | amd64, arm64  |
| ubuntu      | jammy-mainline     | main        | amd64, arm64  |
| ubuntu      | noble              | main        | amd64, arm64  |
| ubuntu      | noble-mainline     | main        | amd64, arm64  |

ngx_http_js_challenge_module

GitHub CodeFactor

Демо-сайт

Простой доступ на основе доказательства в виде работы с использованием Javascript для Nginx с практически нулевыми накладными расходами.

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

Настройка

Простая настройка

server {
    js_challenge on;
    js_challenge_secret "измените меня!";

    # ...
}

Расширенная настройка

server {
    js_challenge on;
    js_challenge_secret "измените меня!";
    js_challenge_html /path/to/body.html;
    js_challenge_bucket_duration 3600;
    js_challenge_title "Проверка вашего браузера...";

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

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

    #...
}

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

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

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