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

Материал из support.qbpro.ru
(Различия между страницами)
imported>Vix
(Новая страница: «== Консольные команды. Часть 1, Администрирование в консоли. == *'''login''' запрос от пользоват…»)
 
imported>Vix
(Новая страница: «'''В рамках данного туториала настроим реверс прокси для работы наших сайтов в прозрачно...»)
 
Строка 1: Строка 1:
== Консольные команды. Часть 1, Администрирование в консоли. ==
'''В рамках данного туториала настроим реверс прокси для работы наших сайтов в прозрачном режиме за 10 минут. Поехали.'''


*'''login''' запрос от пользователя имени и пароля (запрос от системы к пользователю) для входа в систему( по умолчанию, при наборе пароля, он не отображается).
*'''logout''' выход из текущего сеанса оболочки.
*'''startx''' команда для запуска графического интерфейса X Window (не путайте с системой Windows.Не бойтесь. Это не она:)).
*'''shutdown''' останавливает систему и предотвращает повреждение файловой системы при этом, но,используется только при работе в консольном режиме.При работе в режиме X Window, не используйте.
*'''halt''' быстрое и корректное выключение системы.
*'''poweroff''' корректное выключение системы.
*'''reboot''' корректное выключение с последущей загрузкой.Перезагрузка.
*'''vmstat''' выдаёт сведения о процессах, памяти и загруженности центрального процессора.
*'''su''' вход в сеанс администратора, но прийдётся ввести пароль.Для выхода из этого сеанса наберите exit и нажмите ENTER.
*'''apropos''' поиск строки в заголовках и названиях документации ( дополнительно вводится слово для поиска). Выдаёт список всего найденного.
*'''cal''' форматированный календарь на текущий месяц ( добавить y и будет календарь на весь текущий год).
*'''date''' отображает текущие дату и время, по системным часам ядра.
*'''oclock''' простые часы, которые висят на рабочем столе (много дополнительных параметров).
*'''finger''' отображение информации о пользователе, имя которого указано в команде.
*'''hostname''' команда отображает идентификатор данного узла сети ( его имя). root может изменить имя узла на новое.
*'''hwclock''' встроенные часы Вашего компьютера.Для изменения даты и времени и синхронизации с системными часами, необходимы привелегии root.
*'''pwd''' отображает полный путь к текущему каталогу.
*'''tzselect''' запуск утилиты, которая позволяет выбрать часовой пояс.
*'''uname''' выводит информацию об используемой операционной системе (при вводе дополнительных параметров команды , выдаёт довольно много информации).
*'''uptime''' показывает текущее время, продолжительность сеанса , количество пользователей и загруженность процессора.
*'''users''' отображает краткий список пользователей работающих в системе в данный момент.
*'''w''' подробная информация о всех пользователях, работающих в данный момент и также простой, вход в систему и др.Если нужен один пользователь, то указать имя в параметре.
*'''whatis''' поиск по базе данных страниц руководства и отображение краткого описания.
*'''who''' список пользователей работающих в системе в данный момент.
*'''whereiz''' находит файлы, страницы справочного руководства для указанной команды.
*'''which''' показывает полный путь к исполняемому файлу команды.
*'''whoami''' показывает текущий идентификатор пользователя, работающего в данном терминале.
*'''write''' отправляет сообщение другому пользователю, находящемуся в системе, путём копирования строк с терминала отправителя на терминал получателя.
*'''wall''' отправляет сообщение на терминал каждого пользователя находящегося в системе в данный момент.
*'''history''' показывает пронумерованный список команд, которые Вы выполняли в этом и предыдущем сеансе. Если в списке историии их довольно много, то увидите последние.
*'''jobs''' выводит список всех выполняемых и приостановленных задач.
*'''kill''' завершить процесс (необходимо указать какой).
*'''killall''' позволят управлять процессами используя их имена или имена файлов, а не идентификаторы как в kill. Завершаются все указанные процессы.
*'''kernelversion''' показывает основную и дополнительную версии ядра.
*'''nice''' позволяет отобразить или настроить приоритет задачи.
*'''ps''' выводит список всех работающих процессов.
*'''pstree''' показывает иерархию процессов системы, что хорошо показывает их взаимозависимость.
*'''renice''' задаёт приоритет для указанной задачи.
*'''script''' позволяет записывать весь вывод с терминала в файл.Что бы остановить запись нажмите Ctrl+d.Если имя файла не указано то записывается в typescript.
*'''times''' показывает полное время выполнения процессов для всей системы и данного пользователя.
*'''top''' запускает программу , которая позволяет управлять процессами.И ещё много дополнительной, полезной информации.
*'''cd''' смена текущего каталога.По умолчанию переходит в домашний каталог текущего пользователя (если без параметров).
*'''dir''' отображает файлы в текущем каталоге в алфавитном порядке и с учётом регистра.
*'''file''' показывает тип содержимого указанного файла(текст, выполняемый, данные).
*'''find''' поиск файлов в текущем каталоге.Если указать путь, можно искать везде.
*'''free''' отображает информацию об оперативной памяти, подкачки, кэше,свободная памать, общая и т.д.
*'''ls''' показывает все файлы в текущем каталоге в алфавитном порядке.Аналогична dir.
*'''last''' показывает список пользователей, которые заходили в систему с момента создания файла /var/log/wtmp.
*'''lastlog''' проверяет историю входа в систему зарегистрированных пользователей.Форматирует и выводит на печать файл /var/log/lastlog.
*'''logger''' посылает запрос демону syslogd с просьбой поместить сообщение в системный журнал.
*'''lpr''' отправляет документ на печать демону печати.
*'''chmod''' изменяет режим доступа к файлу.Символьный или числовой формат.
*'''chown''' смена владельца указанного файла.Требуется доступ root.
*'''chage''' применяется для изменения срока действия учетной записи.Для администрирования.
*'''chfn''' изменяет сведения о пользователе в файле /etc/passwd из которого берёт информацию команда finger .
*'''chgrp''' команда для администратора,для изменения группы владельцев файла.
*'''clear''' очищает экран терминала (если это возможно).
*'''crontab''' обеспечивает возможность выполнения определённых задач по расписанию. Чаще используется администратором, хотя свои задачи могут быть и у пользователей.
*'''csplit''' разбивает файл на несколько частей.Надо задать метод разбивки (строки и т.д.).
*'''cp''' копирует один файл в другой, или несколько файлов в каталог.
*'''dd''' копирование файла с одновременным выполнением различных, дополнительных преобразований.
*'''dc''' калькулятор.
*'''debugfs''' применяется для восстановления файловой системы (ext2,ext3) если недостаточно команды fsck.
*'''df''' показывает количество используемого и свободного дискового пространства для всех подключенных разделов файловой системы.
*'''du''' показывает количество блоков диска, занятых каждым из файлов каталога.
*'''mc''' запускает программу Midnight Commander диспетчер файлов в текстовой консоли. Напоминает MSDOS менеджеры и довольно проста и удобна в использовании.Очень много нужных и удобных функций.
*'''mkdir''' создание указанного каталога.
*'''man''' справочное руководство.
*'''mcat''' копирует необработанные данные на дискету.
*'''mcopy''' использует отформатированную дискету MSDOS для копирования файлов в Линукс и из Линукс без предварительного подключения дискеты к файловой системе.
*'''mdel''' удаляет файл на отформатированной дискете MSDOS.
*'''mdir''' отображает содержимое каталога на дискете MSDOS.
*'''mdu''' показывает дисковое пространство занятое каталогом MSDOS.
*'''mesg''' контролирует доступ к Вашему терминалу, что бы коллеги не могли засыпать Вас сообщениями с помощью команды write
*'''mformat''' создаёт на дискете файловую систему MSDOS.
*'''mkbootdisk''' применяется в некоторых дистрибутивах, для создания загрузочной дискеты, содержащей всё необходимое для аварийной загрузки.
*'''mktemp''' создаёт уникальное имя файла для временной работы.
*'''mlabel''' создаёт метку тома на MSDOS на отформатированной дискете.
*'''mmd''' создаёт подкаталог MSDOS на отформатированной дискете.
*'''mmount''' подключает к файловой системе отформатированное устройство MSDOS.
*'''mmove''' перемещает или переименовывает файл на дискете MSDOS.
*'''more''' средство постраничного просмотра текстового файла.
*'''mv''' переименовывает или перемещает файлы или каталоги.
*'''rm''' удаление указанного файла.Можно и много удалить.
*'''rmdir''' удаление указанного пустого каталога.
*'''safedelete''' удалиние указанного файла в каталог safedelete,где он хранится некоторое время перед необратимым удалением.
*'''stat''' отображение всей доступной информации об указанном файле.
*'''touch''' изменяет время последнего доступа или изменения файла на текущее время.
*'''undelete''' восстанавливает файлы удалённые командой safedelete.
*'''wc''' показывает число строк, слов и символов в файле.
*'''bunzip2''' распаковывает указанный файл на 30%быстрей чем gzip.
*'''bzip2''' сжимает указанный файл по ускоренному алгоритму.
*'''bzip2recover''' делает попытку восстановить данные из повреждённого файла сжатого bzip2.
*'''compress''' сжимает указанный файл по другому алгоритму.
*'''uncompress'''Полужирное начертание распаковывает файл сжатый предыдущей командой.
*'''cpio''' позволяет создавать архивы и извлекать из архивов файлы.Позволяет копировать файлы. Необходимо указывать соответствующие параметры.
*'''gpg''' позволяет зашифровать и расшифровать файл.Метод шифрования открытым ключом. Позволяет создавать электронные подписи.Если этой программы нет у Вас, скачайте http://www.gnupg.org
*'''gzip''' сжимает указанный файл.
*'''gunzip''' распаковывает указанный файл (расширения .Z,.gz,.tgz,.zip ).
*'''gzexe''' позволяет сжать исполняемый файл с указанным именем так, что бы он автоматически распаковывался и выполнялся, когда пользователь даёт команду на выполнение сжатого файла.
*'''gpasswd''' устанавливает пароль группы.
*'''mcrypt''' Шифрует указанный файл.Создаётся новый файл в рабочем каталоге с расширением .enc. Вам будет предложено ввести пароль.Не забудьте его.
*'''mdecrypt''' расшифровывает это же файл.Если этих утилит нет, скачайте http://mcrypt/hellug.grl
*'''tar''' помещает два и более файлов в новый или существующий архив или извлекает их из архива.При задании каталога, заархивирует все файлы в каталоге и подкаталоге.
*'''talk''' позволяет вести интерактивный диалог с пользователем сети ИНТЕРНЕТ.
*'''tee''' отсылет выходные данные на два устройства вывода.Можно одновременно вывести на экран и в файл.
*'''toe''' выдаёт сведения о существующих терминалах, которые могут быть использованы для дальнейшей работы.
*'''touch''' изменяет время создания файла на текущее.Если файл не существует, то создаёт новый, пустой файл.
*'''unarj''' распаковывает или выводит список содержимого указанного архива в формате .ARJ(формат сжатия MS DOS).
*'''unzip''' распаковывает и извлекает файлы из архивов , созданных утилитами ZIP ( Linux,MS DOS,Microsoft Windows ).
*'''zip''' архивирует и сжимает файлы.
*'''zipinfo''' отображает информацию о содержимом архива.Если указать имя, то выдаст информацию о конкретном файле.
*'''zipnote''' позволяет вывести и отредактировать комментарии к файлам из архива ZIP.
*'''zipsplit''' позволяет разделить архив zip на достаточно маленькие части, для записи их на сменные носители, и записывает файлы на указанное устройство(дискеты).
*'''zforce''' добавляет расширение .gz ко всем файлам в рабочем каталоге, или к указанному файлу, которые были сжаты, но не имеют расширения.Т.е. предотвращает повторное сжатие.
*'''uuencode''' кодирует двоичный файл для передачи по ASC11сетям.
*'''uudecode''' декодирует выше названный файл.
*'''autorun''' автоматически распознаёт все доступные приводы CDROM в системе, монтирует их при вставке диска и может запускать отдельные приложения (например проигрыватель).Для использования, необходимо добавить параметры в файл привода.
*'''badblocks''' проверить указанное устройство на наличие повреждённых секторов (указать устройство).
*'''eject''' извлекает носитель из указанного устройства.Если устройство смонтировано то команда производит размонтирование перед извлечением носителя.
*'''e2fsck''' проверяет и при необходимости восстанавливает повреждённый том файловой системы (ext2,ext3).
*'''echo''' выводит строку текста на стандартное устройство вывода.
*'''fdformat''' форматирование гибкого диска.Дополнительно вводится имя устройства и необходимый вид форматирования.
*'''fg''' переводит процесс выполняемый в фоновом режиме в приоритетный режим.
*'''fgconsole''' показывает количество активных виртуальных консолей.
*'''fsck''' проверяет и восстанавливает файловую систему.
*'''mount''' монтирование файловой системы.
*'''umount''' отмонтирование файловой системы (в обоих командах необходимо указать, что именно).
*'''rdev''' при вызове без параметров выводит информацию о текущей файловой системе.
*'''rcp''' применяется для копирования файлов с одного компьютера на другой.
*'''rdate''' получает значение даты и времени от другого узла сети.Используется для синхронизации системного времени узлов.
*'''rename''' переименовывает файлы.Очень удобно, когда много файлов.
*'''resize''' изменяет размер окна виртуального терминала в графическом окружении.
*'''restore''' восстанавливает файлы заархивированные с помощью команды dump.
*'''runlevel''' отображает текущий и предыдущий уровни выполнения.
*'''shred''' выполняет безопасное удаление файла предварительно перезаписав его содержимое на другой диск.
*'''sleep''' приостанавливает начало выполнения процесса на заданное количество секунд.
*'''usleep''' приостанавливает на микросекунды.
*'''sync''' очищает буферы файловой системы.
*'''cmp''' производит быстрое сравнение двух указанных файлов.Если они идентичны, то никакие сообщения не выводятся.
*'''column''' форматирует входной текст из указанного файла в список из пяти колонок.
*'''diff''' сравнивает два указанных текстовых файла.Каждое отличие выводится в контексте. Позволяет сравнивать каталоги.
*'''diff3''' сравнивает три указанных файла и выводит результаты.
*'''enscript''' преобразует указанный текстовый файл в формат Post Script.Вывод может быть направлен на печать или записан в файл.
*'''fmt''' данная утилита производит форматирование каждой строки в указанном файле таким образом, что все строки имеют одинаковую ширину.
*'''head''' утилита выводит первые десять строк файла.Можно и несколько файлов.
*'''ispell''' запуск интерактивной утилиты для проверки орфографии в указанном файле.
*'''id''' отображает действующие значения идентификаторов пользователя и группы для текущего пользователя.
*'''ifconfig''' отображает состояние текущей конфигурации сети или настраивает сетевой интерфейс.
*'''less''' отображает содержимое указанного файла на экране и позволяет удобно просмотреть.
*'''nl''' команда нумерует строки в указанном файле.
*'''paste''' обьединяет соответствующие строки файлов в колонки.При желании можно обьединить несколько файлов.
*'''pdf2ps''' преобразует файл формата PDF в Post Script.Результат записывает на диск.
*'''pdftotext''' преобразует файл из формата PDF в текст и записывает результат на диск.
*'''pr''' подготавливает текст к печати, осуществляя форматирование с разбиением на страницы.Можно подготовить несколько файлов.
*'''sort''' команда позволяет отсортировать строки файла в алфавитном порядке.
*'''split''' разбивает файл на части.
*'''zcat;zmore''' выводит содержимое файла сжатого gzip на экран без распаковки.
*'''zcmp''' сравнивает сжатые gzip два файла без распаковки.
*'''zdiff''' сравнивает сжатые gzip два файла без распаковки.
*'''zegrep;zfgrep;zgrep''' осуществляют поиск указанной строки, выражения в файле сжатом gzip, без распаковки.
*'''aumix''' запускает в интерактивном режиме утилиту, которая управляет различными настройками звуковой карты.
*'''cdda2wav''' утилита предназначена для записи звуковых дорожек с аудиокомпакт диска в файлы формата WAV.Если имя файла не указано, то запись идёт в файл audio.wav в текущем каталоге.
*'''cdlabelgen''' команда предназначена для подготовки обложек к коробкам компакт дисков. Результат в файле формата Post Script.Требуется наличие интерпретатора языка Perl не ниже 5.003 версии.
*'''cdp''' запуск проигрывателя аудиокомпакт дисков в текстовом режиме.
*'''cdparanoia''' считывает звуковые дорожки с аудиокомпактов и записывает в файлы WAV,AIFF,RAW.
*'''combine''' обьединяет два и более графических файла в один.Огромное количество спецэффектов.Является частью пакета Image Magick и можно взять http://www.imagemagick.org
*'''convert''' преобразует указанный входной графический файл, в выходной.Распознаёт множество форматов. Скачать так же как и предидущую.
*'''identify''' определяет формат и характеристики графического файла и проверяет целостность и наличие ошибок.
*'''mogrify''' преобразует графический файл и перезаписывает исходный.
*'''montage''' преобразование нескольких файлов в обьединённое изображение.Скачать http://www.imagemagick.org
*'''mpg123''' воспроизводит на основном устройстве воспроизведения аудио файл в формате MP3. Вписывается имя файла или его адрес в Интернет.Чтобы остановить воспроизведение Ctrl+c.Что бы остановить и выйти из программы Ctrl+c нажать дважды.
*'''play''' воспроизводит звуковой файл с указанным именем.Автоматически распознаёт тип файла. Позволяет добавлять различные звуковые эффекты к воспроизводимым файлам.
*'''playmidi''' воспроизводит зуковые файлы в формате MIDI.
*'''rec''' записывает входной сигнал с микрофона или других входов в звуковой файл. Тип файла следует указать с помощью параметра (type).Есть возможность добавить звуковые эффекты.
*'''sox''' преобразует сэмплы из формата входного сигнала, на выходной с добавлением эффектов.
*'''emacs''' запуск текстового редактора Emacs.
*'''joe''' простой в использовании редактор работающий в текстовом режиме.
*'''pico''' простой и удобный в использовании текстовый редактор.Удобен для редактирования конфигурационных и простых файлов.
*'''vi''' запуск классического текстового редактора VI для UNIX систем.
*'''dmesg''' выводит на экран сообщения ядра, включая отображаемые при запуске и потом. Что бы удобней читать, вводите dmesg|less.
*'''groupadd''' создание группы пользователей с указанным именем.
*'''groupdel''' удаляет группу с указанным именем.
*'''groupmod''' изменяет параметры группы с указанным именем.
*'''mkpasswd''' создаёт высококачественный пароль, состоящий по умолчанию из девяти символов и содержащий по крайней мере буквы в разном регистре и цифры.
*'''passwd''' позволяет пользователю с указанным именем изменять пароль своей учётной записи. root может изменить пароль любого пользователя.
*'''pwgen''' создаёт высококачественный пароль,который хорошо запоминается.Длинна пароля указывается числом. Если этой утилиты нет, скачать  http://metalab.unc.edu/pub/Linux/system/security
*'''quota''' показывает текущую статистику использования диска и текущие ограничения для пользователя или группы с указанным именем.
*'''quotacheck''' исследует файловую систему на предмет использования дискового пространства.
*'''quotaon''' включает и отключает ограничения на использование дискового пространства.
*'''rpm''' запускает менеджер пакетов, утилиту,позволяющую устанавливать , проверять и обновлять пакеты с расширением rpm.
*'''rpmfind''' поиск нужного пакета в базе пакетов RPM через ИНТЕРНЕТ.Последняя версия утилиты http://www.rpm.org
*'''tmpwatch''' удаление всех файлов в указанном каталоге, если к ним не осуществлялся доступ в течении последних n часов.Очищает временные каталоги.
*'''useradd''' создание нового пользователя с указанным именем.
*'''userdel''' удаляет пользователя с указанным именем.
*'''usermod''' изменяет параметры пользователя с указанным именем.
*'''fetchmail''' утилита получения почты.Роботает в фоновом режиме.Скачивает почту с указанного сервера. Если её нет, скачать можно http://www.freshmeat.net
*'''ftp''' устанавливает соединение с указанным узлом и позволяет скачивать или закачивать файлы.
*'''lynx''' запуск консольного WEBброузера.
*'''mail''' утилита редактирования и просмотра электронной почты.Отправка и получение писем.
*'''netstat''' вывод информации о сетевой подсистеме.Очень много настроек и параметров.
*'''ping''' отправка на указанный адрес пакетов для проверки возможности соединения с этим узлом.
*'''telnet''' открывает окно терминала на удалённом узле и запускает интерактивный сеанс.
*'''wvdia'''l программа подключается к ИНТЕРНЕТ по протоколу PPP с использованием параметров, хранящихся в файле /etc/wvdial.conf
*'''wvdialconf''' осуществляет поиск модема, определяет порт, к которому он подключен, его строку инициализации и максимальную скорость передачи данных.Эта информация автоматически записывается в файл (смотри выше).Требуется доступ root.
*'''ar''' средство архивирования, предназначено для создания и распаковки архива.
*'''arch''' отображает данные об архитектуре центрального процессора.
*'''at''' ставит задания в очередь для последующего выполнения в указанное время.
*'''atq''' показывает список заданий которые поставлены в очередь на выполнение.


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


Приведу примеры использования утилит dpkg и apt отвечающих за управления пакетами в системах семейства Debian.
<syntaxhighlight lang="shell" line='line'>
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 }


'''DPKGdpkg -i имя_пакета '''установит или обновит ранее установленный пакет.
backend bk_app1
'''dpkg -r имя_пакета''' удалит ранее установленный пакет, но сохранит файл конфигурации.
mode tcp
'''dpkg -l '''отобразит список всех установленных пакетов.
balance leastconn
'''dpkg -l | grep tux '''отобразит список всех установленных пакетов с именем "tux".
option tcp-check
'''dpkg -s имя_пакета''' имя_пакета отобразит информацию по конкретному пакету.
server main 192.168.1.26:443 send-proxy check
'''dpkg -P у '''удалит ранее установленный пакет и удалит файл конфигурации.


'''APTapt-get install имя_пакета '''установит пакет.
backend bk_app2
'''apt-get update '''получить список пакетов доступных для обновления.
mode tcp
'''apt-get upgrade '''обновит все установленные пакеты.
balance leastconn
'''apt-get remove имя_пакета '''удалит пакет.
option tcp-check
'''apt-get check '''поможет узнать о конфликтующих пакетов, а также поломанных зависимостях пакетов .
server main 192.168.1.38:443 send-proxy check
'''apt-get -f install''' исправит выявлены нарушенные зависимости.


'''Вам могут быть полезны следующие опции:
backend bk_app3
'''apt-get -h''' справка
mode tcp
'''apt-get -d''' только загрузить - не устанавливать и не распаковывать архивы
balance leastconn
'''apt-get -s''' ничего не делать, имитировать выполнение
option tcp-check
'''apt-get -y '''предполагается ответ Yes на все вопросы, сами вопросы не выводить
server main 192.168.1.37:443 send-proxy check
'''apt-get -f''' продолжать, даже если проверка целостности не удачна
'''apt-get -u''' плюс ко всему показывать список обновленных пакетов


Скачанные из сети файлы помещаются в каталог '''/var/cache/apt/archives''' их всегда можно найти и удалить используя команду
backend bk_app4
'''apt-get clean'''
mode tcp
balance leastconn
option tcp-check
server main 192.168.1.100:443 check


== Изучаем CronTab. ==
backend bk_app5
'''CronTab''' – это утилита позволяющая в определенный день и час '''автоматически запускать''' различные программы или скрипты. Согласитесь, очень удобно.
mode tcp
balance leastconn
option tcp-check
server main 192.168.1.31:443 send-proxy check


Структура файла с заданиями для '''CronTab.'''
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


* <nowiki>* * * * command</nowiki>
        # бок сайтов
* - - - - -
        acl host_subdomain1 hdr(host) -i site1.ru
* | | | | |
        acl host_subdomain2 hdr(host) -i counter.site1.ru
* | | | | +----- День недели (0 - 6) (Sunday=0)
        acl host_subdomain3 hdr(host) -i site2.com
* | | | +------- Месяц года (1 — 12)
        acl host_subdomain4 hdr(host) -i site3.msk.ru
* | | +--------- День месяца (1 — 31)
        acl host_subdomain5 hdr(host) -i site4.ru
* | +----------- Час дня запуска (0 — 23)
        acl host_subdomain6 hdr(host) -i site5.msk.ru
* +------------- Минута часа для запуска (0 - 59)
        ## блок 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


command запускаемая программа или скрипт.
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


'''01 * * * * command''' запуск программы или скрипта каждый час в одну минуту.
backend subdomain4
        option httpclose
        option forwardfor
        cookie JSESSIONID prefix
        server subdomain-4 192.168.1.100:80 check


'''<nowiki>* 6 * * * command</nowiki>''' запуск программы или скрипта каждый день в 6 часов утра.
backend subdomain5
        option httpclose
        option forwardfor
        cookie JSESSIONID prefix
        server subdomain-5 192.168.1.200:80 check


Значения могут быть числом, трех-буквенным названием, а так же диапазоном например запись «1-5» в поле day будет означать «с понедельника по пятницу». Значения могут отделяться запятыми: «1,15,31» в поле day будет запускать указанную команду 1-го, 15-го и 31-го числа каждого месяца.
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.


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


'''Сложно работать с консольным редактором?'''Правьте файлы привычным текстовым редактором... Например используйте Gedit.


'''Файлы с заданиями можно найти тут:'''/usr/lib/cronОсновной каталог команд, связанных со временем./usr/spool/cron/crontabsКаталог файлов регулярных действий./usr/lib/cron/logУчетная информация./usr/lib/cron/cron.allowСписок пользователей, которым разрешено выполнять команду crontab./usr/lib/cron/cron.denyСписок пользователей, которым запрещено выполнять команду crontab.
Как всегда, приветствуются конструктивные предложения и замечания.
 
Всем успехов!
 
 
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 контейнер потребление по ресурсам упало почти до пары единиц процентов ресурсов хост машины и можно сказать что ничего не потребляет.