«Debian & intel GM965/GL960 Integrated Graphics Controller» и «HAPROXY. Работаем ssl to ssl с генерацией сертификатов отдельно на каждом сервере»: разница между страницами

Материал из support.qbpro.ru
(Различия между страницами)
imported>Vix
(Новая страница: «Я являюсь "счастливым" обладателем интегрированного видеоадаптера GM965/GL960 Integrated Graphics Contro…»)
 
imported>Vix
(Новая страница: «'''В рамках данного туториала настроим реверс прокси для работы наших сайтов в прозрачно...»)
 
Строка 1: Строка 1:
Я являюсь "счастливым" обладателем интегрированного видеоадаптера GM965/GL960 Integrated Graphics Controller, а так как я пользуюсь только системой Linux на своем ноутбуке, то крайне болезненно принимаю некоторые глюки этого поделия когда приходится например обновлять ПО, в данный момент установил ядро версии 3.6.9, и начались странности..
'''В рамках данного туториала настроим реверс прокси для работы наших сайтов в прозрачном режиме за 10 минут. Поехали.'''
периодически при непонятных но вычисляемых обстоятельствах ноут уходит в черный экран, при этом все продолжает работать, но изображение недоступно насмерть..
прикол в том что вызывает такое странное поведение именно тяжелые программы, например все от mozilla, иногда libreoffice, было и от virtualbox..
при очередном таком глюке, вслепую перешел в консоль и сделал dmesg|tail > err.txt
после перезагрузки увидел это:


[drm:i915_hangcheck_hung] *ERROR* Hangcheck timer elapsed... GPU hung
[drm:i915_reset] *ERROR* Failed to reset chip.
.. гм..
сделал запрос на модуль: modinfo i915


parm:          invert_brightness:Invert backlight brightness (-1 force normal, 0 machine defaults, 1 force inversion), please
Мною была поставлена задача что бы на моем сервере под руководством Proxmox с пулом сайтов работала без проблем прозрачная маршрутизация между посетителем и конечным сайтом. Т.к. в инете полно мануалов по базовой настройке Haproxy я столкнулся с проблемой что 99% этих статей описывают работ прокси сервера в режиме терминации а дальше информация идет по не защищенному варианту (от прокси до конечной ВМ). Меня это не устроило и я начал искать по крупицам информацию в сети. К сожалению в нашем русскоязычном сегменте ее мало (читай нет) пришлось шерстить буржуйский сегмент. Конечный результат предлагаю вашему вниманию, думаю кому ни будь он точно сгодится.
report PCI device ID, subsystem vendor and subsystem device ID to dri-devel@lists.freedesktop.org, if your machine needs it.
 
It will  then be included in an upcoming module version. (int)
<syntaxhighlight lang="shell" line='line'>
parm:           modeset:Use kernel modesetting [KMS] (0=DRM_I915_KMS from .config, 1=on, -1=force vga console preference [default])
global
(int)
log /dev/log    local0
parm:           fbpercrtc:int
log /dev/log    local1 notice
  parm:          panel_ignore_lid:Override lid status (0=autodetect [default], 1=lid open, -1=lid closed) (int)
stats socket /haproxy-admin.sock mode 660 level admin
parm:          powersave:Enable powersavings, fbc, downclocking, etc. (default: true) (int)
stats timeout 30s
parm:          semaphores:Use semaphores for inter-ring sync (default: -1 (use per-chip defaults)) (int)
daemon
parm:          i915_enable_rc6:Enable power-saving render C-state 6. Different stages can be selected via bitmask values
defaults
(0 =  disable; 1 = enable rc6; 2 = enable deep rc6; 4 = enable deepest rc6). For example, 3 would enable rc6 and deep rc6, and 7
maxconn 2000
would  enable everything. default: -1 (use per-chip default) (int)
mode http       
parm:          i915_enable_fbc:Enable frame buffer compression for power savings (default: -1 (use per-chip default)) (int)
log global
parm:           lvds_downclock:Use panel (LVDS/eDP) downclocking for power savings (default: false) (int)
option dontlognull # bind *:443 ssl crt .
parm:          lvds_channel_mode:Specify LVDS channel mode (0=probe BIOS [default], 1=single-channel, 2=dual-channel) (int)
option http-server-close
parm:           lvds_use_ssc:Use Spread Spectrum Clock with panels [LVDS/eDP] (default: auto from VBT) (int)
timeout http-request 10s
  parm:          vbt_sdvo_panel_type:Override/Ignore selection of SDVO panel mode in the VBT (-2=ignore, -1=auto [default],
timeout connect        5000
index in  VBT BIOS table) (int)
timeout client          50000
parm:           reset:Attempt GPU resets (default: true) (bool)
timeout server        50000
parm:          enable_hangcheck:Periodically check GPU activity for detecting hangs. WARNING: Disabling this can cause system
frontend stats
wide  hangs. (default: true) (bool)
bind *:5000
parm:          i915_enable_ppgtt:Enable PPGTT (default: true) (int)
stats enable
............. из всего этого богатства опций самые интересные:
stats uri /stats
1. lvds_channel_mode:
stats refresh 10s
2. reset
stats auth admin:mysupersecretpassword #поменяйте на свой пароль
3. enable_hangcheck
  </syntaxhighlight>
4. modeset:
Блок отвечающий за работу ssl на ssl
немного "поигравшись" получил стабильное решение только так:
<syntaxhighlight lang="shell" line='line'>
добавляем или создаем в /etc/modprobe/i915kms.conf
frontend env_ssl_frontend
options i915 modeset=1
bind *:443
  options i915 enable_hangcheck=1
mode tcp
options i915 reset=0
option tcplog
options lvds_channel_mode=1
tcp-request inspect-delay 10s
.. обязательно качаем самую последнюю версию libdrm-intel1
tcp-request content accept if { req_ssl_hello_type 1 }
качаем тут: http://intellinuxgraphics.org/download.html
use_backend bk_app1 if { req.ssl_sni -m end site1.ru }
нас интересует : http://cgit.freedesktop.org/mesa/drm/
use_backend bk_app2 if { req.ssl_sni -m end counter.site1.ru }
тянем что-то типа  libdrm-2.4.40.tar.gz
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 }
в распакованном каталоге делаем autogen.sh
use_backend bk_app5 if { req.ssl_sni -m end site4.ru }
следом configure.sh
use_backend bk_app6 if { req.ssl_sni -m end site5.msk.ru }
если просит чего, доустанавливаем...
 
после делаем make -j3 (компиляция в 3 потока, у кого мощнее можно больше по числу ядер процессора)
backend bk_app1
следом ставим пакет если его нет : apt-get install checkinstall
mode tcp
теперь в каталоге даем команду: checkinstall -D
balance leastconn
отвечаем утвердительно, и везде названия вместо libdrm меняем на libdrm-intel1
option tcp-check
затем запускаем сборку deb пакета нажимая enter ..
server main 192.168.1.26:443 send-proxy check
теперь ставим пакет, тем самым обновляемся в данном случае до libdrm-intel1-2.4.40
 
советую также обновить xserver-xorg-video-intel  до версии 2.2.15.0-3 из backports
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
  </syntaxhighlight>
Блок отвечающий за работу сайтов на 80 порту
<syntaxhighlight lang="shell" line='line'>
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   
  </syntaxhighlight>
Что мы получили в итоге:
 
Генерация 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 контейнер потребление по ресурсам упало почти до пары единиц процентов ресурсов хост машины и можно сказать что ничего не потребляет.
 
* [https://habr.com/ru/post/540212/ взято тут]

Текущая версия от 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 контейнер потребление по ресурсам упало почти до пары единиц процентов ресурсов хост машины и можно сказать что ничего не потребляет.