- Print
- DarkLight
- PDF
Любая инструкция для linux является примерной,
и создана для того, чтобы показать основные команды и действия,
в связи с очень большим разнообразием linux-систем
Установка дополнительного ПО
Для работы Докзиллы через безопасный протокол HTTPS необходимо установить дополнительное ПО - "NGINX"
CentOS / Rocky / Ред ОС
yum install nginx ## устанавливаем
systemctl enable nginx ## разрешаем автоматический запуск службы
systemctl start nginx ## запускаем службу
-----
Debian / Ubuntu / Astra Linux
apt-get install nginx ## устанавливаем
systemctl enable nginx ## разрешаем автоматический запуск службы
systemctl start nginx ## запускаем службу
-----
Windows Server 2012 / 2016 / 2019 /2022
Nginx для Windows скачивается на официальном сайте https://nginx.org/ru/download.html
Необходимо распаковать архив и запустить файл nginx.exe
Конфигурация
Настройка везде одинаковая, необходимо создать файл конфигурации в нужной директории, например doczilla.conf, и отредактировать его
touch /etc/nginx/conf.d/doczilla.conf ## создание файла конфигурации на linux
vi /etc/nginx/conf.d/doczilla.conf ## редактирование файла конфигурации на linux
##
notepad.exe doczilla.conf ## создание и редактирование файла конфигурации на windows
HTTP протокол
Для работы по HTTP протоколу, необходимо вот такое содержимое
server {
listen 80;
server_name _;
client_max_body_size 50m;
large_client_header_buffers 8 64k;
location / {
proxy_pass http://127.0.0.1:9080;
# Add WSS protocol (WebSocket)
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_set_header Host $host;
}
}
HTTPS протокол
Для работы по HTTPS протоколу, необходимо скопировать два сертификата (открытую часть cert.crt и закрытую часть cert.key) в папку /etc/nginx/ssl/ и вставить в файл конфига вот такое содержимое.
## перенаправление с HTTP на HTTPS
server {
listen 80;
server_name _;
return 301 https://$host$request_uri;
}
## подключение сертификатов и перенаправление на сайт Докзиллы
server {
listen 443 ssl;
server_name _;
ssl_certificate /etc/nginx/ssl/cert.crt;
ssl_certificate_key /etc/nginx/ssl/cert.key;
client_max_body_size 50m;
large_client_header_buffers 8 64k;
location / {
proxy_pass http://127.0.0.1:9080;
# Add WSS protocol (WebSocket)
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_set_header Host $host;
}
}
Балансировка
Nginx позволяет работать как балансировщик, для отказоустойчивости и разделения нагрузки между серверами. Необходимо настроить метод балансировки как на примере:
upstream doczilla {
# задаем балансировку
# round_robin - циклический перебор серверов,
# least_conn - наименьшее количество соединений,
# ip_hash - перенаправление по входящему IP
round_robin;
# при 3х ошибках в течении 30 сек. переход на следующий сервер
server 192.168.0.10:9080 max_fails=3 fail_timeout=30s;
server 192.168.0.11:9080 max_fails=3 fail_timeout=30s;
}
location / {
proxy_pass http://doczilla;
...
}
После всех изменений конфигурации необходимо проверить конфиг, перечитать настройки или перезапустить службу
nginx -t ## проверить корректность настроек
nginx -s reload ## перечитать настройки не отключая пользователей
systemctl restart nginx ## перезапустить службу с отключением всех подключенных пользователей
-----
Настройка брандмауэра/файрволла
Для работы сайта необходимо открыть нужный порт в файрволле
## для файрволла FIREWALLD
firewall-cmd --list-all ## просмотреть статус службы и открытых портов
firewall-cmd --zone=public --add-port=80/tcp --permanent ## открываем порт 80/tcp HTTP
firewall-cmd --zone=public --add-service=http --permanent ## другой вариант открытия порта 80/tcp HTTP
firewall-cmd --zone=public --add-service=https --permanent ## открываем порт 443/tcp HTTPS
firewall-cmd --reload ## перезапустить для применения изменений
## для файрволла UFW
ufw status ## просмотреть статус службы и открытых портов
ufw allow 80 ## открываем порт 80/tcp HTTP
ufw allow http ## другой вариант открытия порта 80/tcp HTTP
ufw allow https ## открываем порт 443/tcp HTTPS
## для файрволла Windows
netsh advfirewall firewall add rule name="Web Port 80" dir=in action=allow protocol=TCP localport=80 ## открываем порт 80/tcp HTTP
netsh advfirewall firewall add rule name="Web Port 443" dir=in action=allow protocol=TCP localport=443 ## открываем порт 443/tcp HTTP
Дополнительные настройки
Увеличение в конфиге doczilla.conf таймаута ответа сервера до 300 секунд, по умолчанию 60
proxy_read_timeout 300;
proxy_connect_timeout 300;
proxy_send_timeout 300;
так же в файле ./work/server.properties необходимо добавить параметр
application.server.request.timeout=300
Увеличение в конфиге doczilla.conf размера загружаемого файла до 50Mb, по умолчанию 1Мb
client_max_body_size 50M;
так же в файле ./work/server.properties необходимо добавить параметр
web.server.upload.max=50
Указание на конкретный докер контейнер через переменную
server_name _;
set $name thebest;
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://$name:9080;
}
Конвертирование сертификата PFX для Nginx в формате Base 64, с разделением на открытый и закрытый сертификаты
## выгружаем из контейнера закрытый ключ с паролем
openssl pkcs12 -in ./cert.pfx -nocerts -out ./temp.key
## ввести пароль от контейнера и дважды любую парольную фразу
Enter Import Password:
Enter PEM pass phrase:
Verifying - Enter PEM pass phrase:
## переводим ключ в RSA формат без пароля
openssl rsa -in ./temp.key -out ./cert.key
## ввести парольную фразу
Enter pass phrase for ./temp.key:
## выгружаем из контейнера открытый сертификат
openssl pkcs12 -in ./cert.pfx -clcerts -nokeys -out ./cert.crt
## ввести пароль от контейнера
Enter Import Password:
Возможные ошибки
nginx: [emerg] 727#727: SSL_CTX_load_verify_locations("/etc/nginx/ssl/cert.cer") failed (SSL: error:0B084088:x509 certificate routines:X509_load_cert_crl_file:no certificate or crl found)
Необходимо пересохранить сертификат из кодировки DER в кодировку Base-64
Windows: запустить сертификат - вкладка Состав - Копировать в файл - Далее - Файлы X.509 в кодировке Base-64 - Далее - написать Имя файла - Далее - Готово
Linux: выполнить команды
openssl x509 -inform DER -in cert.сer -out public.crt
openssl rsa -inform DER -in privkey.key -out private.key
-----
connect() to [::1]:80 failed (13: Permission denied) while connecting to upstream
Необходимо перевести Selinux в режим разрешения и наблюдения Permissive
## просмотреть режимы работы Selinux
getenforce
## установить разрешающий режим Permissive
setenforce 0
Для того, чтобы применился режим и после перезагрузки сервера, необходимо изменить конфиг
nano /etc/selinux/config
## отредактировать строку, указав режим наблюдения
SELINUX=permissive
-----
nginx: [emerg] module "/usr/lib64/nginx/modules/ngx_http_image_filter_module.so" version 1014001 instead of 1024000 in /usr/share/nginx/modules/mod-http-image-filter.conf:1