Установка Nginx
Установка обновлений:
1 2 |
$ sudo apt-get update $ sudo apt-get upgrade |
Установим необходимые компоненты:
1 |
$ sudo apt install curl gnupg2 ca-certificates lsb-release |
Настроим репозиторий apt для стабильных пакетов nginx:
1 |
$ echo "deb http://nginx.org/packages/debian $(lsb_release -sc) nginx" | sudo tee /etc/apt/sources.list.d/nginx.list |
Импортируем официальный ключ подписи nginx, чтобы apt мог проверить подлинность пакетов:
1 |
$ curl -fsSL https://nginx.org/keys/nginx_signing.key | sudo apt-key add - |
Проверка ключа:
1 |
$ sudo apt-key fingerprint ABF5BD827BD9BF62 |
Выходные данные должны содержать полный отпечаток 573B FD6B 3D8F BC64 1079 A6AB ABF5 BD82 7BD9 BF62
следующим образом:
pub rsa2048 2011-08-19 [SC] [expires: 2024-06-14]
573B FD6B 3D8F BC64 1079 A6AB ABF5 BD82 7BD9 BF62
uid [ unknown] nginx signing key <signing-key@nginx.com>
Установка nginx:
1 2 3 4 |
$ sudo apt update $ sudo apt install nginx $ sudo nginx -v nginx version: nginx/1.20.2 |
Установка PHP-FPM и дополнительные модули
Настройка репозитория и установка PHP
1 2 3 4 5 |
$ sudo apt install lsb-release apt-transport-https ca-certificates $ sudo wget -O /etc/apt/trusted.gpg.d/php.gpg https://packages.sury.org/php/apt.gpg $ echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" | sudo tee /etc/apt/sources.list.d/php.list $ sudo apt update $ sudo apt install php-fpm php-mysql php-bcmath php-json php-mbstring php-tokenizer php-xml php-curl |
Для работы PHP-FPM c Nginx внесем изменения в файл www.conf
1 |
$ sudo nano /etc/php/8.0/fpm/pool.d/www.conf |
1 2 3 4 5 6 |
user = nginx group = nginx listen = /run/php/php8.0-fpm.sock listen.owner = nginx listen.group = nginx listen.mode = 0660 |
Настройка default виртуального хоста
1 |
$ sudo nano /etc/nginx/conf.d/default.conf |
1 2 3 4 5 6 7 8 9 10 |
server { listen 80 default_server; listen [::]:80 default_server ipv6only=on; server_name ""; return 444; location / { return 301 https://\$host\$request_uri; } } |
Создание виртуального хоста
Имя сервера: vi-edu.ru
Корневой каталог: /home/html/vi-edu.ru
1 2 3 4 |
$ sudo mkdir -p /home/html/vi-edu.ru/logs $ sudo chown -hR root:nginx /home/html $ echo "<?php phpinfo(); ?>" | sudo tee /home/html/vi-edu.ru/info.php $ echo "vi-edu.ru - Ok" | sudo tee /home/html/vi-edu.ru/index.html |
Базовая конфигурация виртуального хоста vi-edu.ru
1 |
$ sudo nano /etc/nginx/conf.d/vi-edu.ru.conf |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
server { listen *:80; listen [::]:80; server_name vi-edu.ru; root /home/html/vi-edu.ru; index index.php index.html index.htm; access_log /home/html/vi-edu.ru/logs/access.log; error_log /home/html/vi-edu.ru/logs/error.log; location ~ \.php$ { include /etc/nginx/fastcgi_params; fastcgi_pass unix:/run/php/php8.0-fpm.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; } } |
Проверка файла конфигурации на ошибки и перезапуск служб
1 2 3 4 5 |
$ sudo nginx -t nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful $ sudo systemctl restart nginx php8.0-fpm |
Проверим работу Nginx и PHP
1 2 3 4 |
$ curl -l http://vi-edu.ru vi-edu.ru - Ok $ sudo service php8.0-fpm status | grep running Active: active (running) since Tue 2022-01-11 14:44:10 MSK; 1 day 19h ago |
http://vi-edu.ru/info.php
Получения бесплатного сертификата SSL от Let’s Encrypt
1 2 3 |
$ sudo apt update $ sudo apt install certbot $ sudo mkdir -p /home/html/vi-edu.ru/.well-known/acme-challenge |
Генерация ключа (Diffie Hellman)
1 2 |
$ sudo mkdir /etc/nginx/ssl && cd /etc/nginx/ssl $ sudo openssl dhparam -out /etc/nginx/ssl/dhparam.pem 4096 |
Проверяем в «тест-режиме» получение сертификата
1 |
$ sudo certbot certonly --dry-run -d vi-edu.ru -d www.vi-edu.ru |
Получаем сертификат
1 |
$ sudo certbot certonly --webroot --agree-tos --email adm@vi-edu.ru --webroot-path /home/html/vi-edu.ru -d vi-edu.ru -d www.vi-edu.ru |
certonly — запрос нового сертификата;
webroot — проверка будет выполняться на основе запроса к корню сайта;
agree-tos — даем согласие на лицензионное соглашение;
email — почтовый адрес администратора домена;
webroot-path — каталог в системе Linux, который является корневым для сайта;
d — перечисление доменов, для которых запрашиваем сертификат
сертификаты будут созданы в каталоге /etc/letsencrypt/archive/example.com и симлинки в /etc/letsencrypt/live/example.com
Автообновление сертификата
1 2 3 |
$ sudo crontab -e 0 0 * * 1,4 /usr/bin/certbot renew && systemctl reload nginx |
Конфигурация виртуального хоста vi-edu.ru с поддержкой SSL
1 |
$ sudo nano /etc/nginx/conf.d/vi-edu.ru.conf |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 |
server { listen *:80; listen [::]:80; server_name vi-edu.ru; return 301 https://$host$request_uri; } server { listen 443 ssl http2; listen [::]:443 ssl http2; server_name vi-edu.ru; root /home/html/vi-edu.ru; index index.php index.html index.htm; autoindex off; access_log /home/html/vi-edu.ru/logs/access.log; error_log /home/html/vi-edu.ru/logs/error.log; ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256: ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384; ssl_session_cache shared:MozSSL:10m; ssl_session_timeout 1d; ssl_prefer_server_ciphers off; ssl_session_tickets off; ssl_dhparam /etc/nginx/ssl/dhparam.pem; ssl_certificate /etc/letsencrypt/live/vi-edu.ru/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/vi-edu.ru/privkey.pem; ssl_trusted_certificate /etc/letsencrypt/live/vi-edu.ru/chain.pem; add_header Strict-Transport-Security "max-age=63072000" always; # OCSP stapling ssl_stapling on; ssl_stapling_verify on; location ~ \.php$ { include /etc/nginx/fastcgi_params; fastcgi_pass unix:/run/php/php8.0-fpm.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; } location ^~ /.well-known/acme-challenge/ { allow all; root /home/html/vi-edu.ru/; default_type "text/plain"; try_files $uri =404; } # Закроем доступ к скрытым файлам (начинаются с точки) location ~ /\. { deny all; } # Директивы ниже показывают как можно установить заголовки кеширования для статических ресурсов location ~* ^.+\.(jpg|jpeg|png|ico|gif|swf|webp|srv)$ { expires 3w; gzip off; } location ~* ^.+\.(css|js)$ { expires 7d; add_header Vary Accept-Encoding; } location ~* ^.+\.(eot|ttf|woff|woff2)$ { expires 92d; add_header Vary Accept-Encoding; } } |
1 |
$ sudo systemctl restart nginx |
Проверить домен на SSL рейтинг
https://www.ssllabs.com/ssltest
Mozila SSL Configuration Generator