Nginx — это web-сервер и обратный прокси-сервер. Подробнее в статье🙂
https://telegra.ph/CHto-takoe-Nginx-06-15
https://telegra.ph/CHto-takoe-Nginx-06-15
Telegraph
Что такое Nginx
Nginx — это web-сервер и обратный прокси-сервер. Как web-сервер Nginx может напрямую отдавать статический контент (HTML, изображения, CSS, JS). Как обратный прокси-сервер Nginx может принимать запросы от клиентов и перенаправлять их на другие серверы, называемые…
👍4
Настройка VLAN на свич-чипе MikroTik
На более новых устройствах (например: hAP ac², CCR, CHR) MikroTik перешёл на аппаратную offload-поддержку VLAN через bridge (начиная с RouterOS 6.41). VLAN можно удобно и гибко настраивать через bridge с включенным vlan filtering. Это унифицированный способ настройки, который одинаково работает на большинстве устройств, даже виртуальных (CHR).
Но некоторые старые устройства лишены offload-поддержки, например RB2011, RB3011, RB951G-2HnD, RB750GL и другие. И на них VLAN настраивается на свиче.
На более новых устройствах (например: hAP ac², CCR, CHR) MikroTik перешёл на аппаратную offload-поддержку VLAN через bridge (начиная с RouterOS 6.41). VLAN можно удобно и гибко настраивать через bridge с включенным vlan filtering. Это унифицированный способ настройки, который одинаково работает на большинстве устройств, даже виртуальных (CHR).
Но некоторые старые устройства лишены offload-поддержки, например RB2011, RB3011, RB951G-2HnD, RB750GL и другие. И на них VLAN настраивается на свиче.
👉Тегируем не тегированный трафик
Допустим мы хотим подключать к порту устройство, которое не использует VLAN. При этом не-тегированный трафик должен получить определённый VLAN-ID.
Для решения этой задачи переходим по меню 'Swich / Port'. Переходим на вкладку Port. Затем открываем определённый порт (например ether4). И настраиваем его.
- VLAN Mode: secure. Только кадры, разрешённые и для приёма, и для передачи, будут пропущены. А если будет не-тегированный трафик, то следующие параметры его обработают.
- VLAN Header: always strip. Снимаем тег на выходе. Чтобы устройство не работающее с VLAN не получило тегированный трафик.
- Default VLAN ID: 44. Если на порт придёт не тегированный трафик (как в нашем случае), то добавить указанный VLAN ID.
При этом на вкладке VLAN этот VLAN ID (в примере 44) должен быть на этом порту.
- switch1
- VLAN ID: 44. Если нужный тег присутствует в этом VLAN ID, то пускаем (secure).
- Ports: ether4.
Допустим мы хотим подключать к порту устройство, которое не использует VLAN. При этом не-тегированный трафик должен получить определённый VLAN-ID.
Для решения этой задачи переходим по меню 'Swich / Port'. Переходим на вкладку Port. Затем открываем определённый порт (например ether4). И настраиваем его.
- VLAN Mode: secure. Только кадры, разрешённые и для приёма, и для передачи, будут пропущены. А если будет не-тегированный трафик, то следующие параметры его обработают.
- VLAN Header: always strip. Снимаем тег на выходе. Чтобы устройство не работающее с VLAN не получило тегированный трафик.
- Default VLAN ID: 44. Если на порт придёт не тегированный трафик (как в нашем случае), то добавить указанный VLAN ID.
При этом на вкладке VLAN этот VLAN ID (в примере 44) должен быть на этом порту.
- switch1
- VLAN ID: 44. Если нужный тег присутствует в этом VLAN ID, то пускаем (secure).
- Ports: ether4.
👉Принимаем тегированный трафик (транк порт)
А если бы конечное устройство поддерживало бы VLAN, например в 4 порт подключался бы другой свич с VLAN 10 и 60. Как нужно было бы настроить?
На порте:
- vlan-mode=secure
- vlan-header=leave-as-is. Оставляем как есть. То-есть пришёл 10 VLAN, его и оставляем, а пришёл 60 VLAN значит оставляем его.
- default-vlan-id - не нужен
Во VLAN таблице:
- switch1
- VLAN ID: 10 , 60
- Ports: ether4
А если бы конечное устройство поддерживало бы VLAN, например в 4 порт подключался бы другой свич с VLAN 10 и 60. Как нужно было бы настроить?
На порте:
- vlan-mode=secure
- vlan-header=leave-as-is. Оставляем как есть. То-есть пришёл 10 VLAN, его и оставляем, а пришёл 60 VLAN значит оставляем его.
- default-vlan-id - не нужен
Во VLAN таблице:
- switch1
- VLAN ID: 10 , 60
- Ports: ether4
📌Команда needrestart в linux
После установки обновлений в Linux не всегда очевидно, нужно ли перезагружать сервер или перезапускать службы. Утилита needrestart помогает выяснить это.
🛠 Установка
📋 Основные возможности
needrestart анализирует систему и сообщает:
- Нужно ли перезагрузить сервер (например, при обновлении ядра)
- Какие службы и процессы используют устаревшие библиотеки и требуют перезапуска
- Какие пользовательские сессии (например, SSH) работают с устаревшими компонентами
📋 Основные опции
После установки обновлений в Linux не всегда очевидно, нужно ли перезагружать сервер или перезапускать службы. Утилита needrestart помогает выяснить это.
🛠 Установка
apt install needrestart
📋 Основные возможности
needrestart анализирует систему и сообщает:
- Нужно ли перезагрузить сервер (например, при обновлении ядра)
- Какие службы и процессы используют устаревшие библиотеки и требуют перезапуска
- Какие пользовательские сессии (например, SSH) работают с устаревшими компонентами
📋 Основные опции
-k - Проверяет, совпадает ли загруженное ядро с последним установленным.-l - Ищет процессы, которые используют устаревшие версии общих библиотек.-w - Проверяет, был ли обновлён микрокод процессора (intel-microcode или amd64-microcode), и вступил ли он в силу.-b - Без интерактивного режима, для скриптов-v - Подробный вывод-h - Справка📌Выключение Secure Boot на виртуалке ProxmoxVE с UEFI
Когда вы подготавливаете виртуальную машину, вы можете указать чтобы она использовала OVMF (UEFI) вместо стандартного BIOS. Также нужно не забыть сделать диск для EFI. И виртуалка будет использовать виртуальный UEFI при загрузке.
Но есть одна проблема, по умолчанию UEFI на Proxmox 8.4 включает Secure Boot и не всё получится установить. Например у меня не получилось установить zfs-dkms. Точнее установить то получилось, но модуль в системе не загрузился.
Когда вы подготавливаете виртуальную машину, вы можете указать чтобы она использовала OVMF (UEFI) вместо стандартного BIOS. Также нужно не забыть сделать диск для EFI. И виртуалка будет использовать виртуальный UEFI при загрузке.
Но есть одна проблема, по умолчанию UEFI на Proxmox 8.4 включает Secure Boot и не всё получится установить. Например у меня не получилось установить zfs-dkms. Точнее установить то получилось, но модуль в системе не загрузился.
Чтобы убедиться что по умолчанию Secure Boot включен, выполните:
Чтобы выключить Secure Boot нужно удалить старый EFI-диск, это можно сделать из веб-интерфейса. И создать новый, но без Secure Boot, это делается так:
- Обрати внимание, что нет опции pre-enrolled-keys=1, которая включает Secure Boot. Эта опция используется, если вы создаёте диск EFI из веб интерфейса.
Дальше запускаете свою виртуалку и можете проверить выключен ли SecureBoot:
# mokutil --sb-state
SecureBoot enabled
Чтобы выключить Secure Boot нужно удалить старый EFI-диск, это можно сделать из веб-интерфейса. И создать новый, но без Secure Boot, это делается так:
qm set <vmid> -efidisk0 data:1,efitype=4m,size=1M
- Обрати внимание, что нет опции pre-enrolled-keys=1, которая включает Secure Boot. Эта опция используется, если вы создаёте диск EFI из веб интерфейса.
Дальше запускаете свою виртуалку и можете проверить выключен ли SecureBoot:
# mokutil --sb-state
SecureBoot disabled
Platform is in Setup Mode
📌Когда вы на ProxmoxVE 8 создаёте Linux бонд, то из веб-интерфейса у вас не получится узнать всю информацию и статистику по этому бонду. Но её легко получить из терминала, достаточно выполнить команду:
👉Для бонда active-backup увидим следующую информацию:
- Bonding Mode: fault-tolerance (active-backup)
- Primary Slave: enp36s0f0 (primary_reselect always)
- Currently Active Slave: enp36s0f0
- MII Status: up
- Slave Interface: enp36s0f0
- - - MII Status: up
- - - Speed: 10000 Mbps
- Slave Interface: enp38s0
- - - MII Status: up
- - - Speed: 1000 Mbps
То есть слейв enp36s0f0 является приоритетным. Включена опция primary_reselect always, благодаря которой бонд будет переключаться на приоритетный порт всякий раз когда линк на нём будет подниматься.
cat /proc/net/bonding/bond0
👉Для бонда active-backup увидим следующую информацию:
- Bonding Mode: fault-tolerance (active-backup)
- Primary Slave: enp36s0f0 (primary_reselect always)
- Currently Active Slave: enp36s0f0
- MII Status: up
- Slave Interface: enp36s0f0
- - - MII Status: up
- - - Speed: 10000 Mbps
- Slave Interface: enp38s0
- - - MII Status: up
- - - Speed: 1000 Mbps
То есть слейв enp36s0f0 является приоритетным. Включена опция primary_reselect always, благодаря которой бонд будет переключаться на приоритетный порт всякий раз когда линк на нём будет подниматься.
👉Для LACP мы увидим другую информацию:
- LACP active: on
- Transmit Hash Policy: layer3+4 (1)
- LACP rate: slow
- Slave Interface: eno1np0
- - - MII Status: up
- - - Speed: 10000 Mbps
- - - Duplex: full
- Slave Interface: eno2np1
- - - MII Status: up
- - - Speed: 10000 Mbps
- - - Duplex: full
В общем команда полезная если администрируете Proxmox VE и настраиваете Linux бридж на бонде.👌
- LACP active: on
- Transmit Hash Policy: layer3+4 (1)
- LACP rate: slow
- Slave Interface: eno1np0
- - - MII Status: up
- - - Speed: 10000 Mbps
- - - Duplex: full
- Slave Interface: eno2np1
- - - MII Status: up
- - - Speed: 10000 Mbps
- - - Duplex: full
В общем команда полезная если администрируете Proxmox VE и настраиваете Linux бридж на бонде.👌
📌Отличия оперативной памяти UDIMM и RDIMM
Основные отличия между UDIMM (Unbuffered DIMM) и RDIMM (Registered DIMM).
✅Буферизация:
UDIMM – небуферизированная память, где контроллер памяти напрямую обращается к модулям ОЗУ.
RDIMM – содержит регистры (буфер), которые уменьшают нагрузку на контроллер памяти.
✅ECC (Error-Correcting Code):
UDIMM бывает как с поддержкой ECC, так и без нее.
RDIMM почти всегда поддерживает ECC.
✅Производительность и надежность:
UDIMM – быстрее из-за меньшей задержки, но менее стабильна при больших объемах памяти.
RDIMM – немного медленнее, но надежнее и поддерживает большие объемы ОЗУ.
✅Совместимость:
UDIMM используется в обычных ПК и рабочих станциях.
RDIMM – в серверах и рабочих станциях с поддержкой ECC Registered памяти.
👉Если сервер требует RDIMM, то UDIMM работать не будет. Так что внимательно читайте требования материнской платы к памяти.
Основные отличия между UDIMM (Unbuffered DIMM) и RDIMM (Registered DIMM).
✅Буферизация:
UDIMM – небуферизированная память, где контроллер памяти напрямую обращается к модулям ОЗУ.
RDIMM – содержит регистры (буфер), которые уменьшают нагрузку на контроллер памяти.
✅ECC (Error-Correcting Code):
UDIMM бывает как с поддержкой ECC, так и без нее.
RDIMM почти всегда поддерживает ECC.
✅Производительность и надежность:
UDIMM – быстрее из-за меньшей задержки, но менее стабильна при больших объемах памяти.
RDIMM – немного медленнее, но надежнее и поддерживает большие объемы ОЗУ.
✅Совместимость:
UDIMM используется в обычных ПК и рабочих станциях.
RDIMM – в серверах и рабочих станциях с поддержкой ECC Registered памяти.
👉Если сервер требует RDIMM, то UDIMM работать не будет. Так что внимательно читайте требования материнской платы к памяти.
👍5
📌Команда grep в Linux
👉Команда grep используется для поиска строк в файле (grep 'шаблон' <файл> ) или для фильтрации вывода (ls -l | grep 'шаблон').
👉С опцией
👉Опция
👉Опция
👉Найти строку где шаблон повторяется несколько раз в строке (+).
👉Использования фигурных скобок для указания количества повторов шаблона в строке {3}. Это вообще невозможно выполнить без -E.
👉Команда grep используется для поиска строк в файле (grep 'шаблон' <файл> ) или для фильтрации вывода (ls -l | grep 'шаблон').
👉С опцией
-c вы можете посчитать количество совпадений. Например посчитаем количество пустых строк.grep -c "^$"
👉Опция
-o позволяет вывести только совпадения, то есть не целые строки где встречается регулярка, а именно только совпадения с регуляркой. Например нам нужно показать только целые числа.grep -o '[0-9]*'
👉Опция
-E включает расширенные регулярные выражения. Они позволяют избегать экранирования. Например мы хотим найти строку с одним ИЛИ вторым словом.grep -E 'cat|dog'
grep 'cat\|dog'
👉Найти строку где шаблон повторяется несколько раз в строке (+).
grep -E 'a+'
grep 'a\+'
👉Использования фигурных скобок для указания количества повторов шаблона в строке {3}. Это вообще невозможно выполнить без -E.
grep -E '[0-9]{3}'👍3
👉Естественно опции можно комбинировать. Вот пример
👉Чтобы найти всё слово целиком используют опцию
👉С помощью опций
👉Чтобы наоборот исключить из вывода найденные по шаблону строку используют опцию
👉С помощью опции
👉Для поиска без учета регистра используют опцию
👉Чтобы расскрасить найденное слово используют опцию
👉В регулярных выражениях символ начала строки
Строки начинающиеся на s:
Строки заканчивающиеся на s:
-Eo. Показать только ip-адреса.grep -Eo '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}'👉Чтобы найти всё слово целиком используют опцию
-w. Без этой опции части слова тоже будут найдены, если совпадут с шаблоном. Например найти слово target.grep -w 'target'
👉С помощью опций
-A и -B можно показать строки после совпадения и до совпадения. А опция -C покажет строки до и после совпадения.grep -A 3 'bbo'
grep -B 3 'bbo'
grep -C 3 'bbo'
👉Чтобы наоборот исключить из вывода найденные по шаблону строку используют опцию
-v. Например исключим комментарии, начинающиеся с #.grep -v '^#'
👉С помощью опции
-m мы можем указать сколько первых совпадений показать. Например вывести только первое совпадение.grep -m 1 bbo
👉Для поиска без учета регистра используют опцию
-i.grep -i bbo
👉Чтобы расскрасить найденное слово используют опцию
--color.grep --color bbo
👉В регулярных выражениях символ начала строки
^, а символ конца строки $.Строки начинающиеся на s:
grep '^s'Строки заканчивающиеся на s:
grep 's$'📌Для того чтобы создать массив в bash нужно использовать скобки и перечислить через пробелы элементы массива. Например:
Пробежаться по этому массиву можно с помощью цикла for.
Это можно использовать для написания скриптов. Например в массиве вы указываете список баз данных. А затем с помощью цикла создаёте дампы перечисленных баз.
Или например можно поработать с файлами.
animals=("cat" "dog" "horse" "cow")Пробежаться по этому массиву можно с помощью цикла for.
for i in "${animals[@]}"; do
echo "$i"
doneЭто можно использовать для написания скриптов. Например в массиве вы указываете список баз данных. А затем с помощью цикла создаёте дампы перечисленных баз.
Или например можно поработать с файлами.
files=("file1.txt" "file2.txt" "file3.txt")
for f in "${files[@]}"; do
cp "$f" /backup/
done👍3
📌ZPOOL TRIM
✅Команда zpool trim инициирует процесс TRIM для разделов ZFS. То есть сообщает SSD (или другому блоку устройства, поддерживающему TRIM), какие блоки больше не используются и могут быть физически очищены.
Полезно trim запускать:
- После удаления большого объема данных.
- После пересоздания или восстановления пула.
- Регулярно, по расписанию, например раз в месяц.
✅Можно настроить автоматический trim на пуле:
Автоматический TRIM в ZFS (autotrim=on) работает в фоновом режиме, асинхронно. Работает периодически, не сразу после удаления.
Из-за неизвестного алгоритма autotrim и отсутствия его настроек, лично я предпочитаю запускать trim вручную по расписанию в cron.
✅Команда zpool trim инициирует процесс TRIM для разделов ZFS. То есть сообщает SSD (или другому блоку устройства, поддерживающему TRIM), какие блоки больше не используются и могут быть физически очищены.
zpool trim <pool_name>
Полезно trim запускать:
- После удаления большого объема данных.
- После пересоздания или восстановления пула.
- Регулярно, по расписанию, например раз в месяц.
✅Можно настроить автоматический trim на пуле:
zpool set autotrim=on <pool_name>
Автоматический TRIM в ZFS (autotrim=on) работает в фоновом режиме, асинхронно. Работает периодически, не сразу после удаления.
Из-за неизвестного алгоритма autotrim и отсутствия его настроек, лично я предпочитаю запускать trim вручную по расписанию в cron.
📌Journalctl - утилита для просмотра логов в SystemD
Чтобы посмотреть логи службы или ядра в системах на базе SystemD используется команда journalctl. Вот основные варианты:
👉Посмотреть логи конкретной службы.
👉Последние строки журнала.
👉Следить за логами в реальном времени (аналог tail -f).
👉Показать логи только за сегодня.
👉Показать логи за конкретный период.
👉Чтобы просмотреть сообщения ядра, а также можем добавить вывод последних сообщений.
👉Все дополнительные опции и фильтры, которые мы применяли для логов службы применимы и для логов ядра. Например:
Чтобы посмотреть логи службы или ядра в системах на базе SystemD используется команда journalctl. Вот основные варианты:
👉Посмотреть логи конкретной службы.
journalctl -u <имя_службы>
👉Последние строки журнала.
journalctl -u <имя_службы> -n 50
👉Следить за логами в реальном времени (аналог tail -f).
journalctl -u <имя_службы> -f
👉Показать логи только за сегодня.
journalctl -u <имя_службы> --since today
👉Показать логи за конкретный период.
journalctl -u <имя_службы> --since "2025-06-17 14:00" --until "2025-06-17 15:00"
👉Чтобы просмотреть сообщения ядра, а также можем добавить вывод последних сообщений.
journalctl -k
journalctl -k -f
👉Все дополнительные опции и фильтры, которые мы применяли для логов службы применимы и для логов ядра. Например:
journalctl -k --since today