Files
ispmanager-mod_rewrite/README.ru.md
Alexey Berezhok f4792f68f2 Fixes
2026-07-21 23:21:53 +03:00

198 lines
11 KiB
Markdown
Raw Permalink Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# ispmanager-mod_rewrite
## Описание
Плагин для ispmanager для поддержки [mod_rewrite](https://github.com/bayrepo/ngx_http_apache_rewrite_module)
## Поддерживаемые ОС
- AlmaLinux 9/10
- CentOS Stream 9/10
- и подобные операционные системы на базе RedHat
## Описание работы
Плагин при установке пытается определить установленный nginx и его версию, скачивает необходимые пакеты и исходные коды модуля для nginx, собирает модуль и подготавливает собранный .so файл, размещая его в каталоге модулей nginx.
Далее в UI ispmanager можно активировать модуль и подключить его для нужных сайтов.
В пакете установлен хук, который отслеживает версию пакета nginx и при обновлении пересобирает модуль.
## Логи
Файлы логов работы плагина и сборки можно найти по пути:
- /usr/local/mgr5/var/nginx-mod-rewrite-plugin-addon.log
- /usr/local/mgr5/var/nginx-mod-rewrite-plugin.log
## Сборка пакета
Для сборки пакета требуется наличие Docker в ОС, и больше ничего не нужно.
Для сборки пакета RPM плагина для ispmanager необходимо выполнить следующую команду:
```
bash build_package.sh almalinux:9
```
Где almalinux:9 это может быть любой образ RPMbased ОС.
Если сборка прошла успешно, в каталоге _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.x86_64.rpm
```
На этом сборка окончена.
## Установка и описание настроек
Для установки необходимо установить пакет `ispmanager-plugin-nginx_mod_rewrite_plugin` на машине с установленным ispmanager. ispmanager должен быть сконфигурирован для поддержки nginx. Во время установки будут установлены некоторые пакеты.
Список пакетов, которые будут установлены:
- openssl-devel
- pcre-devel
- zlib-devel
- gcc
- gcc-c++
- make
- wget
- python3
Т.к. nginx требует сборки любого модуля именно с текущей версией, модуль собирается при установке, определяя версию nginx и подстраивая сборку.
Если же nginx обновляется, при установке добавляется хук, который при обновлении nginx пересобирает модуль для новой версии.
Для установки нужно установить собранный в предыдущем пункте пакет:
```
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`.
Если всё прошло успешно, перейдите в раздел «Модули»:
![Модули](img/isp_mod_rewrite1.png)
Найдите модуль «Модуль nginx mod_rewrite» и нажмите значок настройки. На изображении выше он обведён синим контуром.
Далее откроется окно сборки модуля:
![Сборка](img/isp_mod_rewrite2.png)
Для отмены сборки нажмите кнопку «Отменить сборку». Для сборки и установки хука на пересборку при обновлении nginx нажмите «Собрать модуль и установить хук на пересборку».
Процесс сборки можно изучить в логе: `/usr/local/mgr5/var/nginx-mod-rewrite-plugin.log`.
Если сборка прошла успешно, на сервере появятся файлы:
```
# cat /usr/share/nginx/modules/ngx_http_apache_rewrite_module.conf
load_module "/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)
Для этого, как показано на изображении, нужно перейти в раздел «Все разделы» и далее найти раздел «mod_rewrite для nginx» и его пункт меню «Настройка модуля nginx».
Откроется следующее окно настроек:
![Настройки](img/isp_mod_rewrite4.png)
Где:
- **Добавить модуль 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 для сайта можно через меню «Сайты»:
![Включение для сайта](img/isp_mod_rewrite5.png)
В меню выберите интересующий сайт, включите галочку «Включить для сайта поддержку 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.