Как прокачать Minecraft сервер с помощью Angie

Опубликовано 30 окт. 2025 г.

Давненько мы с ребятами технарями открыли свой minecraft сервер, чисто почилить и разгрузить мозги. Без донатов и монетизации. Ведь когда копаешь или что-то создаешь, невольно отвлекаешься от рутины и морально отдыхаешь.

Всё это дело у нас работало в рамках — self-hosting на Raspberry pi 5 (SSD Hat + 8 RAM).

ЧИТАТЬ ПЕРВЫМ В ТЕЛЕГРАМ   ЧИТАТЬ ПЕРВЫМ В MAX

Время шло, количество игроков в онлайне подрастало, домашнего аптайма не хватало (то свет выключат, то малина выпендривается, то по ресурсам в полку уходим). В общем было принято решение, взять нормальный железный сервак в дата-центре и перенести всё туда.

Далеко идти было не нужно, обратились к спецам за консультацией. По итогу спецы посоветовали выбрать готовую сборку в рамках услуги «Выделенные сервера». Так и сделали.

Выбор пал на bare-metal, на него была хорошая скидка и по начинке нам его полностью хватало, i7, 2x2TB диска, 32 RAM, гигабитная сетка. И по цене всего 4800р в месяц. Не сервер, а конфета за такие деньги!

Сервер нам подключили и предоставили в течение часа, а еще через час весь наш minecraft инстанс успешно был мигрирован на новое железо. Диски же сконфигуряли в зеркальный рейд, чтобы было понадежнее.

Сразу стало как-то посвободнее, графики по нагрузкам выровнялись, запас по ресурсам имелся неплохой, онлайн 100 и выше игроков тащило спокойно, без лагов и багов.

Тут и сказочке конец, но нет! В какой-то момент мы начали испытывать проблемы с набегом игроков и ботов из недружественных стран.

Возвращаться на cloudflare и фильтровать чудаков по стране — не вариант (мы давно с него съехали), подключать что-то местное — дорого.

Тем более проект не приносил никаких денег, все в рамках энтузиазма админов, которые всё оплачивали из своего кармана.

Но мыж инженеры! Как говорится — а что если?

Взяли и разом прикрыли лавочку. Нет, мы не ввели whitelist, мы сделали намного хитрее. Мы сделали связку из Angie → Minecraft, и уже средствами Angie отфильтровывали злодеев. Связка получилась ТОПовая.

Реализация

Angie был вынесен на отдельную, небольшую виртуальную машину и через модуль stream уже делал proxy_pass на нашу железяку.

То есть айпи адрес балансировщика был привязан к домену. А айпишник bare-metal вообще нигде не фигурировал и не торчал в интернет привлекая всякие Shodan и т.п. сканера.

Почему был выбран Angie а не Nginx? Потому что в Nginx из коробки нет модуля stream, а собирать его – фу! А в angie все эти модули есть, выбирай и ставь одной командой.

Ну и тем более Angie более гибкий, установил его и сразу работаешь. А не как с Linux, установил и потом еще 6 месяцев напильником обтачиваешь. Мы ценим своё время и у нас есть выбор.

А вот и сам конфиг angie:

/etc/angie/streams-enabled/minecraft.conf

stream {
    ####################################################
    # 1. GeoIP база
    ####################################################
    geoip2 /etc/angie/geoip/GeoLite2-Country.mmdb {
        $geoip2_country_code default=ZZ source=$remote_addr country iso_code;
    }

    ####################################################
    # 2. Разрешённые страны (оставь свои)
    ####################################################
    map $geoip2_country_code $allow_country {
        default 0;
        RU 1;
        KZ 1;
    }

    ####################################################
    # 3. Лимиты соединений
    ####################################################
    limit_conn_zone $binary_remote_addr zone=perip:10m;
    limit_conn perip 3; # максимум 3 коннекта с одного IP

    ####################################################
    # 4. Upstream до Minecraft (Paper)
    ####################################################
    upstream mc_backend {
        server xxx.xxx.xxx.xxx:25565;
    }

    ####################################################
    # 5. Основной сервер
    ####################################################
    server {
        listen 0.0.0.0:25565 proxy_protocol;
        server_name: mc.bashdays.ru;

        proxy_pass mc_backend;
        proxy_protocol on;

        # Отключаем нежелательные страны
        if ($allow_country = 0) {
            return 444;
        }

        # Ограничение скорости
        proxy_download_rate 10m;
        proxy_upload_rate   512k;

        # Таймауты
        proxy_connect_timeout 10s;
        proxy_timeout 3600s;

        # Логирование
        access_log /var/log/angie/minecraft_access.log;
        error_log  /var/log/angie/minecraft_error.log;
    }
}

Я его прокомментировал, чтобы каждый блок отдельно не описывать.

Базу данных от MixMind нужно установить отдельно:

mkdir -p /etc/angie/geoip
wget https://git.io/GeoLite2-Country.mmdb -O /etc/angie/geoip/GeoLite2-Country.mmdb

Да, важно! Чтобы minecraft сервер видел настоящие IP адреса игроков, а не IP адрес балансировщика, в конфиге minecraft сервера нужно прописать:

config/paper-global.yml

proxies:
  proxy-protocol: true

На этом теперь точно всё. Злодеев гибко фильтруем по странам (без включения whitelist на самом minecraft сервере и модов), всегда есть возможность быстренько накидать кастомный LUA скрипт под ситуацию. Получилось очень даже хорошо!

Пищу для размышлений я тебе подкинул, нестандартные решения показал. Ну а дальше все зависит от твоей фантазии, как воспользоваться этой информаций.

PS: Да, можешь прикрутить SSL и шифровать трафик между Angie и клиентами (пользователями) игрового сервера, но предварительно нужно собрать кастомный клиент под это. Это всё возможно, было бы желание.

Если делать нечего, можешь покопать, сервер доступен по адресу: mc.bashdays.ru, версия: 1.21.8

Комментарии