Proxy settings nginx http2 installation

Пошаговый чеклист по настройке прокси

Пришли новые времена, а именно HTTP/2 протокол
Чтобы его задействовать в нашем прокси нужно кое-что сделать.

Во-первых, конфиг.
Конфиг nginx-proxy для youtrack выглядит так:

server {
listen 443 ssl http2;
ssl_certificate ;
ssl_certificate_key ;
server_name localhost;

location / {
proxy_set_header X-Forwarded-Host $http_host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
client_max_body_size 10m;
proxy_http_version 1.1;
proxy_pass http://youtrackmachine.domain.local:1111;
}
location /api/eventSourceBus {
proxy_cache off;
proxy_buffering off;
proxy_read_timeout 86400s;
proxy_send_timeout 86400s;
proxy_set_header Connection '';
chunked_transfer_encoding off;
proxy_set_header X-Forwarded-Host $http_host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_http_version 1.1;
proxy_pass http://youtrackmachine.domain.local:1111;
}
}

Если Вы перезапустите nginx и он начнёт ругаться на http2 — значит его версия устаревшая и/или он собран без поддержки http2

Для поддержки HTTP/2 веб-сервер NGINX должен быть версии 1.9.5 и старше. В данной версии появился модуль ngx_http_v2_module.
Однако, прописать http2 в конфиг и иметь nginx —with-http_v2_module недостаточно. Нужно, чтобы ваш nginx работал с правильным openssl.

Напишем: # nginx -V
Получаем: built with OpenSSL 1.0.1e-fips 11 Feb 2013

Так дело не пойдёт.
Нужна версия от 1.0.2

Качаем:
wget http://nginx.org/download/nginx-1.14.0.tar.gz
wget --no-check-certificate https://www.openssl.org/source/openssl-1.1.1.tar.gz

Распаковываем:
tar -xvf openssl-1.1.1.tar.gz && \rm openssl-1.1.1.tar.gz
tar -xvf nginx-1.14.0.tar.gz && \rm nginx-1.14.0.tar.gz

Устанавливаем/обновляем зависимости:
cd nginx-1.14.0/
yum install gcc pcre-devel zlib-devel openssl-devel libxml2-devel libxslt-devel gd-devel perl-ExtUtils-Embed GeoIP-devel gperftools-devel

Смотрим версию, копируем всё что после слова configure, дописываем —with-openssl=/tmp/openssl-1.1.1
nginx -V
./configure --prefix=/usr/share/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib64/nginx/modules --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --http-client-body-temp-path=/var/lib/nginx/tmp/client_body --http-proxy-temp-path=/var/lib/nginx/tmp/proxy --http-fastcgi-temp-path=/var/lib/nginx/tmp/fastcgi --http-uwsgi-temp-path=/var/lib/nginx/tmp/uwsgi --http-scgi-temp-path=/var/lib/nginx/tmp/scgi --pid-path=/var/run/nginx.pid --lock-path=/var/lock/subsys/nginx --user=nginx --group=nginx --with-file-aio --with-ipv6 --with-http_ssl_module --with-http_v2_module --with-http_realip_module --with-http_addition_module --with-http_xslt_module=dynamic --with-http_image_filter_module=dynamic --with-http_geoip_module=dynamic --with-http_sub_module --with-http_dav_module --with-http_flv_module --with-http_mp4_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_random_index_module --with-http_secure_link_module --with-http_degradation_module --with-http_slice_module --with-http_stub_status_module --with-http_perl_module=dynamic --with-mail=dynamic --with-mail_ssl_module --with-pcre --with-pcre-jit --with-stream=dynamic --with-stream_ssl_module --with-debug --with-cc-opt='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic' --with-ld-opt=' -Wl,-E' --with-openssl=/root/openssl-1.1.1

Устанавливаем:
make install
service nginx restart

ВСЁ.