This commit is contained in:
Alexey Berezhok
2026-07-21 23:21:53 +03:00
parent 053d60f354
commit f4792f68f2
3 changed files with 105 additions and 30 deletions

View File

@@ -2,21 +2,21 @@
## Описание ## Описание
Плагин для ispmanager дляя поддержки [mod_rewrite](https://github.com/bayrepo/ngx_http_apache_rewrite_module) Плагин для ispmanager для поддержки [mod_rewrite](https://github.com/bayrepo/ngx_http_apache_rewrite_module)
## Поддерживаемые ОС ## Поддерживаемые ОС
- AlmaLinux 9/10 - AlmaLinux 9/10
- CentOS Stream 9/10 - CentOS Stream 9/10
- и подбные RedHat подобные операционные системы - и подобные операционные системы на базе RedHat
## Описание работы ## Описание работы
Плагин при установке пытается определить установленный nginx и его версию, скачивает необходимые пакеты и исходные коды модуля для nginx, собирает модуль и подкладывает собранные so файл, к модулям nginx. Плагин при установке пытается определить установленный nginx и его версию, скачивает необходимые пакеты и исходные коды модуля для nginx, собирает модуль и подготавливает собранный .so файл, размещая его в каталоге модулей nginx.
Далее в UI ispmanager можно активировать модуль и подключить для нужных сайтов. Далее в UI ispmanager можно активировать модуль и подключить его для нужных сайтов.
В пакете установлен хук, которые отслеживает версию nginx пакета и при обнолвлении пересобирает модуль. В пакете установлен хук, который отслеживает версию пакета nginx и при обновлении пересобирает модуль.
## Логи ## Логи
@@ -27,16 +27,16 @@
## Сборка пакета ## Сборка пакета
Для сборки пакета требуется наличие docker в ОС, более ничего не нужно. Для сборки пакета требуется наличие Docker в ОС, и больше ничего не нужно.
Для сборки пакета rpm плагина для ispmanager, необходимо выполнить следующую команду: Для сборки пакета RPM плагина для ispmanager необходимо выполнить следующую команду:
``` ```
bash build_package.sh almalinux:9 bash build_package.sh almalinux:9
``` ```
Где almalinux:9 - это может быть любой образ rpm-based ОС. Где almalinux:9 это может быть любой образ RPMbased ОС.
Если сборка прошла успешно, в каталоге _packages появятся rpm файлы, пример таких файлов: Если сборка прошла успешно, в каталоге _packages появятся rpmфайлы, пример таких файлов:
``` ```
_packages/ispmanager-plugin-nginx_mod_rewrite_plugin-0.0.1-1.el9.src.rpm _packages/ispmanager-plugin-nginx_mod_rewrite_plugin-0.0.1-1.el9.src.rpm
@@ -47,9 +47,9 @@ _packages/ispmanager-plugin-nginx_mod_rewrite_plugin-0.0.1-1.el9.x86_64.rpm
## Установка и описание настроек ## Установка и описание настроек
Для установки, необходимо установить пакет `ispmanager-plugin-nginx_mod_rewrite_plugin` на машине с уставновленным ispmanager. ispmanager должен быть сконфигурирован поддерживать nginx. Во время установки будут доустановлены, некоторые пакеты. Для установки необходимо установить пакет `ispmanager-plugin-nginx_mod_rewrite_plugin` на машине с установленным ispmanager. ispmanager должен быть сконфигурирован для поддержки nginx. Во время установки будут установлены некоторые пакеты.
Список пакетов, которые будут достановлены: Список пакетов, которые будут установлены:
- openssl-devel - openssl-devel
- pcre-devel - pcre-devel
@@ -60,9 +60,9 @@ _packages/ispmanager-plugin-nginx_mod_rewrite_plugin-0.0.1-1.el9.x86_64.rpm
- wget - wget
- python3 - python3
Т.к nginx требует сборки любого модуля именно с текущей версией, поэтому модуль собирается именно при установке, детектится версия nginx и под нее происходит сборка. Т. nginx требует сборки любого модуля именно с текущей версией, модуль собирается при установке, определяя версию nginx и подстраивая сборку.
Если же nginx обновляется, то при установке добавляется хук, который при обновлении nginx пересобирает под новый nginx модуль. Если же nginx обновляется, при установке добавляется хук, который при обновлении nginx пересобирает модуль для новой версии.
Для установки нужно установить собранный в предыдущем пункте пакет: Для установки нужно установить собранный в предыдущем пункте пакет:
@@ -70,40 +70,45 @@ _packages/ispmanager-plugin-nginx_mod_rewrite_plugin-0.0.1-1.el9.x86_64.rpm
sudo dnf install _packages/ispmanager-plugin-nginx_mod_rewrite_plugin-0.0.1-1.el9.x86_64.rpm sudo dnf install _packages/ispmanager-plugin-nginx_mod_rewrite_plugin-0.0.1-1.el9.x86_64.rpm
``` ```
Если вдруг установка провалилась, лог установки можно изучить здесь - `/usr/local/mgr5/var/nginx-mod-rewrite-plugin.log` Если установка провалилась, лог можно изучить здесь `/usr/local/mgr5/var/nginx-mod-rewrite-plugin.log`.
Если все прошло успешно, то необходимо перейти в раздел "Модули": Если всё прошло успешно, перейдите в раздел «Модули»:
![Модули](img/isp_mod_rewrite1.png) ![Модули](img/isp_mod_rewrite1.png)
Найти модуль с названием "Модуль nginx mod_rewrite" и нажать на значек настройки модуля. На изображении выше обведены синим контуром. Найдите модуль «Модуль nginx mod_rewrite» и нажмите значок настройки. На изображении выше он обведён синим контуром.
Далее откроется окно сборки модуля: Далее откроется окно сборки модуля:
![Сборка](img/isp_mod_rewrite2.png) ![Сборка](img/isp_mod_rewrite2.png)
Для отмены сборки, нажмите кнопку "Отменить сборку". Для сборки и установки хука пересборки при обновлении nginx необходимо нажать "Собать модуль и установить хук на пересборку". Для отмены сборки нажмите кнопку «Отменить сборку». Для сборки и установки хука на пересборку при обновлении nginx нажмите «Собрать модуль и установить хук на пересборку».
Процесс сборки можно будет изучить в логе: `/usr/local/mgr5/var/nginx-mod-rewrite-plugin.log. Процесс сборки можно изучить в логе: `/usr/local/mgr5/var/nginx-mod-rewrite-plugin.log`.
Если сборка прошла успешно, то в на сервере появится файл: Если сборка прошла успешно, на сервере появятся файлы:
``` ```
# cat /usr/share/nginx/modules/ngx_http_apache_rewrite_module.conf # cat /usr/share/nginx/modules/ngx_http_apache_rewrite_module.conf
load_module "/usr/lib64/nginx/modules/ngx_http_apache_rewrite_module.so"; load_module "/usr/lib64/nginx/modules/ngx_http_apache_rewrite_module.so";
``` ```
и файл: и
``` ```
/usr/lib64/nginx/modules/ngx_http_apache_rewrite_module.so /usr/lib64/nginx/modules/ngx_http_apache_rewrite_module.so
``` ```
соответсвенно. соответственно.
Далее нужно перейти в глобальные настройки модуля: Если нужна внеплановая пересборка модуля, её можно запустить вручную командой:
```
sudo /usr/local/ispmanager-mod_rewrite/utils/build_mod_rewrite.py
```
Далее перейдите в глобальные настройки модуля:
![Глобальные настройки модуля](img/isp_mod_rewrite3.png) ![Глобальные настройки модуля](img/isp_mod_rewrite3.png)
Для этого как показано на изображении нужно перети во "Все разделы" и далее найти раздел "mod_rewrite для nginx" и его пункт меню "Настройка модуля nginx". Для этого, как показано на изображении, нужно перейти в раздел «Все разделы» и далее найти раздел «mod_rewrite для nginx» и его пункт меню «Настройка модуля nginx».
Откроется следующее окно настроек: Откроется следующее окно настроек:
@@ -111,12 +116,82 @@ load_module "/usr/lib64/nginx/modules/ngx_http_apache_rewrite_module.so";
Где: Где:
- Добавить модуль nginx - галочка позволяет отключить модуль nginx глобально, т.е в файле `/usr/share/nginx/modules/ngx_http_apache_rewrite_module.conf` закомментируется строка подгрузки модуля. Здесь нужно быть осторожным, если есть хоть один сайт с опцией, которую приносит модуль, то nginx будет ругаться на неизвестную опцию и не сможет запуститься. Поэтому прежде чем отключать, необходимо отключить на всех сайтах опции mod_rewrite для nginx. - **Добавить модуль nginx** галочка позволяет отключить модуль nginx глобально, то есть в файле `/usr/share/nginx/modules/ngx_http_apache_rewrite_module.conf` закомментируется строка загрузки модуля. Здесь нужно быть осторожным: если есть хоть один сайт с опцией, которую предоставляет модуль, то nginx будет ругаться на неизвестную опцию и не сможет запуститься. Поэтому прежде чем отключать, необходимо отключить на всех сайтах опции mod_rewrite для nginx.
- Использовать шаблон для настройки сайта - текущий плагин, позволяет двумя способами встроиться в конфигурацию сайта. Вариант 1 - глобальное включение mod_rewrite для сайта(есои галочка не включена), Вариант 2 - включение mod_rewrite для location через шаблон ispmanager (если галочка включена). О каждом варианте настроек будет расказоно ниже.
- Включить вывод дополнительной информации в лог - если галочка включена, то в лог файл `/usr/local/mgr5/var/nginx-mod-rewrite-plugin-addon.log` записывается детальная работа самого плагина ispmanager. Может понадобиться если плагин некорректно работает. В общих лучаях данная галочка должна быть отключена.
Включить же mod_rewrite для сайта можно через меню "Сайты": - **Использовать шаблон для настройки сайта** текущий плагин позволяет двумя способами встроиться в конфигурацию сайта:
**Вариант1** глобальное включение mod_rewrite для сайта (если галочка не включена).
**Вариант2** включение mod_rewrite для location через шаблон ispmanager (если галочка включена). О каждом варианте настроек будет рассказано ниже.
- **Включить вывод дополнительной информации в лог** если галочка включена, то в лог `/usr/local/mgr5/var/nginx-mod-rewrite-plugin-addon.log` записывается детальная работа самого плагина ispmanager. Может понадобиться, если плагин работает некорректно. В большинстве случаев данная галочка должна быть отключена.
Включить mod_rewrite для сайта можно через меню «Сайты»:
![Включение для сайта](img/isp_mod_rewrite5.png) ![Включение для сайта](img/isp_mod_rewrite5.png)
В меню выбрать интересующий сайт и включить галочку "Включить для сайта поддержку mod_rewrite для nginx". И сохранить. В меню выберите интересующий сайт, включите галочку «Включить для сайта поддержку mod_rewrite для nginx» и сохраните.
С этого момента модуль будет обрабатывать .htaccess и правила mod_rewrite.
Предупреждение! Прошу заметить, что директивы `<IfModule>` и директивы, не относящиеся к mod_rewrite, пропускаются.
**Вариант1 глобальное включение mod_rewrite для сайта (если галочка не включена)**
В данном варианте настроек создаётся персональный файл конфигурации для пользователя `/etc/nginx/vhosts-resources/userX.domain/mod_rewrite.conf`:
```
# cat /etc/nginx/vhosts-resources/userX.domain/mod_rewrite.conf
GlobalLocationRewriteEngine on;
HtaccessEnable on;
```
Он подключается через стандартные настройки для виртуального хоста ispmanager:
```
cat /etc/nginx/vhosts/userX/userX.domain.conf
server {
server_name domain;
charset off;
...
include /etc/nginx/vhosts-resources/userX.domain/*.conf;
include /etc/nginx/users-resources/userX/*.conf;
...
}
```
Данный файл настраивает для виртуального хоста перенаправление всех запросов через mod_rewrite.
**Вариант2 включение mod_rewrite для location через шаблон ispmanager (если галочка включена)**
В данном варианте настроек используется шаблонизация ispmanager.
С помощью патчей из каталога `/usr/local/ispmanager-mod_rewrite/patches` создаются модифицированные шаблоны для виртуального хоста:
```
/usr/local/mgr5/etc/templates/nginx-vhosts-ssl.template
/usr/local/mgr5/etc/templates/nginx-vhosts.template
```
Которыми контрольная панель заменяет шаблоны по умолчанию и при включении галочки «Включить для сайта поддержку mod_rewrite для nginx» для сайта генерируется следующий конфигурационный файл:
```
# cat /etc/nginx/vhosts/userX/userX.domain.conf
server {
server_name domain;
...
location / {
...
RewriteEngine on;
}
location @php {
...
RewriteEngine on;
}
...
HtaccessEnable on;
}
```
Такой подход позволяет более точно расставлять обработку правил для разных локаций, а также исключать некоторые из них.
**Дополнительные рекомендации**
При включённом mod_rewrite для nginx рекомендуется отключить для сайта опцию «Включить обработку ЧПУ», так как она берёт на себя функции mod_rewrite.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 73 KiB

After

Width:  |  Height:  |  Size: 77 KiB

View File

@@ -45,7 +45,7 @@ fi
killall core killall core
%postun %postun
if [ "$1" == "1" ]; then if [ "$1" == "0" ]; then
killall core killall core
if [ -e /usr/local/ispmanager-mod_rewrite/settings ]; then if [ -e /usr/local/ispmanager-mod_rewrite/settings ]; then
rm -f /usr/local/ispmanager-mod_rewrite/settings/* rm -f /usr/local/ispmanager-mod_rewrite/settings/*