psj-notes
~/home ~/series ~/archive

08. Nginx + PHP + SSL

18.07.2026 Серия: Настройка VDS сервера с VPN "nginx" "php" "ssl" "certbot"

Стек для веб-приложений

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 и настроим блог.

Комментарии

Комментарии пока не подключены.