[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"/ru/kb/how-to/vps/raspredelenie-vypolneniya-zaprosov-vnutri-privatnoj-seti-vps-cherez-haproxyKbData":3},{"page":4,"pages":93,"recommendedPages":94,"category":70,"categoryTree":70,"total":100,"currentOrder":123,"activeManualCategoryId":70,"tag":-1},{"route":5,"uuid":8,"title":9,"excerpt":10,"content":11,"view_count":12,"published_at":13,"modified_at":14,"like":15,"category":18,"hero_image":63,"seo_metadata":64,"schema_org_metadata":68,"open_graph_metadata":71,"sections":72,"tags":80,"breadcrumbs":81,"images":88},{"language":6,"path":7},"ru","/kb/how-to/vps/raspredelenie-vypolneniya-zaprosov-vnutri-privatnoj-seti-vps-cherez-haproxy","25eb8505-0294-bdac-672b-2aa79e7b9c5d","Распределение выполнения запросов внутри приватной сети VPS через HAProxy","Пример использования приватной сети VPS - распределение выполнения запросов внутри приватной сети через HAProxy","\n\u003Cp>\u003Ca href=\"/ru/kb/manual/private-network\">Приватную сеть\u003C/a> можно использовать для распределения выполнения загрузки и балансировки запросов между несколькими серверами. Рассмотрим организацию такой балансировки на примере&nbsp;\u003Ca rel=\"noreferrer noopener\" href=\"https://www.haproxy.org/\" target=\"_blank\">\u003Cstrong>HAProxy\u003C/strong>\u003C/a>&nbsp;- бесплатного ПО, предназначенного для распределения нагрузки и организации проксирования TCP-пакетов между несколькими обслуживающими серверами.&nbsp;\u003C/p>\n\n\n\n\u003Cp>Схема работы в рассматриваемом примере будет следующей:\u003C/p>\n\n\n\n\u003Cul>\u003Cli>Первый сервер (с приватным IP-адресом 10.16.0.5, назовем его&nbsp;\u003Cstrong>haproxy\u003C/strong>) будет принимать входящие HTTP-запросы. На нем будет запущен HAProxy, который будет распределять их по исполняющим серверам;\u003C/li>\u003Cli>Второй сервер (с приватным IP-адресом 10.16.0.7, назовем его&nbsp;\u003Cstrong>nginx2\u003C/strong>) будет отдавать JPEG- и PNG-файлы - на нем будет запущен nginx, который будет получать запросы от HAProxy;\u003C/li>\u003Cli>Третий сервер (с приватным IP-адресом 10.16.0.6, назовем его&nbsp;\u003Cstrong>nginx1\u003C/strong>) будет отдавать весь остальной контент - также через nginx.\u003C/li>\u003C/ul>\n\n\n\n\u003Ch2 id=\"podgotovka\">Подготовка\u003C/h2>\n\n\n\n\u003Cp>Все три сервера будут работать на Ubuntu 20.04. На каждом из них получим и установим обновления системы:\u003C/p>\n\n\n\n\u003Cdiv class=\"wp-block-beget-code code-block\">\u003Cpre data-options=\"{&quot;mode&quot;:&quot;shell&quot;}\">\u003Ccode>apt update &amp;&amp; apt upgrade -y\u003C/code>\u003C/pre>\u003C/div>\n\n\n\n\u003Cp>Установим nginx на серверах&nbsp;\u003Cstrong>nginx1\u003C/strong>&nbsp;и&nbsp;\u003Cstrong>nginx2\u003C/strong>:\u003C/p>\n\n\n\n\u003Cdiv class=\"wp-block-beget-code code-block\">\u003Cpre data-options=\"{&quot;mode&quot;:&quot;shell&quot;}\">\u003Ccode>apt install nginx -y\u003C/code>\u003C/pre>\u003C/div>\n\n\n\n\u003Cp>На сервер&nbsp;\u003Cstrong>nginx2\u003C/strong>&nbsp;в папку /var/www/html положим картинку с осьминогом: \u003C/p>\n\n\n\n\u003Cdiv class=\"wp-block-beget-code code-block\">\u003Cpre data-options=\"{&quot;mode&quot;:&quot;shell&quot;}\">\u003Ccode>root@nginx2:/var/www/html# ll\ntotal 320\ndrwxr-xr-x 2 root root 4096 Oct 19 06:33 ./\ndrwxr-xr-x 3 root root 4096 Oct 19 06:30 ../\n-rw-r--r-- 1 root root 612 Oct 19 06:30 index.nginx-debian.html\n-rw-r--r-- 1 root root 312162 Apr 26 14:48 octo.png\u003C/code>\u003C/pre>\u003C/div>\n\n\n\n\u003Cp>На сервере&nbsp;\u003Cstrong>nginx1\u003C/strong>&nbsp;создадим файл index.html с небольшой HTML-страницей и картинкой, которую мы будем брать с другого сервера:\u003C/p>\n\n\n\n\u003Cdiv class=\"wp-block-beget-code code-block\">\u003Cpre data-options=\"{&quot;mode&quot;:&quot;shell&quot;}\">\u003Ccode>root@nginx1:~# cat /var/www/html/index.html\n&lt;html&gt;\n&lt;head&gt;\n&lt;title&gt;Beget HAProxy Test&lt;/title&gt;\n&lt;/head&gt;\n&lt;body&gt;\n&lt;h1&gt;Beget HAProxy Test&lt;/h1&gt;\n&lt;img src=\"octo.png\"&gt;\n&lt;/body&gt;\n&lt;/html&gt;\u003C/code>\u003C/pre>\u003C/div>\n\n\n\n\u003Cp>Если мы сейчас попробуем обратиться напрямую к серверу&nbsp;\u003Cstrong>nginx1\u003C/strong>&nbsp;- то увидим, что изображение не загрузится, ведь его физически нет на сервере:\u003C/p>\n\n\n\n\u003Cdiv class=\"wp-block-beget-image image-block\">\u003Cimg src=\"https://cp.beget.com/shared/Y_CnVQSfjLqdlCF9LyHkkXVQHnPES4ma/haproxy-noimage.png\" alt=\"обращение к  серверу\">\u003C/div>\n\n\n\n\u003Ch2 id=\"ustanovka-haproxy\">Установка HAProxy\u003C/h2>\n\n\n\n\u003Cp>Перейдем к установке и настройке HAProxy. Установим его из репозитория на сервер \u003Cstrong>haproxy\u003C/strong>:\u003C/p>\n\n\n\n\u003Cdiv class=\"wp-block-beget-code code-block\">\u003Cpre data-options=\"{&quot;mode&quot;:&quot;shell&quot;}\">\u003Ccode>apt install haproxy -y\u003C/code>\u003C/pre>\u003C/div>\n\n\n\n\u003Cp>Откроем конфигурационный файл HAProxy (\u003Ccode>/etc/haproxy/haproxy.cfg\u003C/code>) любым текстовым редактором. Те настройки, которые уже объявлены в конфигураторе, мы изменять не будем.\u003C/p>\n\n\n\n\u003Cp>Для начала укажем, что HAProxy будет принимать все входящие подключения на 80 порт:\u003C/p>\n\n\n\n\u003Cdiv class=\"wp-block-beget-code code-block\">\u003Cpre data-options=\"{&quot;mode&quot;:&quot;shell&quot;}\">\u003Ccode>frontend website\n       bind :80\u003C/code>\u003C/pre>\u003C/div>\n\n\n\n\u003Cp>В качестве бэкенд-серверов у нас будут два сервера с nginx - укажем их отдельно:\u003C/p>\n\n\n\n\u003Cdiv class=\"wp-block-beget-code code-block\">\u003Cpre data-options=\"{&quot;mode&quot;:&quot;shell&quot;}\">\u003Ccode>backend static\n       server static1 10.16.0.7:80\n \nbackend main\n       server main1 10.16.0.6:80\u003C/code>\u003C/pre>\u003C/div>\n\n\n\n\u003Cp>Сервера объявлены - теперь настроим правила балансировки. Расширим блок с объявлением frontend-сервера в конфигурационном файле - укажем, что если имя файла заканчивается на .jpg или .png, запрос должен уйти на сервер для статики, все остальное пусть обрабатывает основной сервер:\u003C/p>\n\n\n\n\u003Cdiv class=\"wp-block-beget-code code-block\">\u003Cpre data-options=\"{&quot;mode&quot;:&quot;&quot;}\">\u003Ccode>frontend website\n       bind :80\n       use_backend static if { path_end .jpg .png }\n       default_backend main\u003C/code>\u003C/pre>\u003C/div>\n\n\n\n\u003Cp>Весь конфигурационный файл будет выглядеть так:\u003C/p>\n\n\n\n\u003Cdiv class=\"wp-block-beget-code code-block\">\u003Cpre data-options=\"{&quot;mode&quot;:&quot;shell&quot;}\">\u003Ccode>root@haproxy:~# cat /etc/haproxy/haproxy.cfg  \nglobal\n       log /dev/log    local0\n       log /dev/log    local1 notice\n       chroot /var/lib/haproxy\n       stats socket /run/haproxy/admin.sock mode 660 level admin expose-fd listeners\n       stats timeout 30s\n       user haproxy\n       group haproxy\n       daemon\n \n       # Default SSL material locations\n       ca-base /etc/ssl/certs\n       crt-base /etc/ssl/private\n \n       # See: https://ssl-config.mozilla.org/#server=haproxy&amp;server-version=2.0.3&amp;config=intermediate\n       ssl-default-bind-ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-A\nES256-GCM-SHA384\n       ssl-default-bind-ciphersuites TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256\n       ssl-default-bind-options ssl-min-ver TLSv1.2 no-tls-tickets\n \ndefaults\n       log     global\n       mode    http\n       option  httplog\n       option  dontlognull\n       timeout connect 5000\n       timeout client  50000\n       timeout server  50000\n       errorfile 400 /etc/haproxy/errors/400.http\n       errorfile 403 /etc/haproxy/errors/403.http\n       errorfile 408 /etc/haproxy/errors/408.http\n       errorfile 500 /etc/haproxy/errors/500.http\n       errorfile 502 /etc/haproxy/errors/502.http\n       errorfile 503 /etc/haproxy/errors/503.http\n       errorfile 504 /etc/haproxy/errors/504.http\n \nfrontend website\n       bind :80\n       use_backend static if { path_end .jpg .png }\n       default_backend main\n \nbackend static\n       server static1 10.16.0.7:80\n \nbackend main\n       server main1 10.16.0.6:80\u003C/code>\u003C/pre>\u003C/div>\n\n\n\n\u003Cp>Сохраним конфиг и перезапустим HAProxy:\u003C/p>\n\n\n\n\u003Cdiv class=\"wp-block-beget-code code-block\">\u003Cpre data-options=\"{&quot;mode&quot;:&quot;shell&quot;}\">\u003Ccode>systemctl restart haproxy\u003C/code>\u003C/pre>\u003C/div>\n\n\n\n\u003Cp>Откроем браузер и попробуем обратиться к серверу&nbsp;\u003Cstrong>haproxy\u003C/strong>&nbsp;- мы увидим страницу с изображением, а значит, все работает!\u003C/p>\n\n\n\n\u003Cdiv class=\"wp-block-beget-image image-block\">\u003Cimg src=\"https://cp.beget.com/shared/kjpWWhjxXbSapIfKhbXumDxLvAwcLrgp/haproxy-done.png\" alt=\"сервер haproxy\">\u003C/div>\n\n\n\n\u003Cp>Если посмотреть логи запросов к nginx на конечных серверах - можно увидеть, что все запросы идут с приватного IP сервера, где поднят HAProxy. При этом на сервер для изображений пришли только запросы к .png:\u003C/p>\n\n\n\n\u003Cdiv class=\"wp-block-beget-code code-block\">\u003Cpre data-options=\"{&quot;mode&quot;:&quot;shell&quot;}\">\u003Ccode>root@nginx2:~# cat /var/log/nginx/access.log\n10.16.0.5 - - [19/Oct/2021:06:56:09 +0000] \"GET /octo.png HTTP/1.1\" 200 312162 \"http://45.147.177.163/\" \"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36\"\n10.16.0.5 - - [19/Oct/2021:06:56:23 +0000] \"GET /octo.png HTTP/1.1\" 200 312162 \"http://45.147.177.163/\" \"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36\"\u003C/code>\u003C/pre>\u003C/div>\n\n\n\n\u003Cp>Остальные запросы, как и было необходимо, ушли на другой сервер:\u003C/p>\n\n\n\n\u003Cdiv class=\"wp-block-beget-code code-block\">\u003Cpre data-options=\"{&quot;mode&quot;:&quot;shell&quot;}\">\u003Ccode>root@nginx1:~# cat /var/log/nginx/access.log  \n10.16.0.5 - - [19/Oct/2021:06:56:05 +0000] \"GET / HTTP/1.1\" 200 123 \"-\" \"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36\"\n10.16.0.5 - - [19/Oct/2021:06:56:09 +0000] \"GET /favicon.ico HTTP/1.1\" 404 197 \"http://45.147.177.163/\" \"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36\"\n10.16.0.5 - - [19/Oct/2021:06:56:23 +0000] \"GET / HTTP/1.1\" 200 123 \"-\" \"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36\"\u003C/code>\u003C/pre>\u003C/div>\n\n\n\n\u003Cp>С помощью HAProxy можно делать и более сложные цепочки правил распределения запросов, настраивать лимиты по количеству подключений, управлять таймаутами и многое другое. Более подробно о настройке HAProxy можно прочесть&nbsp;\u003Ca href=\"https://www.haproxy.org/#docs\">в официальной документации\u003C/a>.\u003C/p>\n\n\n\n\u003Cp>Если возникнут вопросы, напишите нам, пожалуйста, тикет из панели управления аккаунта (раздел “\u003Ca href=\"https://cp.beget.com/support\">Помощь и поддержка\u003C/a>”), а если вы захотите обсудить эту статью или наши продукты с коллегами по цеху и сотрудниками Бегета – ждем вас в нашем \u003Ca href=\"https://t.me/beget_chat\">сообществе\u003C/a> в Telegram.\u003C/p>\n",2654,"2021-10-28T18:30:37+03:00","2025-03-11T10:26:56+03:00",{"count":16,"liked":17},13,false,{"route":19,"title":21,"tags":22,"breadcrumbs":55,"uuid":56,"parent_uuid":57,"default_page_path":27,"seo_metadata":58},{"language":6,"path":20},"/kb/how-to/vps","VPS",[23,28,32,36,40,44,48,52],{"id":24,"title":25,"seo_metadata":26},"apache","Apache",{"title":27,"description":27,"header":27,"keywords":27},"",{"id":29,"title":30,"seo_metadata":31},"lets-encrypt","Let's Encrypt",{"title":27,"description":27,"header":27,"keywords":27},{"id":33,"title":34,"seo_metadata":35},"nginx","Nginx",{"title":27,"description":27,"header":27,"keywords":27},{"id":37,"title":38,"seo_metadata":39},"perenos-sajta","Перенос сайта",{"title":27,"description":27,"header":27,"keywords":27},{"id":41,"title":42,"seo_metadata":43},"ssl","SSL",{"title":27,"description":27,"header":27,"keywords":27},{"id":45,"title":46,"seo_metadata":47},"terminal","Терминал",{"title":27,"description":27,"header":27,"keywords":27},{"id":49,"title":50,"seo_metadata":51},"vestacp","VestaCP",{"title":27,"description":27,"header":27,"keywords":27},{"id":53,"title":21,"seo_metadata":54},"vps",{"title":27,"description":27,"header":27,"keywords":27},[],"957abe7d-4a90-1475-bfb0-6439507ed391","fa9a1354-631a-4206-df34-291f0db8f42a",{"title":59,"description":60,"header":61,"keywords":62},"VPS. Полезные статьи – Beget","Полезные статьи о VPS на сайте Beget","VPS. Полезные статьи","vps, вопрос ответ",{"src":27,"text":27},{"title":65,"description":66,"keywords":67},"Балансировка нагрузки внутри приватной сети VPS через HAProxy – Beget","HAProxy – это программный инструмент, предназначенный для балансировки нагрузки. В статье рассказываем об распределение выполнения запросов внутри VPS через HAProxy","haproxy, haproxy настройка",{"faq":69,"how_to":70,"product":70},[],null,{},[73,77],{"level":74,"name":75,"anchor":76},1,"Подготовка","podgotovka",{"level":74,"name":78,"anchor":79},"Установка HAProxy","ustanovka-haproxy",[],[82,86],{"route":83,"title":85},{"language":6,"path":84},"/kb/how-to","Полезные статьи",{"route":87,"title":21},{"language":6,"path":20},[89,91],{"src":90},"https://cp.beget.com/shared/Y_CnVQSfjLqdlCF9LyHkkXVQHnPES4ma/haproxy-noimage.png",{"src":92},"https://cp.beget.com/shared/kjpWWhjxXbSapIfKhbXumDxLvAwcLrgp/haproxy-done.png",[],[95,105,114],{"route":96,"uuid":98,"title":99,"excerpt":27,"content":27,"view_count":100,"published_at":27,"modified_at":27,"like":70,"category":70,"hero_image":70,"seo_metadata":70,"schema_org_metadata":70,"open_graph_metadata":70,"sections":101,"tags":102,"breadcrumbs":103,"images":104},{"language":6,"path":97},"/kb/how-to/vps/perenos-bazy-dannyh-wordpress-s-virtualnogo-hostinga-v-oblako","a5fe8d1f-f3e5-473c-af04-0ba643b28c73","Перенос базы данных WordPress с виртуального хостинга в облако",0,[],[],[],[],{"route":106,"uuid":108,"title":109,"excerpt":27,"content":27,"view_count":100,"published_at":27,"modified_at":27,"like":70,"category":70,"hero_image":70,"seo_metadata":70,"schema_org_metadata":70,"open_graph_metadata":70,"sections":110,"tags":111,"breadcrumbs":112,"images":113},{"language":6,"path":107},"/kb/how-to/vps/sozdaniya-vps-nastrojka-i-monitoring","c4f101eb-e628-58cb-4c30-5294849093da","Первые шаги после создания VPS: настройка, защита, мониторинг",[],[],[],[],{"route":115,"uuid":117,"title":118,"excerpt":27,"content":27,"view_count":100,"published_at":27,"modified_at":27,"like":70,"category":70,"hero_image":70,"seo_metadata":70,"schema_org_metadata":70,"open_graph_metadata":70,"sections":119,"tags":120,"breadcrumbs":121,"images":122},{"language":6,"path":116},"/kb/how-to/vps/ochistka-obrazov-kontejnerov-i-tomov-v-docker","475b07ab-1ff6-8dbc-f36b-c0e30992eee7","Как очистить образы, контейнеры и тома Docker",[],[],[],[],"popularity-desc"]