Установка и настройка nginx
- Установка nginx в Linux
- Установка и настройка nginx
- Установка и настройка nginx
- Примеры конфигурационного файла nginx
- Сжатие ответа сервера клиенту
- Ограничение размера заголовка
- Настройка nginx для мобильного приложения
Установка nginx в Linux
Установка nginx производится из репозитория дистрибутива.
Для получения свежей версии nginx можно использовать репозитории nginx.org.
Для deb-based дистрибутивов:
-
Создайте файл /etc/apt/sources.list.d/nginx.list со следующим содержимым:
Для Ubuntu:
deb http://nginx.org/packages/ubuntu/ $release nginx
deb-src http://nginx.org/packages/ubuntu/ $release nginx
где $release — кодовое имя релиза (например, xenial)
Для Debian:
deb http://nginx.org/packages/debian/ $release nginx
deb-src http://nginx.org/packages/debian/ $release nginx
где $release — кодовое имя релиза (например, stretch)
-
Выполните команды от root:
# apt update
# apt install nginx
При использовании репозитория nginx.org, после apt update может возникнуть ошибка:
W: Ошибка GPG: http://nginx.org/packages/$distr $release InRelease: Следующие подписи не могут быть проверены, так как недоступен открытый ключ: NO_PUBKEY $key
Для ее решения добавьте отсутствующий ключ:
apt-key adv --keyserver keyserver.ubuntu.com --recv-keys $key
Если возникает ошибка:
gpg: keyserver receive failed: Нет dirmngr
то установите пакет dirmngr:
apt install dirmngr
Подробную информацию по использованию репозиториев nginx (в т.ч. репозиториев для дистрибутивов, отличных от Ubuntu и Debian) можно получить из официальной wiki nginx.
Примеры конфигурационного файла nginx
Пример конфигурационного файла nginx
Условия:
- приложение доступно по ссылке вида http://nginx-server (nginx-server — имя хоста с nginx или его IP-адрес);
- таймаут при чтении ответа проксированного сервера — 300s.
Путь до конфигурационного файла по умолчанию зависит от используемой версии nginx:
- /etc/nginx/sites-enabled/default
- /etc/nginx/conf.d/default.conf
В дистрибутивах CentOS и RHEL настройки по умолчанию содержатся в файле /etc/nginx/nginx.conf.
Настройка конфигурационного файла nginx:
upstream smp {
server tomcat-server-ip:8080;
}
server {
listen 80; # слушать 80 порт
server_name nginx-server;
server_tokens off;
large_client_header_buffers 4 64k;
location ~ ^/$ {
return 302 $scheme://$host/sd/; # автоматически дописывать /sd/
}
location /sd/ {
proxy_pass http://smp; # proxy на порт 8080 для сервера tomcat
proxy_set_header X-Real-IP $remote_addr; # Header с адресом клиента
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # Header с адресами proxy и клиента
proxy_connect_timeout 300s;
proxy_send_timeout 300s;
proxy_read_timeout 300s;
client_max_body_size 50m; # Ограничение размера загружаемого файла
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
После внесения изменений в конфигурационный файл перезапустите nginx:
# systemctl restart nginx
Пример конфигурационного файла nginx с поддержкой SSL
Условия:
- приложение доступно по ссылке вида "https://nginx-server";
- соединение должно быть зашифровано с использованием протокола TLS/SSL;
- все запросы, поступающие по HTTP переадресовываются на HTTPs;
- таймаут при чтении ответа проксированного сервера — 300s.
Путь до конфигурационного файла по умолчанию зависит от используемой версии nginx:
- /etc/nginx/sites-enabled/default
- /etc/nginx/conf.d/default.conf
Настройка конфигурационного файла nginx:
В CentOS, RHEL в /etc/nginx/nginx.conf удалите блоки server добавленные по умолчанию.
server {
listen 80; # слушать 80 порт
server_name nginx-server;
server_tokens off;
location / {
return 302 https://$host$request_uri;
}
}
server {
listen 443 ssl; # слушать порт 443, включить шифрование
server_name nginx-server;
server_tokens off;
ssl_certificate /path/to/certificate.crt; # путь к файлу сертификата или bundle на сервере
ssl_certificate_key /path/to/keyfile.key; # путь к файлу закрытого ключа. Ключ не должен требовать пароля.
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers "ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4";
ssl_prefer_server_ciphers on;
large_client_header_buffers 4 64k;
location ~ ^/$ {
return 302 $scheme://$host/sd/; # автоматически дописывать /sd/
}
location /sd/ {
proxy_pass http://tomcat-server-ip:8080; # proxy на порт 8080 для сервера tomcat
proxy_set_header X-Real-IP $remote_addr; # Header с адресом клиента
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # Header с адресами proxy и клиента
proxy_connect_timeout 300;
proxy_send_timeout 300;
proxy_read_timeout 300;
send_timeout 300;
client_max_body_size 20m; # Ограничение размера загружаемого файла
}
}
Параметры загружаемых файлов рекомендуется настраивать в конфигурационном файле dbaccess.properties. Если ограничение размера загружаемого файла указывается в конфигурационном файле nginx, то значение параметра client_max_body_size должно быть строго больше значения, установленного в основном конфигурационном файле dbaccess.properties, см. Загрузка файлов.
Сжатие ответа сервера клиенту
Для уменьшения размера данных, передаваемых от сервера клиенту, рекомендуется включить сжатие методом gzip.
Чтобы включить сжатие, в конфигурационном файле nginx.conf в блоке http выполните следующие настройки:
gzip on;
gzip_disable "msie6";
gzip_comp_level 5;
gzip_types text/plain application/javascript application/x-javascript text/javascript text/xml text/css;
Эффект от сжатия ощущается только при использовании системы через низкоскоростные сети. При использовании настройки в локальной сети может быть замечена незначительная деградация времени первоначального входа в приложение вместо улучшения. Не рекомендуется устанавливать степень сжатия gzip_comp_level больше 5, так как при более высокой степени сжатия из-за нагрузки на процессор может снизиться производительность.
Ограничение размера заголовка
Если в приложении настроена прозрачная аутентификация или используется rest api с передачей объемной информации в заголовке, необходимо увеличить максимальный размер заголовка запроса:
large_client_header_buffers 4 64k;
По умолчанию данный параметр имеет значение 8 килобайт (для версии 1.8.0), что может не хватить для аутентификации пользователя, состоящего в большом количестве групп LDAP.
Настройка nginx для мобильного приложения
Для работы мобильного приложения в nginx настраивается доступ к сетевым ресурсам: