# Nginx setup

# Настройка nginx

Cтатика на 443 порту

Без получения или обновления сертификатов

## 0. Установка nginx

```bash
sudo apt install nginx -y
```

## 1. Создать директории

```bash
mkdir -p /var/www/fake_site/html
```

Затем перенеси сюда файлы:
- `index.html`  →  `/var/www/fake_site/html/index.html`
- `nginx.conf`  →  `/var/www/fake_site/nginx.conf`

---

## 2. Конфиг nginx

Содержимое `/var/www/fake_site/nginx.conf`
(подставь свой домен и пути к сертификатам):

```nginx
server {
    listen 443 ssl;
    http2 on;
    server_name example.com;

    ssl_certificate     /путь/к/fullchain.pem;
    ssl_certificate_key /путь/к/privkey.pem;
    ssl_protocols TLSv1.2 TLSv1.3;

    root /var/www/fake_site/html;
    index index.html;

    # URL авторизации всегда отдаёт 403
    location = /api/login {
        return 403;
    }

    location / {
        try_files $uri $uri/ =404;
    }
}
```

Примечания:
- `http2 on;` — новый синтаксис (nginx 1.25+). На старом nginx вместо этих
  двух строк пиши `listen 443 ssl http2;`.
- Блок `listen 80` намеренно отсутствует: редирект с HTTP не нужен, а
  обновление сертификата идёт не через nginx на 80 порту.
- `location = /api/login` — точное совпадение, имеет наивысший приоритет,
  сработает независимо от порядка блоков.

---

## 3. Права доступа

Сертификаты читает главный процесс nginx (от root), поэтому их можно
держать где угодно, включая `/root`. Проверь только, что приватный ключ
закрыт от посторонних:

```bash
chmod 600 /путь/к/privkey.pem
```

Файлы сайта в `/var/www` доступны nginx по умолчанию — трогать права не нужно.

---

## 4. Подключить конфиг и запустить

```bash
# симлинк из общей папки в sites-enabled
ln -s /var/www/fake_site/nginx.conf /etc/nginx/sites-enabled/fake_site

# убрать дефолтный сайт, если мешает (конфликт server_name на 443)
rm -f /etc/nginx/sites-enabled/default

# проверка синтаксиса и перезагрузка
nginx -t && systemctl reload nginx
```

Если `nginx -t` ругается на `open() ... failed (No such file or directory)` —
симлинк ведёт на несуществующий файл: проверь, что `nginx.conf` реально лежит
по указанному пути и путь в `ln -s` абсолютный.

---

## 5. Проверка

```bash
# страница должна открываться
curl -skI https://твой-домен          # ожидаем HTTP/2 200

# URL авторизации всегда закрыт
curl -skI https://твой-домен/api/login # ожидаем HTTP/2 403
```

Если `/api/login` отдаёт 404 вместо 403 — конфиг не перезагружен или запрос
уходит в другой server-блок. Проверь активные конфиги:
```bash
ls -l /etc/nginx/sites-enabled/
```

---

## Открыть порт в файрволе (если используется ufw)

```bash
ufw allow 443/tcp
```