Аннотация
В данной статье представлена инструкция по установке web-сервера NGINX. Web-сервера NGINX (пакет nginx) доступен в составе расширенного репозитория Astra Linux Special Edition x.7 (см. Репозитории Astra Linux Special Edition x.7: структура, особенности подключения и использования ).
Программное обеспечение расширенного репозитория является сторонним по отношению к Astra Linux, не дорабатывается с точки зрения выполнения требований по безопасности информации и не проверяется при сертификации.
Подробнее см. Использование стороннего программного обеспечения в аттестованных информационных системах, функционирующих под управлением Astra Linux Special Edition.
При использовании программного обеспечения расширенного репозитория рекомендуется для дополнительной изоляции процессов осуществлять их запуск в изолированной программной среде (контейнере) [п. 7.2 РукКСЗ1]. При использовании для этих целей Docker-контейнеров их запуск целесообразно осуществлять от имени непривилегированного пользователя в rootless-режиме, а при включенном мандатном контроле целостности (МКЦ) с применением технологии запуска контейнеров на пониженном [п. 7.2.1] или выделенном [п. 7.2.7] уровне МКЦ.
Что такое NGINX
Общая информация
NGINX (читается [engine x]) — это HTTP-сервер и обратный прокси-сервер, почтовый прокси-сервер, а также TCP/UDP прокси-сервер общего назначения, выполняющий следующие функции:
- Основная функциональность HTTP-сервера:
- Обслуживание статических запросов, индексных файлов, автоматическое создание списка файлов, кэш дескрипторов открытых файлов;
- Акселерированное обратное проксирование с кэшированием, распределение нагрузки и отказоустойчивость;
- Акселерированная поддержка FastCGI, uwsgi, SCGI и memcached серверов с кэшированием, распределение нагрузки и отказоустойчивость;
- Модульность;
- Фильтры, в том числе сжатие (gzip), byte-ranges (докачка), chunked ответы, XSLT-фильтр, SSI-фильтр, преобразование изображений; параллельная обработка подзапросов на одной странице в SSI-фильтре через прокси или FastCGI/uwsgi/SCGI;
- Поддержка SSL и расширения TLS SNI;
- Поддержка HTTP/2 с приоретизацией на основе весов и зависимостей;
- Виртуальные серверы, определяемые по IP-адресу и имени;
- Поддержка keep-alive и pipelined соединений;
- Настройка форматов журналов, буферизованная запись в журналы, быстрая ротация журналов, запись журналов в syslog;
- Специальные страницы для ошибок 3xx-5xx;
- rewrite-модуль: изменение URI с помощью регулярных выражений;
- Выполнение разных функций в зависимости от адреса клиента;
- Ограничение доступа в зависимости от адреса клиента, по паролю (HTTP Basic аутентификация) и по результату подзапроса;
- Проверка HTTP referer;
- Методы PUT, DELETE, MKCOL, COPY и MOVE;
- FLV и MP4 стриминг;
- Возможность ограничения скорости отдачи ответов;
- Возможность ограничение числа одновременных соединений и запросов с одного адреса;
- Геолокация по IP-адресу;
- A/B-тестирование;
- Зеркалирование запросов;
- Встроенный Perl;
- Сценарный язык njs;
- Перенаправление пользователей на IMAP- или POP3-серверы с использованием внешнего HTTP-сервера аутентификации;
- Аутентификация пользователей с помощью внешнего HTTP-сервера аутентификации и перенаправление соединения на внутренний SMTP-сервер;
- Поддерживаемые методы аутентификации:
- POP3: USER/PASS, APOP, AUTH LOGIN/PLAIN/CRAM-MD5;
- IMAP: LOGIN, AUTH LOGIN/PLAIN/CRAM-MD5;
- SMTP: AUTH LOGIN/PLAIN/CRAM-MD5;
- Проксирование TCP и UDP;
- Поддержка SSL и расширения TLS SNI для TCP;
- Распределение нагрузки и отказоустойчивость;
- Ограничение доступа в зависимости от адреса клиента;
- Выполнение разных функций в зависимости от адреса клиента;
- Ограничение числа одновременных соединений с одного адреса;
- Настройка форматов журналов, буферизованная запись в журналы, быстрая ротация журналов, запись журналов в syslog;
- Геолокация по IP-адресу;
- A/B-тестирование;
- Сценарный язык njs;
- Один главный и несколько рабочих процессов, рабочие процессы работают под непривилегированным пользователем;
- Изменение настроек и обновление исполняемого файла без перерыва в обслуживании клиентов;
- Поддержка kqueue (FreeBSD 4.1+), epoll (Linux 2.6+), /dev/poll (Solaris 7 11/99+), event ports (Solaris 10), select и poll:
- Использование возможностей, предоставляемых kqueue, таких как EV_CLEAR, EV_DISABLE (для временного выключения события), NOTE_LOWAT, EV_EOF, число доступных данных, коды ошибок;
- Использование возможностей, предоставляемых epoll, таких как EPOLLRDHUP (Linux 2.6.17+, glibc 2.8+) и EPOLLEXCLUSIVE (Linux 4.5+, glibc 2.24+);
Оригинальная документация NGINX
Оригинальная документация NGINX доступна по ссылке: https://nginx.org/ru/
Установка NGINX
Для установки пакета nginx:
- Подключить репозитории:
- актуальное оперативное обновление расширенного репозитория;
Установка и настройка связки NGINX + PHP + СУБД на Astra Linux
Обновлено: 21.03.2023 Опубликовано: 2016 год или раньше
Мы рассмотрим процесс настройки небольшого веб-сервера на базе NGINX с интерпретатором PHP и системами управления базами данных MySQL и PostgreSQL.
Данную инструкцию можно использовать для любой операционной системы Linux на основе Debian.
Подготовка сервера
Заходим в систему под суперпользователем:
Настраиваем сеть. В Astra Linux это делается также как и в Ubuntu:
auto eth0
iface lo inet eth0
address 192.168.0.15
netmask 255.255.255.0
gateway 192.168.0.1
dns-nameservers 192.168.0.1 192.168.0.2* В данном примере мы настроили сетевой интерфейс eth0 (задали IP-адрес 192.168.0.15 маску 255.255.255.0 и шлюз по умолчанию 192.168.0.1)
Для применения настроек необходимо перезапустить сетевую службу:
service networking restart
В Astra Linux по умолчанию не настроены репозитории для установки пакетов, поэтому необходимо это сделать:
deb ftp://ftp.astra-linux.com/astra/current/orel/repository orel main contrib non-free
* Эта строчка подключает официальный репозиторий Astra Linux.
Теперь нужно обновить список пакетов и обновить систему:
Установим sshd для возможности удаленного управления нашим сервером:
apt install openssh-server
Установка и настройка Nginx, PHP, MySQL
Устанавливаем пакет mysql-server:
* Во время установки будет предложено ввести новый пароль для mysql-записи root
В официальных репозиториях Astra Linux нет Nginx, поэтому подключим официальный от nginx inc.:
deb http://nginx.org/packages/debian/ wheezy nginx
* wheezy соответствует 7-й версии Debian. У вас может быть другая версия. Будьте внимательны.
Для успешного получения списка пакетов от нового репозитория, добавляем в систему PGP-ключ:
apt-key add nginx_signing.key
Теперь можем обновлять список пакетов и устанавливать веб-сервер nginx:
Демон запускается автоматически. Попробуйте открыть браузер и ввести IP-адрес сервера. Вы должны увидеть приветствие от Nginx.
Устанавливаем php и php-интерпретатор:
В Astra Linux по умолчанию nginx работает от учетной записи nginx, а php-fpm — от www-data. В результате этого при попытке использовать веб-сервер с php-скриптами мы получим ошибку. Для решения этой проблемы необходимо поменять пользователя, от которого будет работать либо nginx, либо php-fpm. В данном примере, nginx:
* самая первая строчка — меняем nginx на www-data.
Настраиваем виртуальный домен для нового сайта:
server listen 80;
server_name site.local;
set $root_path /var/www/site.local;gzip on;
client_max_body_size 128M;
gzip_min_length 1000;
gzip_vary on;
gzip_proxied expired no-cache no-store private auth;
gzip_types application/x-javascript text/plain application/xml text/css;location / allow 192.168.0.0/16;
deny all;
root $root_path;
index index.php;
>location ~ \.php$ fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $root_path$fastcgi_script_name;
include fastcgi_params;
fastcgi_param DOCUMENT_ROOT $root_path;
>location ~* ^.+\.(jpg|jpeg|gif|png|css|zip|tgz|gz|rar|bz2|exe|tar|bmp|js)$ root $root_path;
expires modified +1w;
>
>* site.local необходимо заменить на домен вашего веб-приложения или сайта.
** /var/www/site.local — директория, в которую мы поместим файлы сайта.
*** allow 192.168.0.0/16 — подсеть, для которой мы разрешаем доступ к сайту. Если ограничивать не требуется, удалите строчку и следующую за ней deny all.
**** Остальные параметры я рекомендую изучить самостоятельно.Создаем директорию для сайта, которую мы указали в конфигурационном файле:
Создаем в нем файл index.php с функцией phpinfo:
Перезапускаем наши демоны:
service php5-fpm restart && service nginx restart
Проверьте работоспособность сервера, введя в адресной строке браузера IP-адрес сервера (в данном примере, 192.168.0.15). Сервер должен вернуть много параметров в различных таблицах.
Также в данных таблицах вы должны увидеть «MySQL Suppert — Enabled». Это говорит о том, что сервер готов к работе с базой MySQL.
Astra linux install nginx
Скачиваем дистрибутив КриптоПро CSP с сайта.
Распаковываем и устанавливаем КриптоПро CSP КС1 с дополнительными компонентами lsb-cprocsp-devel:
tar -xvf ./linux-amd64_deb.tgz && cd ./linux-amd64_deb/
sudo ./install.sh kc1 lsb-cprocsp-devel cprocsp-stunnelДля сборки Nginx на Astra Smolensk 1.6 SE необходимо установить пакеты build-essential и patch.
Скачиваем актуальный devel DVD — https://download.astralinux.ru/astra/stable/smolensk/devel/1.6/
Монтируем:
sudo apt-cdrom add
sudo apt update
sudo apt-get install build-essential patchСкачиваем Nginx и накладываем патч:
wget https://nginx.org/download/nginx-1.18.0.tar.gz
tar -xvf ./nginx-1.18.0.tar.gz
cp ./ng-nginx.1.18.0.patch ./nginx-1.18.0 && cd ./nginx-1.18.0/
patch -p1 < ./ng-nginx.1.18.0.patchПолучаем дополнительные исходные тексты:
wget https://sourceforge.net/projects/pcre/files/pcre/8.45/pcre-8.45.tar.gz
tar -xvf ./pcre-8.45.tar.gz
wget https://zlib.net/zlib-1.2.13.tar.gz
tar -xvf ./zlib-1.2.13.tar.gz
wget https://www.openssl.org/source/openssl-1.1.1o.tar.gz
tar -xvf ./openssl-1.1.1o.tar.gzСобираем (предварительно проверив пути):
./configure \
—user=nginx \
—group=nginx \
—with-cc-opt=’-fstack-protector -fstack-protector-strong —param=ssp-buffer-size=4 -Wformat -Werror=format-security -Werror=implicit-function-declaration -Winit-self -Wp,-D_FORTIFY_SOURCE=2 -fPIC’ \
—with-ld-opt=’-Wl,-z,relro -Wl,-z,now -Wl,—as-needed -pie -L/opt/cprocsp/lib/amd64 -lrdrsup -lssp -lcapi10 -lcapi20′ \
—prefix=/opt/nginx \
—conf-path=/etc/nginx/nginx.conf \
—error-log-path=/var/log/nginx/error.log \
—http-log-path=/var/log/nginx/access.log \
—lock-path=/var/run/lock/nginx.lock \
—pid-path=/var/run/nginx.pid \
—with-pcre=./pcre-8.45/ \
—with-pcre-jit \
—with-zlib=./zlib-1.2.13/ \
—with-http_ssl_module \
—with-http_sspi_module \
—with-http_stub_status_module \
—with-openssl=./openssl-1.1.1o/ \
—with-openssl-opt=’no-gost no-comp no-dtls no-deprecated no-dynamic-engine no-engine no-hw-padlock no-nextprotoneg no-psk no-tests no-ts no-ui-console no-ocsp’ \
—with-stream \
—with-stream_ssl_module \
—with-stream_sspi_module \
—with-http_v2_moduleДля rhel based дистрибутивов добавляются опции:
—with-pcre-opt=-fPIC —with-zlib-opt=-fPICКопируем базовый конфиг в директорию с кодом:
sudo cp ./nginx.conf.sample ./nginx-1.18.0/conf/nginx.conf
make
sudo make installСоздаем системного пользователя:
sudo adduser —system —no-create-home —group nginx
sudo chown -R nginx:nginx /var/log/nginx/Переносим init скрипт:
sudo cp ./nginx.init /etc/init.d/nginx
sudo chmod +x /etc/init.d/nginx
sudo systemctl daemon-reloadСоздаем запрос на сертификат для Nginx:
sudo -u nginx /opt/cprocsp/bin/amd64/cryptcp -creatrqst -provtype 80 -rdn ‘CN=Astra, C=RU ,S=77 Москва, L=г. Москва’ -certusage 1.3.6.1.5.5.7.3.1 -cont ‘\\.\HDIMAGE\nginx1’ -ex /tmp/request.reqВыпускаем на УЦ сертификат по запросу и устанавливаем в контейнре:
sudo -u nginx /opt/cprocsp/bin/amd64/certmgr -install -store uMy -cont ‘\\.\HDIMAGE\nginx1’ -file /tmp/user.crtДополнительная информация и пример конфигурационного файла по ссылке.
Доступность сервиса проверяем с помощью:
csptest
/opt/cprocsp/bin/amd64/csptest -tlsc -server host_name -vбраузера с поддержкой ГОСТ TLS (на Linux — Chromium GOST)
Открыть страницу в браузере, посмотреть сертификат, убедиться что алгоритм ГОСТ.