February 17

Простой сайт на nginx

Вот пошаговая инструкция по настройке сайта (виртуального хоста) на nginx.

Предварительные требования

  • Установленный nginx (sudo apt install nginx для Ubuntu/Debian).
  • Ваш домен (например, example.com) указывает на IP-адрес сервера.
  • Файлы вашего сайта лежат на сервере (например, в /var/www/example.com).

Шаг 1. Структура файлов

Рекомендуется хранить каждый сайт в отдельной папке. Создайте директорию для вашего проекта:

bash

sudo mkdir -p /var/www/example.com/html

Поместите туда файлы index.html или index.php.

Шаг 2. Права доступа

Чтобы nginx мог читать файлы, нужно выдать права пользователю www-data (от которого работает nginx) или просто сделать вас владельцем, а группу www-data — владельцем группы.

bash

sudo chown -R $USER:$USER /var/www/example.com/html

Шаг 3. Создание конфигурационного файла (Server Block)

В nginx конфигурации сайтов (виртуальные хосты) лежат в /etc/nginx/sites-available/, а ссылки на включенные сайты — в /etc/nginx/sites-enabled/.

Создайте файл конфигурации:

bash

sudo nano /etc/nginx/sites-available/example.com

Пример для статического сайта (HTML):

nginx

server {
    listen 80;
    listen [::]:80;

    # Имя вашего сайта
    server_name example.com www.example.com;

    # Корневая папка с файлами сайта
    root /var/www/example.com/html;

    # Главный файл, который будет открываться по умолчанию
    index index.html index.htm;

    location / {
        try_files $uri $uri/ =404;
    }
}

Пример для сайта на PHP (PHP-FPM):

nginx

server {
    listen 80;
    listen [::]:80;
    server_name example.com www.example.com;

    root /var/www/example.com/html;
    index index.php index.html index.htm;

    location / {
        try_files $uri $uri/ =404;
    }

    # Передача запросов PHP скриптов в PHP-FPM
    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/var/run/php/php8.1-fpm.sock; # Версия PHP может отличаться
    }

    # Запрет доступа к скрытым файлам (.htaccess, .git и т.д.)
    location ~ /\.ht {
        deny all;
    }
}

Шаг 4. Активация сайта

Нужно создать символическую ссылку из sites-available в sites-enabled:

bash

sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/

Шаг 5. Проверка конфигурации и перезапуск

Всегда проверяйте конфигурацию на ошибки:

bash

sudo nginx -t

Если все хорошо (вывод test is successful), перезапустите nginx:

bash

sudo systemctl restart nginx

Или перезагрузите конфигурацию без разрыва соединений:

bash

sudo systemctl reload nginx

Шаг 6. Настройка HTTPS (SSL) с помощью Certbot

Сейчас почти обязательно иметь SSL-сертификат. Самый простой способ — использовать Certbot.

  1. Установите Certbot:bashsudo apt install certbot python3-certbot-nginx
  2. Запустите автоматическую настройку:bashsudo certbot --nginx -d example.com -d www.example.com

Certbot сам изменит вашу конфигурацию, включив HTTPS, и настроит автоматическое продление сертификата.

Где проверить результат?

Откройте браузер и перейдите по адресу http://example.com (или https://, если настроили SSL).

Если не работает, смотрите логи:

bash

sudo tail -f /var/log/nginx/error.log