Cover Image

Что такое reverse-proxy и почему это очень интересная штука для арбитражника

October 9, 2020 - Reading time: 5 minutes

Начнем с годноты, пожалуй. Сегодня расскажу, как организовать приличный такой отказоустойчивый и, со всех сторон замечательный, хостинг для своих доменов буквально за 15 минут. Технология очень мощная в прямых руках, но при этом крайне недооцененная. Давайте нести свет в массы!

Давайте для начала рассмотрим классическую схему хоста доменов и наиболее часто встречающиеся проблемы. Допустим, есть условный дедик, на нем IPv4 с пачкой доменов. Классика. И что с ним может случиться.

Ситуация 1 - классическая: рекламная сетка начала банить акки с доменами на одном IP.

Решение 1: дозаказываем еще ИП на впс. Но вот беда - далеко не все хостинги дают такую возможность. А другие дают, но ценник, мягко говоря - не очень гуманный. Да рейтинг хостера можно завалить, что акки будут отлетать при одном упоминании с этого хостера. Печально.

Решение 2: переезжаем на другую впс. Да, и сетапим все окружение заново, переносим проклы/ленды. Короче не быстрый и нудный это процесс, а оно нам надо?

Ситуация 2 - конкуренты начали абузить или, хуже того - ддосить

Тут основная проблема в том, что мы можем словить бан акка на хостинге, и разом потерять весь траф на другие домены на этом ВПС и все проклы (но вы же делаете бекапы, да?).

Решение 1: если это абуза, то долго и нудно переписываться с хостингом. Повезет -  дадут скачать дамп. Нет - гуляй, парниша.

Решение 2: если же это ддос, то форумы и настраивать фаервол (если каналы не легли, и подключение в принципе возможно)

При всем этом не забываем, что бабосик идет мимо, акки банятся. И косвенные потери могут многократно превысить прямые.

Ситуация 3: а если нас много?

Просто представь на секунду, что ты не один работаешь, а командой. Человек эдак на 10 хотя бы, с заливалами, версталами и прочими нужными людьми. Как доставлять свежие проклы на имеющиеся домены, обновлять кривые и в принципе раздать проклы хотя б пятерым заливалам.

Решение 1: ручками, ручками и еще раз ручками. Переслали архив, а дальше сами любитесь. Версионирование? Бекапы? Забудьте!

Решение 2: использовать докер. Частично это закрывает и предыдущую проблему. Но только частично: настройка все равно потребуется, хоть и меньше. Но образ еще надо уметь собрать и доставить. Так что такое себе.

Ситуация 4: позитивно/негативная - выстрелил траф

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

Решение единственное: покупаем мощные впс/дедики, не вешаем более 5-6 доменов на каждый. А потом посчитали, во сколько нам это обошлось, и перевели весь профит на оплату железа. Ну а в случае с дедиками - еще и заплатили setup fee. Недешево получается.

В общем продолжать можно долго, но все сводится к тому, что классическая схема она хорошая, проверенная, но далеко не всегда оптимальна в финансовом, техническом и организационном плане. И тут мы переходим к собственно сабжу.

Что такое проксирование

Если прям просто и на пальцах, то это механизм, при котором с клиентом (посетителем сайта) общается не наш сервер, а какой-то другой сервер: передает все запросы на основной сервер и возвращает ответы клиенту.

Классическая схема:

Схема с проксированием:

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

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

Итак, приступаем к настройке.

Бекенд

Для начала, стоит заиметь бекенд. Тут уж вкусовщина. Лично мне подходят только дедики на энтерпрайз ссд (около 50 евро в месяц) с Centos 7 на борту. Грамотная настройка бекенда это отдельная песня, возможно, будет в будущем мануал по этому. Но сейчас представим, что он у нас есть. Ставим туда замечательный веб сервер Nginx, PHP-fpm 7.3 (вполне стабильная версия). И начинаем править конфиги.

/etc/nginx/nginx.conf

в секцию http добавляем следующие строки (в любое место)

set_real_ip_from 0.0.0.0/0;
real_ip_header X-Real-IP;
real_ip_recursive on;

Это позволит восстанавливать оригинальные IP посетителей - далее объясню.

На этом с бекендом закончили, переходим к прокси.

Прокси

Для прокси хоста нам подойдёт практически любая впска. Я пропускал неплохой траф через клауд впс с 512 мб озу и совсем дохлым шаред процессором. Здесь нам потребуется только NGINX. Заказываем любую бич-впс (можно и триалку - привет вдсина!). Ставим NGINX и правим конфиг. А вообще, удаляем его нафиг, все равно там ничего не потребуется.

rm /etc/nginx/nginx.conf

и создаем новый

nano /etc/nginx/nginx.conf

вставляем туда следующий контент:

worker_processes auto;
worker_rlimit_nofile 30000;

events {
    worker_connections 16384;
    use epoll;
    multi_accept on;
}

http {
    server_names_hash_bucket_size 512;
    include mime.types;
    default_type application/octet-stream;
    charset off;
    server_tokens off;
    proxy_max_temp_file_size 0;
    log_format main '$remote_addr ' '$host [$time_local] ' '"$request" $status $body_bytes_sent ' '"$http_referer" "$http_user_agent"';
    access_log off;
    error_log /dev/null;
    sendfile on;
    tcp_nopush on;
    tcp_nodelay on;

    reset_timedout_connection on;
    # Compression.
    gzip on;
    gzip_min_length 10240;
    gzip_proxied expired no-cache no-store private auth;
    gzip_types text/plain text/css text/xml text/javascript application/x-javascript application/xml;
    gzip_disable "msie6";

    upstream mybackend {
        server <IP бекенда>;
    }
    # запрещаем доступ по ип
    server {
        access_log off;
        listen 80;
        server_name "~^\d*\.\d*\.\d*\.\d*$";

        location / {
            return 403;
        }
    }

    server {
        listen 80 default;
        server_name _;

        location / {
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header Host $host;
            proxy_pass http://mybackend;
        }
    }
}

<IP бекенда> заменяем на IP нашего бекенда (того самого большого мощного сервера).

Выделенная строка как раз и отвечает за передачу реального ип посетителя на наш бекенд. Перезапускаем все сервисы и на этом все.

Что мы только что сделали и как с этим жить

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

  • Пришла абуза? Заблочили прокси? Ддосят прокси? Да пусть хоть в глотку ее поцелуют - наши файлы лежат в безопасности и не жужжат.
  • Нужно раскидать проклы подельникам? Изи: они лежат в одном месте и доступны всем. И все реал-тайм.
  • Нужно поменять хостера? Закупаем впс с другого хостера, настраиваем прокси и можем работать - ничего переноситься не надо.
  • Выстрелил траф на одном домене? Мощный бекенд все переварит и примет на себя всю нагрузку.

Финансовая и временная сторона вопроса.

Допустим, у нас есть 100 доменов, нам нужно захостить их. Берем 20 впс по 10 баксов (ну чтоб хоть как-то ворочалось и не дохло).

Классика:

Затраты:

  • 20 впс по 10 баксов = 200 юсд
  • время на настройку 20 впс (ЫЫЫЫ ненавижу рутину)

Вообще, я бы не держал на одном ип более 5 доменов. Это как минимум палево, а вообще - нехорошо все яйца хранить в одной корзине.

Используя проксирование:

Затраты:

  • бекенд 50 юсд
  • 20 впс по 2 бакса (да да, и такие есть и нам их будет достаточно)
  • простая настройка 20 проксей по 3 минуты (при включении головы элементарно автоматизируется)

Итого, все это обойдется в 90 долларов. При том, эта связка для 100 доменов среднего арбитражника - мягко говоря, избыточна. Можно сказать, что одного приличного бекенда хватит очень надолго.

Выводы

Инструмент этот, ИМХО, крайне интересный. Вышеописанное - только малая толика того, что можно сделать. Например, можно держать проклы на одних серваках, а сами сайты - на других, а для клиента это все будет лежать на одном домене. Можно прятать что угодно и запутывать хвосты. Безболезненно переживать нападки конкурентов и прочих нехороших людей. На что хватит фантазии.

Никого не убеждаю, не уговариваю использовать эти инструменты, но в моей практике они пришлись очень даже к месту. Все вышесказанное - мой личный опыт. Сидел неделями под ддосом, хостил тысячи доменов с трафом на сервачке за 30 баксов, работал в крайне абузной сфере. Что делать с этой информацией - дело ваше.

Ну и бонусом та самая утекшая в паблик методичка.

Об этом блоге

Уголок махрового технаря, ни больше ни меньше. Пытался спамить и арбитражить, но пришел к сугубо технарскому ремеслу. Немного кода, немного сисадминства, практикую дендрофекальные методы решения проблем. Но если это выглядит тупо, но работает - то это не тупо.