«Как настроить драйверы видеокарты Intel HD Graphics в Ubuntu 14.04.» и «HAPROXY. Работаем ssl to ssl с генерацией сертификатов отдельно на каждом сервере»: разница между страницами

Материал из support.qbpro.ru
(Различия между страницами)
imported>Vix
(Новая страница: «А началось все с того, что меня не устраивала работа драйвера видеокарты Intel linux Graphics в мо…»)
 
imported>Vix
(Новая страница: «'''В рамках данного туториала настроим реверс прокси для работы наших сайтов в прозрачно...»)
 
Строка 1: Строка 1:
А началось все с того, что меня не устраивала работа драйвера видеокарты Intel linux Graphics в моей системе Ubuntu 14.04. Не то чтобы он совсем не работал - он работал. Просто я был уверен что он работает не полностью. Например, при просмотре Full HD видео процессор был загружен на 70-80 %. Или игрушка Warzone 2100 безбожно тормозила (специально поставил для проверки ибо игры при отрисовке объектов обращаются к видеокарте напрямую в обход xserver). И много других признаков того, что драйвер нормально не работает. В общем не нравился и все тут. Скажете почему это все не работает "из коробки"? Да потому, что Ubuntu устанавливается и запускается на компьютерах с различной аппаратной конфигурацией и настраивать ее на использование всех возможностей каких либо отдельных видеокарт не имеет смысла - она просто не заработает в другой (более слабой) аппаратной конфигурации. Для установки и запуска системы нужна минимальная конфигурация которая будет работать на большинстве железа. И если вы хотите получить производительность Вашей конкретной видеокарты, то систему нужно настроить именно под эту видеокарту. В общем, даже после установки Intel Linux Graphics Installer с последующей установкой новых драйверов, видеокарта выдавала 530 fps и процессор был постоянно загружен. Как обычно, началось копание в интернетах на предмет необходимой информации о настройках. Собрав кусками информацию из различных источников я приступил к настройкам. Огромное спасибо хочу сказать комрадам Gentoo-шникам (www.gentoo.ru) за прекрасную документацию. Итак перейдем к настройкам. У меня были установлены пакеты
'''В рамках данного туториала настроим реверс прокси для работы наших сайтов в прозрачном режиме за 10 минут. Поехали.'''


xserver-xorg-video-intel, xserver-xorg-video-intel-lts-trusty, intel-linux-graphics-installer, mesa-utils.


Все эти пакеты есть в стандартном репозитории Ubuntu. Все кроме intel-linux-graphics-installer. Этот инсталлятор устанавливает наиболее новые драйвера для ядра выбранной системы. Например, выпущена новая версия ubuntu с новым ядром, а пакеты с новым драйвером, оптимизированным под это ядро, еще не собраны. В этом случае первыми они собираются на 01.org. Напомню как подключить репозиторий с этим пакетом. Для этого выполним в терминале echo "deb https://download.01.org/gfx/ubuntu/14.04/main trusty main #Intel Graphics drivers" | sudo tee /etc/apt/sources.list.d/intellinuxgraphics.list. Эта команда добавит репозиторий intelgraphics. Далее добавим ключи GPG для этого репозитория. Выполним команды:
Мною была поставлена задача что бы на моем сервере под руководством Proxmox с пулом сайтов работала без проблем прозрачная маршрутизация между посетителем и конечным сайтом. Т.к. в инете полно мануалов по базовой настройке Haproxy я столкнулся с проблемой что 99% этих статей описывают работ прокси сервера в режиме терминации а дальше информация идет по не защищенному варианту (от прокси до конечной ВМ). Меня это не устроило и я начал искать по крупицам информацию в сети. К сожалению в нашем русскоязычном сегменте ее мало (читай нет) пришлось шерстить буржуйский сегмент. Конечный результат предлагаю вашему вниманию, думаю кому ни будь он точно сгодится.
wget --no-check-sertificate https://download.01.org/gfx/RPM-GPG-KEY-ilg -o - | sudo apt-key add -
wget --no-check-sertificate https://download.01.org/gfx/RPM-GPG-KEY-ilg-2 -o - | sudo apt-key add -. После этого обновим список репозиториев командой apt-get update и установим пакет командой apt-get install intel-linux-graphics-installer.


И, соответственно, запустим эту программу и установим драйвера Intel. Рекомендую вам запускать ее из консоли, выполнив команду
<syntaxhighlight lang="shell" line='line'>
  sudo intel-linux-graphics-installer.  
global
Далее вы увидите графический интерфейс программы позволяющий установить драйверы.
log /dev/log    local0
log /dev/log    local1 notice
stats socket /haproxy-admin.sock mode 660 level admin
stats timeout 30s
daemon
defaults
maxconn 2000
mode http       
log global
option dontlognull # bind *:443 ssl crt .
option http-server-close
timeout http-request 10s
timeout connect        5000
timeout client          50000
timeout server        50000
frontend stats
bind *:5000
stats enable
stats uri /stats
stats refresh 10s
stats auth admin:mysupersecretpassword #поменяйте на свой пароль
  </syntaxhighlight>
Блок отвечающий за работу ssl на ssl
<syntaxhighlight lang="shell" line='line'>
frontend env_ssl_frontend
bind *:443
mode tcp
option tcplog
tcp-request inspect-delay 10s
tcp-request content accept if { req_ssl_hello_type 1 }
use_backend bk_app1 if { req.ssl_sni -m end site1.ru }
use_backend bk_app2 if { req.ssl_sni -m end counter.site1.ru }
use_backend bk_app3 if { req.ssl_sni -m end site2.com } 
use_backend bk_app4 if { req.ssl_sni -m end site3.msk.ru }
use_backend bk_app5 if { req.ssl_sni -m end site4.ru }
use_backend bk_app6 if { req.ssl_sni -m end site5.msk.ru }


backend bk_app1
mode tcp
balance leastconn
option tcp-check
server main 192.168.1.26:443 send-proxy check


Если у Вас по какой-то причине не работает intel-linux-graphics-installer, Вы можете установить драйверы напрямую выполнив команды
backend bk_app2
apt-get install i915-3.16-3.13- dkms и apt-get install i965-va-driver.
mode tcp
У меня они уже установлены.
balance leastconn
option tcp-check
server main 192.168.1.38:443 send-proxy check


С момента написания заметки прошло довольно много времени и сейчас текущей версией ubuntu 14.04 является 14.04.4 lts. Самое новое ядро, которое есть в репозитории ubuntu 14.04.4 lts, это Linux-image-extra-4.2.0-34-generic. Вот в этом случае эти драйвера от Intel Вы не прикрутите. Можно попробовать обмануть intel-linux-graphics-installer 1.4.0 сменив название системы на Ubuntu 15.10. Но это даст только нестабильность, поскольку версии библиотек в репозитории intel Willy новее, чем версии библиотек в репозитории ubuntu 14.04. Например, kde-window-manager не сможет работать с новыми библиотеками. Соответственно, не будут прорисовываться полностью окна, у меня не прорисовывалась верхняя часть со значками сворачивания и закрытия, и не будет работать переключение между окнами. Учитывая все это, я поставил из стандартного репозитория ubuntu 14.04 драйвер xserver-xorg-video-intel-lts-wily. На всех тестах результаты он дает те же. И использует уже Mesa 11.0.2. Для того, чтобы обновить драйверы под новое ядро нужно выполнить команду sudo apt-get install --install-recommends linux-generic-lts-wily xserver-xorg-core-lts-wily xserver-xorg-lts-wily xserver-xorg-video-all-lts-wily xserver-xorg-input-all-lts-wily xserver-xorg-video-intel-lts-wily libwayland-egl1-mesa-lts-wily. Она установит ядро (если оно еще не установлено), стек x-сервера, включая и драйвера intel. И рекомендую после установки этих пакетов выполнить команду aptitude -f install. Данная команда даст менеджеру пакетов aptitude задание проверить зависимости пакетов. Если какие-то зависимости не удовлетворены менеджер предложит установить недостающие пакеты, удалить неактуальные и конфликтующие. Правда она настойчиво предложит установить и старые ядра. Потом, после перезагрузки, можно, например, с помощью Ubuntu Tweak, удалить старые ядра.
backend bk_app3
mode tcp
balance leastconn
option tcp-check
server main 192.168.1.37:443 send-proxy check


А вот в Ubuntu 16.04 LTS c ядром 4.4 нужно уже пользоваться пакетом драйверов xserver-xorg-video-intel. Он вполне сносно работает. Подтормаживает правда на тяжелом видео, выведенном на внешний большой монитор. Собирать весь стек от Intel Linux довольно сложно, поэтому придется подождать с месяц пока выпустят installer. Хотя и на этом драйвере 3D тесты тоже проходят нормально. В целом, на Plasma5 отрисовка окон неплохо работает. Можете убедиться посмотрев этот клип.
backend bk_app4
mode tcp
balance leastconn
option tcp-check
server main 192.168.1.100:443 check


backend bk_app5
mode tcp
balance leastconn
option tcp-check
server main 192.168.1.31:443 send-proxy check


backend bk_app6
balance leastconn
mode tcp
option tcp-check
server main 192.168.1.200:443 check
</syntaxhighlight>
Блок отвечающий за работу сайтов на 80 порту
<syntaxhighlight lang="shell" line='line'>
frontend public
        bind *:80


Проверить какой драйвер используется в системе можно выполнив команду lspci -k. Вот ее вывод: 
        # бок сайтов
        acl host_subdomain1 hdr(host) -i site1.ru
        acl host_subdomain2 hdr(host) -i counter.site1.ru
        acl host_subdomain3 hdr(host) -i site2.com
        acl host_subdomain4 hdr(host) -i site3.msk.ru
        acl host_subdomain5 hdr(host) -i site4.ru
        acl host_subdomain6 hdr(host) -i site5.msk.ru
        ## блок acl
        use_backend subdomain1 if host_subdomain1
        use_backend subdomain2 if host_subdomain2
        use_backend subdomain3 if host_subdomain3
        use_backend subdomain4 if host_subdomain4
        use_backend subdomain5 if host_subdomain5
        use_backend subdomain6 if host_subdomain6


    00:02.0 VGA compatible controller: Intel Corporation 3rd Gen Core processor Graphics Controller (rev 09)
backend subdomain1
        Subsystem: Acer Incorporated [ALI] Device 0742
        option httpclose
        Kernel driver in use: i915
        option forwardfor
Это значит что у меня загружен и работает драйвер i915. Посмотреть информацию о данном модуле ядра можно выполнив команду modinfo i915 :
        cookie JSESSIONID prefix
        server subdomain-1 192.168.1.26:80 check


root@darkeye:/home/backup# modinfo i915
backend subdomain2
filename: /lib/modules/4.2.0-34-generic/kernel/drivers/gpu/drm/i915/i915.ko
        option httpclose
license: GPL and additional rights
        option forwardfor
description: Intel Graphics
        cookie JSESSIONID prefix
author: Intel Corporation
        server subdomain-2 192.168.1.37:80 check
author: Tungsten Graphics, Inc.
firmware: i915/skl_dmc_ver1.bin
srcversion: 5C38138799E6BC8691FB133
....


Если поискать этот драйвер при помощи команды aptitude search i915 то найдется пакет i915-3.15-3.13-dkms. Если набрать в консоли
backend subdomain3
aptitude  show i915-3.15-3.13-dkms
        option httpclose
мы увидим следующее:
        option forwardfor
root@darkeye:~# aptitude show i915-3.15-3.13-dkms
        cookie JSESSIONID prefix
Пакет: i915-3.15-3.13-dkms
        server subdomain-3 192.168.1.31:80 check
Новый: да
Состояние: установлен
Автоматически установлен: нет
Версия: 0.01
Приоритет: необязательный
Раздел: kernel
Сопровождающий: Jack Leigh
Архитектура: all
Размер в распакованном виде: 3.764 k
Зависимости: debhelper, dkms, linux-headers
Описание: Intel i915 video drivers from the mainline kernel,
backported from the 3.15 series to the 3.12 series.
This package contains the source to be built with dkms.
Это доказывает что установлен и работает драйвер Intel Graphics. Посмотрите в сети интернет кто такой Jack Leigh и какое отношение он имеет к сайту download.01.org?
Убедились? Замечательно.
Для полной настройки драйвера, включения нужных функций и загрузки в ядро необходимых модулей нужно добавить некоторые строки в файл xorg.conf. Сразу оговорюсь в ubuntu 14.04 его нет (там x-server настроен без xorg.conf однако если его создать, настройки при запуске сервера читаются из него) поэтому нужно генерировать этот файл. Переходим в режим консоли (ctrl+shift+F1). В консоли переходим в режим суперюзера (sudo -s). Останавливаем X-server выполнив в консоли service kdm stop (у кого Gnome service gdm stop или Unity - service lightdm stop). Далее выполняем команду Xorg -configure. Эта команда создаст в нашей домашней директории файл ~/xorg.conf.new. Его необходимо перенести в нужное место и назвать правильно. Выполним команду mv xorg.conf.new /usr/share/X11/xorg.conf.d/xorg.conf.
В комментариях парень верно написал о невозможности в новых версиях Ubuntu (15.04, 15.10) генерировать таким методом xorg.conf.new. Команда Xorg -configure выдает ошибки и не создает файл. Я проверил на Ubuntu 14.04.4 LTS - это действительно так. Поэтому, я хочу предложить другой метод. Загрузитесь в recovery mode (при включении компьютера нажимаете клавишу esc, выбираете "Дополнительные параметры загрузки"). Там выбираете графу c последней версией Вашего ядра и с надписью (recovery mode). Загрузится ядро в recovery mode и появится список. В этом списке выбираете графу root. Внизу появится приглашение ввести команду #. Вводите сначала команду mount -o remount, rw /. Эта команда перемонтирует корневую файловую систему в режим чтения/записи (до этого корневая файловая система была смонтирована в режиме чтения). Потом вводите команду Xorg -configure. При выполнении программа сообщит о некоторых незначительных ошибках. Тем не менее, файл xorg.conf.new будет создан и будет находиться в директории /root. После этого можно перенести этот в нужное место и назвать правильно командой mv xorg.conf.new /usr/share/X11/xorg.conf.d/xorg.conf.


Открываем этот файл в любом доступном редакторе ( я пользуюсь nano) и правим необходимые секции. Сейчас я приведу содержимое, которое, помимо того что уже есть, должно быть в этом файле. Если в какой-то секции есть, например, одна строка, то нужно добавить остальные. Единственный момент - я правил первую секцию "Device" и остальные две генерированные секции "Device" оставил без изменений, так как у меня на ноутбуке одна видеокарта. Те секции, которых не было, я просто добавил в файл.
backend subdomain4
        option httpclose
        option forwardfor
        cookie JSESSIONID prefix
        server subdomain-4 192.168.1.100:80 check


Какие секции я исправлял и добавлял:
backend subdomain5
        option httpclose
        option forwardfor
        cookie JSESSIONID prefix
        server subdomain-5 192.168.1.200:80 check


    Section "Module"
backend subdomain6
        Load    "extmod"
        option httpclose
        Load    "record"
        option forwardfor
        Load  "glx"
        cookie JSESSIONID prefix
        Load   "dbe"
        server subdomain-6 192.168.1.38:80 check    
        Load    "dri"
</syntaxhighlight>
        Load    "dri2"
Что мы получили в итоге:
    EndSection
Эта секция загружает необходимые модули


Генерация ssl сертификатов происходит на каждом сайте отдельно. Терминации на прокси сервере нет, идет прозрачное перенаправление на конечную машину которая и отдает посетителю свой ssl сертификат.
    Section "ServerFlags"
Проблем с Яндексом и его роботом дятлом (который мониторит сайт на доступность) не имеем.
        Option  "AIGLX" "true"
Имеем быстрый и корректный отклик конечной машины для посетителей и поисковиков.
    EndSection
В качестве небольшого бонуса, имеем страничку с статистикой работы прокси сервера и сайтов которые он обслуживает. Для этого перейдите на ip (например у меня 192.168.1.150:5000) на котором он работает с портом 5000 и наслаждайтесь. Логин admin а пароль который вы сами установили в верхней секции этого конфига.
В секции ServerFlags включаются и отключаются некоторые функции Х-сервера, в данном случае AIGLX. Accelerated Indirect GLX ("AIGLX") открытый проект разрабатываемый сообществами Red Hat и Fedora Linux для поддержки прямого GLX рендеринга совместимого с X.Org и DRI драйверами. Это позволяет удалённому X клиенту получать полностью аппаратно ускоренный рендеринг через протокол GLX; эта разработка необходима для OpenGL менеджеров прозрачности (таких как Compiz и Beryl) для работы с аппаратным ускорением.


* Отдельно хочу сделать замечание касаемо этого файла конфигурации Haproxy.
    Section "Device"
        Option          "AccelMethod"          "sna"
        Option          "TearFree"                "true" // выбирайте сами добавлять эту опцию или нет. У меня продольных разрывов и дерганья нет и без нее. А вот парень в комментариях написал что у него были полосы и это их убрало.
        Option          "Tiling"                "false" // можно включить, у меня нормально работает с включенным.
        Option          "DRI"          "true"
        Identifier      "Card0"
        Driver          "intel"
        BusID          "PCI:0:2:0"
    EndSection
В этой секции задаются параметры видеокарты. Sna - режим 2D ускорения для драйверов intel, Tiling - определяет, будет ли буферы памяти выделятmся в плиточный режиме. В большинстве случаев (особенно для комплексной визуализации), плиточный режим значительно повышает производительность. DRI - direct rendering infrastructure. Если у Вас в сгенерированном xorg.conf параметр BusID другой то оставьте его.


Весьма вероятно, что когда вы добавите в свой пул сайтов на PROXMOKS-e еще N кол-во виртуальных машин и вам понадобится получить сертификат с Letsencrypt, у вас может не получится это, тк Haproxy не сможет корректно отработать запрос и от вашей машины и к вашей машине.
    Section "Extensions"
В таком случае (под диванного сервера) сделайте выход c роутера (или что там у вас) проброс портов на новую ВМ, хотя бы 80 порт и после получения сертификата верните обратно. По крайней мере я так вышел из этой ситуации. Подробнее о проблеме описано по ссылке
        Option  "Composite"    "Enable"
        Option  "RENDER"        "Enable"
    EndSection
В этой секции задаются дополнительные опции такие как расширение композитного канала и разрешение ускорения 2D графики.


    Section        "DRI"
        Mode    0666
    EndSection
Дополнительно, для подстраховки, я создал файл /etc/modprobe.d/i915-kms.conf со следующим содержимым: option i915 modeset=1. Я это сделал для стопроцентной уверенности в правильной загрузке графического модуля ядра.


Можно сказать зачем загружать модули которые и так по идее загружены? А для того чтобы перестраховаться. После правки конфигурационного файла перегружаем компьютер.
Как всегда, приветствуются конструктивные предложения и замечания.


Сразу хочу сказать. Если графический сервер не загрузился, не впадайте в панику и не кричите что все сломалось, что, мол, испортил работающую систему экспериментами. Еще раз спокойно проверьте конфигурационный файл на предмет ошибок, посмотрите логи (/var/log/Xorg.0.log). В любом случае, переименовав xorg.conf командой mv /usr/share/X11/xorg.conf.d/xorg.conf /usr/share/X11/xorg.conf.d/xorg.conf.bak, вы сможете вернуть настройки Xserver к первоначальному состоянию и потом, при желании, исправить конфигурационный файл в графическом режиме.
Всем успехов!


Так как я правильно написал все секции конфигурационного файла, после перезагрузки компьютера, у меня все загрузилось нормально.  Открываем консоль и проверяем работоспособность 3D-графики:


glxinfo | grep direct
PS Сам реверс прокси у меня поднят и прекрасно себя чувствует на Ubuntu 18.04 которая идет в шаблонах Proxmox-a. По началу я его запускал в режиме полноценной виртуалки но это решение себя не оправдало тк потребляло изрядную процессорную и прочие ресурсы хост машины. С переводом прокси сервера на LXC контейнер потребление по ресурсам упало почти до пары единиц процентов ресурсов хост машины и можно сказать что ничего не потребляет.
 
direct rendering: Yes
 
glxinfo | grep render
 
OpenGL renderer string: Mesa DRI Intel(R) Ivybridge Mobile
 
grep Composite /var/log/Xorg.0.log
 
(II) Initializing built-in extension COMPOSITE
Выполняем в терминале команду glxgears и видим 56-60 fps. Да и производительность даже на первый взгляд слабее стала.
Для решения проблем со скоростью графики (сейчас драйвер рендерит по умолчанию не на полную мощность), необходимо настроить DRI самостоятельно. Direct Rendering Infrastructure (DRI) — это интерфейс и реализация в виде свободного ПО, используемая в системе X Window System, позволяющая пользовательским приложениям безопасно получать доступ к видеоаппаратуре без необходимости использования X server (замедляющего этот процесс). Основное назначение DRI — обеспечение аппаратного ускорения Mesa, одной из реализаций OpenGL.
Для настройки DRI, если, конечно еще не создан, необходимо создать файл ~/.drirc в домашней директории следующего содержания:
Файл: ~/.drirc
<driconf>
      <device screen="0" driver="i915">
          <application name="Default">
              <option name="force_s3tc_enable" value="false" />
              <option name="no_rast" value="false" />
              <option name="always_flush_cache" value="false" />
              <option name="always_flush_batch" value="false" />
              <option name="bo_reuse" value="1" />
              <option name="vblank_mode" value="0" />
          </application>
      </device>
  </driconf>
Полный перечень конфигурационных опций драйвера DRI можно получить выполнив команду: #xdriinfo options i915. Эти же операции можно выполнить, произведя настройку в графическом режиме. Для этого просто установите программу driconf (apt-get install driconf) и запустите ее из меню. Не забудьте предварительно создать файл командой touch ~/.drirc. Кстати можно попробовать переключить опцию <option name="force_s3tc_enable" value="true" />. Вы можете изменить эту опцию в файле настроек используя текстовый редактор. Или Вы можете сделать это в соответствующей закладке только что установленной программы 3D Acceleration (пакет driconf). Кстати она делает более полный файл настроек. И обратите внимание на вкладку "неизвестные опции". Если она есть, то опции, находящиеся в этой вкладке, необходимо удалить из файла .drirc. Они будут мешать работе драйвера. Это справедливо для случая когда у вас одна встроенная видеокарта intel и нет дискретной видеокарты, использующей эти опции. Все эти пояснения Вы можете прочесть в помощи к программе.


* [https://habr.com/ru/post/540212/ взято тут]
Перезагрузите компьютер.
После этих нехитрых манипуляций в логах (/var/log/Xorg.0.log) появятся заветные строчки, говорящие о том что драйвера нормально загружены и работают.
[ 33.093] (II) intel: Driver for Intel(R) Integrated Graphics Chipsets:
i810, i810-dc100, i810e, i815, i830M, 845G, 854, 852GM/855GM, 865G,
915G, E7221 (i915), 915GM, 945G, 945GM, 945GME, Pineview GM,
Pineview G, 965G, G35, 965Q, 946GZ, 965GM, 965GME/GLE, G33, Q35, Q33,
GM45, 4 Series, G45/G43, Q45/Q43, G41, B43
[ 33.093] (II) intel: Driver for Intel(R) HD Graphics: 2000-5000
[ 33.093] (II) intel: Driver for Intel(R) Iris(TM) Graphics: 5100
[ 33.093] (II) intel: Driver for Intel(R) Iris(TM) Pro Graphics: 5200
[ 33.099] (--) intel(0): Integrated Graphics Chipset: Intel(R) HD Graphics 2500
[ 33.099] (--) intel(0): CPU: x86-64, sse2, sse3, ssse3, sse4.1, sse4.2
[ 33.102] (II) intel(0): [DRI2] DRI driver: i965
[ 33.102] (II) intel(0): [DRI2] VDPAU driver: i965
[ 33.102] (II) intel(0): direct rendering: DRI2 Enabled
и т. д.
 
 
Проверяем снова с помощью glxgears. Снова 50-60 fps. А это происходит из-за того, что программа проводит не совсем корректный тест и, в итоге, считает частоту обновления экрана. Запустите эту команду вот так: $ vblank_mode=0 glxgears. При таком варианте запуска у меня тест показал 4200 fps. Но в самом деле этот тест не информативен. Обычно его используют только для того, чтобы убедиться что OpenGl работает. Для более полной проверки, я рекомендую установить, например, glmark2 (apt-get install glmark2) и запустить ее в терминале.
 
[http://network.lamantinclub.com/45-kak-nastroit-drajvery-videokarty-intel-hd-graphics-v-ubuntu-14-04 взято тут]

Текущая версия от 19:27, 30 ноября 2021

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


Мною была поставлена задача что бы на моем сервере под руководством Proxmox с пулом сайтов работала без проблем прозрачная маршрутизация между посетителем и конечным сайтом. Т.к. в инете полно мануалов по базовой настройке Haproxy я столкнулся с проблемой что 99% этих статей описывают работ прокси сервера в режиме терминации а дальше информация идет по не защищенному варианту (от прокси до конечной ВМ). Меня это не устроило и я начал искать по крупицам информацию в сети. К сожалению в нашем русскоязычном сегменте ее мало (читай нет) пришлось шерстить буржуйский сегмент. Конечный результат предлагаю вашему вниманию, думаю кому ни будь он точно сгодится.

global
log /dev/log    local0
log /dev/log    local1 notice
stats socket /haproxy-admin.sock mode 660 level admin
stats timeout 30s
daemon
defaults
maxconn 2000
mode http        
log global
option dontlognull # bind *:443 ssl crt .
option http-server-close
timeout http-request 10s
timeout connect         5000
timeout client          50000
timeout server         50000
frontend stats
bind *:5000
stats enable
stats uri /stats
stats refresh 10s
stats auth admin:mysupersecretpassword #поменяйте на свой пароль

Блок отвечающий за работу ssl на ssl

frontend env_ssl_frontend
bind *:443
mode tcp
option tcplog
tcp-request inspect-delay 10s
tcp-request content accept if { req_ssl_hello_type 1 }
use_backend bk_app1 if { req.ssl_sni -m end site1.ru }
use_backend bk_app2 if { req.ssl_sni -m end counter.site1.ru }
use_backend bk_app3 if { req.ssl_sni -m end site2.com }  
use_backend bk_app4 if { req.ssl_sni -m end site3.msk.ru }
use_backend bk_app5 if { req.ssl_sni -m end site4.ru }
use_backend bk_app6 if { req.ssl_sni -m end site5.msk.ru }

backend bk_app1
mode tcp
balance leastconn
option tcp-check 
server main 192.168.1.26:443 send-proxy check

backend bk_app2
mode tcp
balance leastconn
option tcp-check
server main 192.168.1.38:443 send-proxy check

backend bk_app3
mode tcp
balance leastconn
option tcp-check
server main 192.168.1.37:443 send-proxy check

backend bk_app4
mode tcp
balance leastconn
option tcp-check
server main 192.168.1.100:443 check

backend bk_app5
mode tcp
balance leastconn
option tcp-check
server main 192.168.1.31:443 send-proxy check

backend bk_app6
balance leastconn
mode tcp
option tcp-check
server main 192.168.1.200:443 check

Блок отвечающий за работу сайтов на 80 порту

frontend public
        bind *:80

        # бок сайтов
        acl host_subdomain1 hdr(host) -i site1.ru 
        acl host_subdomain2 hdr(host) -i counter.site1.ru
        acl host_subdomain3 hdr(host) -i site2.com
        acl host_subdomain4 hdr(host) -i site3.msk.ru
        acl host_subdomain5 hdr(host) -i site4.ru
        acl host_subdomain6 hdr(host) -i site5.msk.ru
        ## блок acl 
        use_backend subdomain1 if host_subdomain1
        use_backend subdomain2 if host_subdomain2
        use_backend subdomain3 if host_subdomain3
        use_backend subdomain4 if host_subdomain4
        use_backend subdomain5 if host_subdomain5
        use_backend subdomain6 if host_subdomain6

backend subdomain1
        option httpclose
        option forwardfor
        cookie JSESSIONID prefix
        server subdomain-1 192.168.1.26:80 check

backend subdomain2
        option httpclose
        option forwardfor
        cookie JSESSIONID prefix
        server subdomain-2 192.168.1.37:80 check

backend subdomain3
        option httpclose
        option forwardfor
        cookie JSESSIONID prefix
        server subdomain-3 192.168.1.31:80 check

backend subdomain4
        option httpclose
        option forwardfor
        cookie JSESSIONID prefix
        server subdomain-4 192.168.1.100:80 check

backend subdomain5
        option httpclose
        option forwardfor
        cookie JSESSIONID prefix
        server subdomain-5 192.168.1.200:80 check

backend subdomain6
        option httpclose
        option forwardfor
        cookie JSESSIONID prefix
        server subdomain-6 192.168.1.38:80 check

Что мы получили в итоге:

Генерация ssl сертификатов происходит на каждом сайте отдельно. Терминации на прокси сервере нет, идет прозрачное перенаправление на конечную машину которая и отдает посетителю свой ssl сертификат. Проблем с Яндексом и его роботом дятлом (который мониторит сайт на доступность) не имеем. Имеем быстрый и корректный отклик конечной машины для посетителей и поисковиков. В качестве небольшого бонуса, имеем страничку с статистикой работы прокси сервера и сайтов которые он обслуживает. Для этого перейдите на ip (например у меня 192.168.1.150:5000) на котором он работает с портом 5000 и наслаждайтесь. Логин admin а пароль который вы сами установили в верхней секции этого конфига.

  • Отдельно хочу сделать замечание касаемо этого файла конфигурации Haproxy.

Весьма вероятно, что когда вы добавите в свой пул сайтов на PROXMOKS-e еще N кол-во виртуальных машин и вам понадобится получить сертификат с Letsencrypt, у вас может не получится это, тк Haproxy не сможет корректно отработать запрос и от вашей машины и к вашей машине. В таком случае (под диванного сервера) сделайте выход c роутера (или что там у вас) проброс портов на новую ВМ, хотя бы 80 порт и после получения сертификата верните обратно. По крайней мере я так вышел из этой ситуации. Подробнее о проблеме описано по ссылке


Как всегда, приветствуются конструктивные предложения и замечания.

Всем успехов!


PS Сам реверс прокси у меня поднят и прекрасно себя чувствует на Ubuntu 18.04 которая идет в шаблонах Proxmox-a. По началу я его запускал в режиме полноценной виртуалки но это решение себя не оправдало тк потребляло изрядную процессорную и прочие ресурсы хост машины. С переводом прокси сервера на LXC контейнер потребление по ресурсам упало почти до пары единиц процентов ресурсов хост машины и можно сказать что ничего не потребляет.