> ## Documentation Index
> Fetch the complete documentation index at: https://wiki.lumiweb.cc/llms.txt
> Use this file to discover all available pages before exploring further.

# Веб-сервер (Nginx)

> Nginx + PHP + HTTPS на своём сервере

Поднимем на сервере веб-сервер Nginx, отдадим статический сайт, подключим PHP и наметим путь к HTTPS. Команды для root на Ubuntu/Debian; под обычным пользователем добавляй `sudo`. IP и root-доступ к серверу — из карточки VPS в боте [@lumivps\_bot](https://t.me/lumivps_bot).

<Tip>
  Если не хочешь возиться с конфигами вручную — проще задеплоить приложение через [Coolify](/vps/panel): он сам поднимет reverse-proxy и SSL. Этот гайд — для тех, кто настраивает руками.
</Tip>

## Установка Nginx

<Steps>
  <Step title="Установить пакет">
    ```bash theme={"system"}
    apt update
    apt install nginx
    ```

    Сервис запустится автоматически.
  </Step>

  <Step title="Проверить">
    Открой в браузере `http://IP-твоего-сервера`. Должна появиться стартовая страница Nginx («Welcome to nginx!»). Если страница не открывается — скорее всего, закрыт порт 80 (см. предупреждение про файрвол ниже).
  </Step>
</Steps>

## Как устроены конфиги

Сайты в Nginx на Ubuntu/Debian описываются отдельными файлами:

* `/etc/nginx/sites-available/` — здесь лежат конфиги всех сайтов;
* `/etc/nginx/sites-enabled/` — сюда ставится симлинк на активные.

То есть ты создаёшь файл в `sites-available`, а потом «включаешь» его симлинком в `sites-enabled`.

```bash theme={"system"}
# включить сайт
ln -s /etc/nginx/sites-available/site /etc/nginx/sites-enabled/

# проверить синтаксис перед применением
nginx -t

# применить изменения без обрыва соединений
systemctl reload nginx
```

<Note>
  Всегда запускай `nginx -t` перед `reload`. Если в конфиге ошибка, `reload` её не применит и Nginx продолжит работать на старой конфигурации — сайт не ляжет.
</Note>

## Простой сайт на статике

Создай каталог под файлы сайта и положи туда `index.html`:

```bash theme={"system"}
mkdir -p /var/www/site
echo '<h1>Работает</h1>' > /var/www/site/index.html
```

Создай конфиг `/etc/nginx/sites-available/site`:

```nginx /etc/nginx/sites-available/site theme={"system"}
server {
    listen 80;
    listen [::]:80;

    server_name example.com www.example.com;
    root /var/www/site;
    index index.html;

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

Включи сайт и перезагрузи Nginx:

```bash theme={"system"}
ln -s /etc/nginx/sites-available/site /etc/nginx/sites-enabled/
nginx -t
systemctl reload nginx
```

<Tip>
  Дефолтный конфиг `default` в `sites-enabled` обычно перехватывает запросы. Если твой сайт не открывается, удали симлинк дефолта: `rm /etc/nginx/sites-enabled/default` и снова сделай `reload`.
</Tip>

## Добавить PHP

Чтобы Nginx обрабатывал `.php` (WordPress, скрипты и т.п.), нужен PHP-FPM:

<Steps>
  <Step title="Установи PHP-FPM">
    ```bash theme={"system"}
    apt install php-fpm
    ```
  </Step>

  <Step title="Добавь обработчик PHP в конфиг сайта">
    <Note>
      Путь к сокету зависит от версии PHP. Пакет создаёт версионный сокет, неверсионного `/run/php/php-fpm.sock` не существует — nginx упадёт с 502. Сначала посмотри, какие сокеты есть у тебя:

      ```bash theme={"system"}
      ls /run/php/
      ```

      Ты увидишь что-то вроде `php8.3-fpm.sock`. Подставь точное имя в конфиг ниже.
    </Note>

    Добавь внутрь `server { ... }` блок `location` для `.php`:

    ```nginx theme={"system"}
    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php8.3-fpm.sock;  # подставь свою версию
    }
    ```
  </Step>

  <Step title="Проверь и перезагрузи Nginx">
    ```bash theme={"system"}
    nginx -t
    systemctl reload nginx
    ```
  </Step>

  <Step title="Проверь работу PHP">
    Создай `/var/www/site/info.php` с содержимым `<?php phpinfo();` и открой `http://example.com/info.php`. Должна появиться таблица с информацией о PHP. После проверки удали этот файл — он раскрывает конфигурацию сервера.
  </Step>
</Steps>

## HTTPS

Сайт на `http://` стоит закрыть сертификатом, чтобы работал `https://`. Сертификат ставится отдельно — бесплатно через Let's Encrypt, это автоматизирует утилита `certbot`. Полный разбор — на отдельной странице:

<Card title="SSL-сертификат (Let's Encrypt)" icon="lock" href="/vps/ssl">
  Как бесплатно выпустить сертификат и включить HTTPS с автопродлением.
</Card>

<Warning>
  Чтобы сайт был доступен снаружи, открой порты **80** (HTTP) и **443** (HTTPS) в файрволе. Как настроить — см. [файрвол](/vps/firewall).
</Warning>

Альтернатива Nginx — веб-сервер Apache (`apt install apache2`); принципы те же, но конфиги и синтаксис отличаются.

## Куда дальше

<CardGroup cols={2}>
  <Card title="SSL-сертификат" icon="lock" href="/vps/ssl">
    Бесплатный HTTPS через Let's Encrypt с автопродлением.
  </Card>

  <Card title="Файрвол" icon="shield-halved" href="/vps/firewall">
    Открой порты 80 и 443 для веб-трафика.
  </Card>
</CardGroup>
