08. Nginx + PHP + SSL
Стек для веб-приложений
Nginx — лёгкий и производительный веб-сервер, который отлично держит нагрузку и умеет проксировать запросы к PHP-FPM. В связке с PHP 8.3 и бесплатным сертификатом Let's Encrypt это стандартный и надёжный стек для запуска сайтов любого размера.
Мы установим всё необходимое, настроим виртуальный хост и получим HTTPS.
Установка Nginx
sudo apt update
sudo apt install nginx -y
Проверяем, что сервер запустился:
sudo systemctl status nginx
Откройте в браузере http://<IP-вашего-сервера> — должна появиться страница приветствия Nginx.
Открываем порты 80 и 443 в UFW:
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw reload
Установка PHP 8.3 и PHP-FPM
sudo apt install php-fpm php-mysql php-curl php-gd php-mbstring php-xml php-zip -y
Проверяем статус PHP-FPM:
sudo systemctl status php8.3-fpm
PHP-FPM слушает сокет /run/php/php8.3-fpm.sock. Мы будем передавать запросы из Nginx в этот сокет.
Настройка виртуального хоста
Создаём директорию для сайта:
sudo mkdir -p /var/www/vds.example.com
sudo chown -R $USER:$USER /var/www/vds.example.com
Создаём конфиг Nginx:
sudo nano /etc/nginx/sites-available/vds.example.com
server {
listen 80;
server_name vds.example.com;
root /var/www/vds.example.com;
index index.php index.html;
location / {
try_files $uri $uri/ /index.php?$args;
}
location ~ \.php$ {
fastcgi_pass unix:/run/php/php8.3-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
location ~ /\.ht {
deny all;
}
}
Активация хоста
sudo ln -s /etc/nginx/sites-available/vds.example.com /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx
Создаём тестовый PHP-файл:
echo "<?php phpinfo(); ?>" > /var/www/vds.example.com/index.php
Открываем http://vds.example.com — должна показаться страница phpinfo.
После проверки удалите её:
rm /var/www/vds.example.com/index.php
Получение SSL-сертификата Let's Encrypt
Устанавливаем Certbot:
sudo apt install certbot python3-certbot-nginx -y
Получаем сертификат:
sudo certbot --nginx -d vds.example.com
Certbot сам подправит конфиг Nginx, добавив секцию HTTPS и редирект с HTTP. На вопросы отвечайте: email (для уведомлений о продлении), соглашайтесь с условиями.
Автообновление сертификата
Проверяем, что таймер активен:
sudo systemctl status certbot.timer
Пробный запуск обновления:
sudo certbot renew --dry-run
Сертификаты Let's Encrypt живут 90 дней, Certbot продлевает их автоматически. Если таймер отключён, включите:
sudo systemctl enable --now certbot.timer
Итоговый конфиг Nginx
После Certbot конфиг будет выглядеть примерно так:
server {
listen 443 ssl;
server_name vds.example.com;
ssl_certificate /etc/letsencrypt/live/vds.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/vds.example.com/privkey.pem;
include /etc/letsencrypt/options-ssl-nginx.conf;
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
root /var/www/vds.example.com;
index index.php index.html;
location / {
try_files $uri $uri/ /index.php?$args;
}
location ~ \.php$ {
fastcgi_pass unix:/run/php/php8.3-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
server {
listen 80;
server_name vds.example.com;
return 301 https://$server_name$request_uri;
}
Итог
У нас работает Nginx, PHP-FPM и HTTPS через Let's Encrypt. Сервер готов к развёртыванию веб-приложений. В следующей части установим Grav CMS и настроим блог.
Комментарии
Комментарии пока не подключены.