Из статьи Вы узнаете как можно легко установить NGINX на Debian 10, с openssl + TLS1.3

0. Перейдем в папку local

cd /usr/local

1. Заходим на сайт http://nginx.org/ru/download.html , скачиваем пакет последней версии

wget http://nginx.org/download/nginx-1.17.9.tar.gz

2. Распакуем:

tar xvf nginx-1.17.9.tar.gz

3. Скачаем openssl последней версии https://www.openssl.org/source/

wget https://www.openssl.org/source/openssl-1.1.1f.tar.gz
tar xvf openssl-1.1.1f.tar.gz
cd openssl-1.1.1f
./config
make && make install

4. Заходим в папку с nginx

cd ..
cd nginx-1.17.9

5. Установим недостающие библиотеки

apt-get build-dep nginx
apt-get install libossp-uuid-dev
apt-get install libxml2 libxml2-dev
apt-get install libxslt-dev
apt-get install libgd-dev
apt-get install libgeoip-dev

6. Конфигурируем

./configure --with-cc-opt='-g -O2 -fstack-protector-strong -Wformat -Werror=format-security -D_FORTIFY_SOURCE=2' --with-ld-opt='-Wl,-z,relro -Wl,-z,now' --prefix=/usr/share/nginx --conf-path=/etc/nginx/nginx.conf --http-log-path=/var/log/nginx/access.log --error-log-path=/var/log/nginx/error.log --lock-path=/var/lock/nginx.lock --pid-path=/run/nginx.pid --modules-path=/usr/lib/nginx/modules --http-client-body-temp-path=/var/lib/nginx/body --http-fastcgi-temp-path=/var/lib/nginx/fastcgi --http-proxy-temp-path=/var/lib/nginx/proxy --http-scgi-temp-path=/var/lib/nginx/scgi --http-uwsgi-temp-path=/var/lib/nginx/uwsgi --with-debug --with-pcre-jit --with-ipv6 --with-http_ssl_module --with-http_stub_status_module --with-http_realip_module --with-http_auth_request_module --with-http_v2_module --with-http_dav_module --with-file-aio --with-threads --with-http_addition_module --with-http_geoip_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_image_filter_module --with-http_secure_link_module --with-http_sub_module --with-http_xslt_module --with-stream --with-stream_ssl_module --with-mail --with-mail_ssl_module --with-http_mp4_module --with-openssl=/usr/local/openssl-1.1.1f --with-openssl-opt='enable-tls1_3' --with-compat --with-http_random_index_module --with-http_slice_module --with-stream --with-stream_realip_module --with-stream_ssl_preread_module

7. Если ошибка при конфигурировании, то смотрим, на что ругается, гуглим как называется пакет, устанавливаем:

apt-get install [название пакета]-dev

8. Установка

make

9. После успешной компиляции не спешите делать make install, лучше сделать всё красиво

mkdir /usr/lib/nginx
mkdir /var/log/nginx/
mkdir -p /var/lib/nginx/body

10. Установим

make install

11. На этом этапе nginx должен быть установлен в системе, но если выполнить

nginx -t

выдаст, что nginx — нет такой команды/бинарника. Не спешите расстраиваться, всё дело в том, что установлен он не совсем по стандартному пути PATH, а вот здесь — /usr/share/nginx/sbin/nginx
Cледовательно, выполнять нужно

/usr/share/nginx/sbin/nginx -t

12. Чтобы было красиво, сделаем

ln -s /usr/share/nginx/sbin/nginx /usr/sbin/nginx

и тогда запускаем

nginx -t

себе на здоровье и без ошибок.

Небольшой минус — после инсталляции nginx нет ни init.d скрипта, ни конфига для systemd.
Лечится так (один из способов):

vim /lib/systemd/system/nginx.service

это новый файл, мы его создаём сами, вписываем содержимое

[Unit]
Description=A high performance web server and a reverse proxy server
After=network.target

[Service]
Type=forking
PIDFile=/run/nginx.pid
ExecStartPre=/usr/share/nginx/sbin/nginx -t -q -g 'daemon on; master_process on;'
ExecStart=/usr/share/nginx/sbin/nginx -g 'daemon on; master_process on;'
ExecReload=/usr/share/nginx/sbin/nginx -g 'daemon on; master_process on;' -s reload
ExecStop=-/sbin/start-stop-daemon --quiet --stop --retry QUIT/5 --pidfile /run/nginx.pid
TimeoutStopSec=5
KillMode=mixed

[Install]
WantedBy=multi-user.target

Затем

systemctl enable nginx.service

Если ошибка

Failed to enable unit: File nginx.service: Invalid argument

то смотрим файл

/usr/lib/systemd/system/nginx.service

возможно, при копировании, допустили ошибку, он должен быть, как указно выше

Возвращаем обратно каталог nginx из /backup в /etc, лучше перед этим удалить /etc/nginx, так как туда что-то было положено после выполнения checkinstall и dpkg -i

Готовы к запуску nginx

systemctl start nginx

Всё должно подняться, если нет, небольшой troubleshooting будет даже полезен.

Ещё один маленький штрих. Необходимо донастроить nginx virtualhost, активировать новый набор шифров.

Шифры TLS 1.3 должны быть такими:

ssl_ciphers TLS13-CHACHA20-POLY1305-SHA256:TLS13-AES-128-GCM-SHA256:TLS13-AES-256-GCM-SHA384:ECDHE:!COMPLEMENTOFDEFAULT;

Конфигурация nginx:

server {
listen 443 ssl http2;
server_name tls1.3.netforce.ua;
access_log /var/log/nginx/tls1.3.netforce.ua_access.log combined;
error_log /var/log/nginx/tls1.3.netforce.ua_error.log;

ssl on;
ssl_dhparam /etc/nginx/dhparam.pem;
ssl_certificate "/etc/nginx/ssl/server.crt";
ssl_certificate_key "/etc/nginx/ssl/server.key";
add_header Strict-Transport-Security "max-age=31536000";
ssl_ciphers TLS13-CHACHA20-POLY1305-SHA256:TLS13-AES-128-GCM-SHA256:TLS13-AES-256-GCM-SHA384:ECDHE:!COMPLEMENTOFDEFAULT;
ssl_prefer_server_ciphers on;
ssl_protocols TLSv1.2 TLSv1.3;

root /var/www/tls1.3;
index index.html;

}

server {
listen 80;
server_name tls1.3.netforce.ua;
rewrite ^(.*)$ https://tls1.3.netforce.ua$1 permanent;
}

Это не готовая конфигурация для production среды, здесь нет кэширования, сжатия и других полезных и важных вещей. Напомню, цель статьи — это активировать TLS 1.3 и только.

После редактирования проверяем, что всё хорошо

nginx -t

Если tested is successfull, делаем рестарт nginx и запускаем тест на ssllabs.

Либо Ctrl+Shift+C > вкладка Security. И там тоже можно уже посмотреть версию TLS.