Added mod_rewrite for nginx module
This commit is contained in:
182
BUILD.ru.md
Normal file
182
BUILD.ru.md
Normal file
@@ -0,0 +1,182 @@
|
||||
# Сборка пакета
|
||||
|
||||
## Сборка бинарного файла с использованием docker-образа
|
||||
|
||||
Для сборки образа скачайте и разархивируйте nginx в корень проекта:
|
||||
Например так:
|
||||
```
|
||||
wget https://nginx.org/download/nginx-1.26.3.tar.gz
|
||||
tar xvf nginx-1.26.3.tar.gz
|
||||
```
|
||||
Далее соберите образ, используя Dockerfile в корне проекта (сборка под almalinux:9):
|
||||
```
|
||||
docker build -t nginx-mod_rewrite .
|
||||
```
|
||||
|
||||
Получаем образ с nginx и собранным mod_rewrite.
|
||||
|
||||
Для запуска образа необходимо выполнить команду:
|
||||
```
|
||||
docker run --name nginx-mod_rewrite -p 8080:80 -p 8081:8081 nginx-mod_rewrite
|
||||
```
|
||||
|
||||
## Сборка пакета под заданную операционную систему
|
||||
|
||||
В корне проекта расположен скрипт `package_preparer.sh`, который позволяет собрать rpm или deb пакет под определенную операционную систему. Под какую операционную систему и нативную версию nginx будет собран пакет, зависит от используемого образа.
|
||||
|
||||
Для сборки пакета необходимо запустить команду:
|
||||
```
|
||||
bash package_preparer.sh prepare "almalinux:9"
|
||||
```
|
||||
|
||||
Сборка проверялась на образах:
|
||||
|
||||
* almalinux:9
|
||||
* almalinux:8
|
||||
* rockylinux:9
|
||||
* ubuntu:24.04
|
||||
* debian:stable
|
||||
|
||||
|
||||
|
||||
После сборки собранные пакеты появятся в каталоге tmpbuild:
|
||||
```
|
||||
$ ls -1 tmpbuild/*.rpm
|
||||
tmpbuild/nginx-mod-rewrite-0.1-1.el9.src.rpm
|
||||
tmpbuild/nginx-mod-rewrite-0.1-1.el9.x86_64.rpm
|
||||
tmpbuild/nginx-mod-rewrite-debuginfo-0.1-1.el9.x86_64.rpm
|
||||
tmpbuild/nginx-mod-rewrite-debugsource-0.1-1.el9.x86_64.rpm
|
||||
```
|
||||
или
|
||||
```
|
||||
$ ls -1 tmpbuild/nginx-mod-rewrite*
|
||||
tmpbuild/nginx-mod-rewrite_0.1-1_amd64.buildinfo
|
||||
tmpbuild/nginx-mod-rewrite_0.1-1_amd64.changes
|
||||
tmpbuild/nginx-mod-rewrite_0.1-1_amd64.deb
|
||||
tmpbuild/nginx-mod-rewrite_0.1-1.dsc
|
||||
tmpbuild/nginx-mod-rewrite_0.1-1.tar.gz
|
||||
tmpbuild/nginx-mod-rewrite-0.1.tar.gz
|
||||
tmpbuild/nginx-mod-rewrite-dbgsym_0.1-1_amd64.deb
|
||||
```
|
||||
|
||||
Для того чтобы команда
|
||||
```bash
|
||||
bash -x package_preparer.sh prepare "os-image"
|
||||
```
|
||||
работала корректно, в системе должны быть установлены и доступны следующие утилиты (каждая из которых берётся из пакета, поставляемого в вашем дистрибутиве Linux):
|
||||
|
||||
| Утилита | Что делает в `prepare`‑разделе | Пакет (Debian/Ubuntu) |
|
||||
|---------|--------------------------------|------------------------|
|
||||
| **`bash`** | Запуск самого скрипта | уже установлен |
|
||||
| **`rm`, `mkdir`, `cp`, `find`, `head`, `gzip`, `tee`** | Очистка/создание каталогов, копирование файлов, поиск, сжатие, логирование | `coreutils` |
|
||||
| **`sed`** (GNU sed) | Параметризация шаблонов, удаление/замена строк | `sed` (GNU sed, пакет `sed` из coreutils) |
|
||||
| **`awk`** | Извлечение версии из `CHANGELOG`, генерация changelog‑файла | `gawk` (или `awk`‑пакет) |
|
||||
| **`tar`** | Создание tar‑архива, добавление файлов | `tar` |
|
||||
| **`docker`** (команды `docker build`, `docker run`, `docker rmi`) | Построение временного образа, запуск контейнера, очистка | `docker.io` / `docker-ce` + работающий **daemon** |
|
||||
|
||||
> **Замечание по `sed`**
|
||||
> В скрипте используются расширенные регулярные выражения (`sed -E`) и модификация файла на месте (`sed -i`). Это GNU‑вариант `sed`. На системах, где `sed` – BSD‑вариант (например, macOS), команда `sed -E -i` не будет работать, поэтому в таких окружениях нужно установить GNU‑`sed` (`gsed`) и заменить вызовы на `gsed`.
|
||||
|
||||
Docker‑демон должен быть запущен, и пользователь должен иметь права на его использование (или быть в группе `docker`).
|
||||
|
||||
Основная сборка происходит в docker‑контейнере, поэтому основная система не засоряется лишними пакетами. Основной набор утилит, используемых скриптом, присутствует в дистрибутиве по умолчанию, поэтому необходимо только установить docker.
|
||||
|
||||
Сборщик анализирует версию nginx, установленную в дистрибутиве, и производит сборку в окружении исходных файлов аналогичной версии nginx дистрибутива, а также командами, аналогичными, которые использовались при сборке nginx из дистрибутива.
|
||||
|
||||
## Ручная сборка из исходников
|
||||
|
||||
Если же необходимо собрать модуль самостоятельно, необходимо выполнить следующие команды.
|
||||
|
||||
Привожу пример для Almalinux 9.
|
||||
|
||||
Установите необходимые пакеты для сборки:
|
||||
```
|
||||
dnf -y install openssl-devel pcre-devel zlib-devel gcc gcc-c++ make wget
|
||||
```
|
||||
|
||||
В корне проекта:
|
||||
```
|
||||
bash package_preparer.sh download 1.22.1
|
||||
```
|
||||
|
||||
В качестве версии можно задать любую доступную на сайте `https://nginx.org/ru/download.html`, она будет скачана и распакована в текущий каталог.
|
||||
|
||||
Далее перейти в папку nginx-1.22.1:
|
||||
```
|
||||
cd nginx-1.22.1
|
||||
```
|
||||
и задать конфигурацию сборки. Я привожу пример конфигурации, она может отличаться; данный пример — это типичная конфигурация:
|
||||
```
|
||||
./configure \
|
||||
--with-compat \
|
||||
--add-dynamic-module=../modules/mod_rewrite \
|
||||
--prefix=/etc/nginx \
|
||||
--sbin-path=/usr/sbin/nginx \
|
||||
--modules-path=/etc/nginx/modules \
|
||||
--conf-path=/etc/nginx/nginx.conf \
|
||||
--error-log-path=/var/log/nginx/error.log \
|
||||
--http-log-path=/var/log/nginx/access.log \
|
||||
--pid-path=/var/run/nginx.pid \
|
||||
--lock-path=/var/run/nginx.lock \
|
||||
--http-client-body-temp-path=/var/lib/nginx/body \
|
||||
--http-proxy-temp-path=/var/lib/nginx/proxy \
|
||||
--http-fastcgi-temp-path=/var/lib/nginx/fastcgi \
|
||||
--http-uwsgi-temp-path=/var/lib/nginx/uwsgi \
|
||||
--http-scgi-temp-path=/var/lib/nginx/scgi \
|
||||
--with-http_ssl_module \
|
||||
--with-http_v2_module \
|
||||
--with-http_realip_module \
|
||||
--with-http_gzip_static_module \
|
||||
--with-http_stub_status_module \
|
||||
--with-http_slice_module \
|
||||
--with-http_dav_module \
|
||||
--with-http_auth_request_module \
|
||||
--with-http_secure_link_module \
|
||||
--with-stream \
|
||||
--with-stream_ssl_module \
|
||||
--with-stream_realip_module \
|
||||
--with-stream_ssl_preread_module \
|
||||
--with-pcre-jit
|
||||
```
|
||||
|
||||
Во время выполнения команды должно появиться:
|
||||
```
|
||||
adding module in ../modules/mod_rewrite
|
||||
+ ngx_http_apache_rewrite_module was configured
|
||||
```
|
||||
|
||||
Можно добавить `--add-dynamic-module=../modules/mod_rewrite` в свою конфигурацию nginx.
|
||||
|
||||
Далее:
|
||||
```
|
||||
make modules
|
||||
```
|
||||
данная команда соберет модуль:
|
||||
```
|
||||
# ls -1 objs/ngx_http_apache_rewrite_module.so
|
||||
objs/ngx_http_apache_rewrite_module.so
|
||||
```
|
||||
Далее его можно переложить в каталог модулей nginx:
|
||||
```
|
||||
cp objs/ngx_http_apache_rewrite_module.so /etc/nginx/modules/
|
||||
```
|
||||
и подключить модуль в файле конфигурации nginx:
|
||||
```
|
||||
cat /etc/nginx/nginx.conf
|
||||
|
||||
load_module modules/ngx_http_apache_rewrite_module.so;
|
||||
|
||||
...
|
||||
|
||||
server {
|
||||
...
|
||||
HtaccessEnable on;
|
||||
|
||||
RewriteEngine On;
|
||||
|
||||
location / {
|
||||
RewriteEngine On;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user