Умение собирать с исходников поможет всегда использовать модные плюшки и держать программное обеспечение в актуальном состоянии. Будем использовать Mainline версию.
yum install gcc make libtool pcre-devel zlib-devel
wget http://nginx.org/download/nginx-1.15.8.tar.gz
tar xvvf nginx-1.15.8.tar.gz
wget https://www.openssl.org/source/openssl-1.1.1a.tar.gz
tar xvvf openssl-1.1.1a.tar.gz
cd nginx-1.15.8.tar.gz
./configure --with-http_stub_status_module --with-http_ssl_module --with-file-aio --with-threads --with-http_mp4_module --with-http_flv_module --with-http_realip_module --with-http_v2_module --with-openssl=../openssl-1.1.1a
make
make install
ln -s /usr/local/nginx/sbin/nginx /usr/sbin/
Не обязательно собирать именно с такими параметрами. Можете что-то убрать или что-то добавить (смотрите ./configure --help). Например, если ваш сайт не будет отдавать видеофайлы MP4 и FLV, то можно убрать параметры "--with-http_mp4_module --with-http_flv_module". После сборки NGINX будет установлен в директории "/usr/local/nginx" и для удобства создали симлинк в "/usr/sbin", чтобы вызывать nginx по команде "nginx" не указывая полный путь к исполняемому файлу. Информацию по модулям смотрите в справочнике по модулям на официальном сайте. Рассмотрим типовый конфиг:
server {
listen 80;
server_name www.example.com;
rewrite ^(.*) https://$host$1;
server_tokens off;
}
server {
listen 443 ssl http2;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers TLS13-CHACHA20-POLY1305-SHA256:TLS13-AES-256-GCM-SHA384:TLS13-AES-128-GCM-SHA256:EECDH+CHACHA20:EECDH+AESGCM:EECDH+AES;
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
ssl_certificate /etc/letsencrypt/fullchain.cer;
ssl_certificate_key /etc/letsencrypt/*.example.key;
server_name www.example.com;
server_tokens off;
add_header Strict-Transport-Security max-age=2592000;
access_log logs/www_access.log main;
error_log logs/www_error.log;
client_max_body_size 1G;
charset utf-8;
index index.php;
aio threads;
directio 10m;
location / {
root /opt/www;
location ~* \.(gif|jpeg|jpg|png|tif|bmp|doc|pdf|rtf|xls|ppt|rar|rpm|swf|zip|docx|xlsx|pptx|psd|cdr|flv)$ {
expires max;
add_header Cache-Control private;
access_log off;
}
location ~* \.(mp4)$ {
mp4;
}
location ~* \.(flv)$ {
flv;
}
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_read_timeout 300;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_intercept_errors on;
include fastcgi_params;
}
}
}
И как бы все. Добавили TLSv1.2 для обратной совместимости на случай если чей-то клиент не поддерживает TLSv1.3. Для проверки HTTP/2 можете установить в браузере расширение "HTTP/2 Indicator" и если молния синяя значит все нормально. Работу TLSv1.3 можете проверить в свойствах сертификата. В дальнейшем если понадобится пересобрать NGINX, то чтобы увидеть параметры предыдущей сборки просто наберите "nginx -V".
Настроим ротацию логов в /etc/logrotate.d/nginx:
/usr/local/nginx/logs/*.log {
daily
rotate 10
missingok
notifempty
compress
sharedscripts
postrotate
[ ! -f /usr/local/nginx/logs/nginx.pid ] || kill -USR1 `cat /usr/local/nginx/logs/nginx.pid`
endscript
}
Создадим скрипт для systemd в /etc/systemd/system/nginx.service:
[Unit]
Description=The NGINX HTTP and reverse proxy server
After=syslog.target network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStartPre=/usr/local/nginx/sbin/nginx -t
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target
Выполняем "systemctl daemon-reload" и пробуем запустить "systemctl start nginx".