Установка и настройка nginx

Установка nginx в Linux

Установка nginx производится из репозитория дистрибутива.

Для получения свежей версии nginx можно использовать репозитории nginx.org.

Для deb-based дистрибутивов:

  1. Создайте файл /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)

  2. Выполните команды от 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:

Copy
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 добавленные по умолчанию.

Copy
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 выполните следующие настройки:

Copy
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 настраивается доступ к сетевым ресурсам: