Skip to main content

Конфигурации для сайтов

Начальная настройка: от страницы по умолчанию до вашего сайта

После установки Nginx по умолчанию активен один сайт, который вы видите на 80 порту — это страница "Welcome to nginx!". Его конфигурация находится в файле /etc/nginx/sites-enabled/default. Чтобы разместить свой сайт, нужно отключить эту конфигурацию и создать свою.

Шаг 1: Отключение сайта по умолчанию

Удалим символическую ссылку на конфигурацию по умолчанию. Это безопаснее, чем удалять сам файл, так как он останется в /etc/nginx/sites-available/ в качестве примера.

sudo rm /etc/nginx/sites-enabled/default

Шаг 2: Создание конфигурации для вашего сайта

Создадим новый файл конфигурации для нашего домена (например, `example.com`) в каталоге sites-available.

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

Вставьте в этот файл базовую конфигурацию для статического сайта. Не забудьте создать каталог /var/www/example.com и положить туда файлы вашего сайта (например, `index.html`).


server {
    listen 80;
    server_name example.com www.example.com;
    root /var/www/example.com;
    index index.html index.htm;
    location / {
        try_files $uri $uri/ =404;
    }
}

Шаг 3: Активация вашего сайта

Теперь создадим символическую ссылку из sites-available в sites-enabled, чтобы Nginx "увидел" и загрузил нашу конфигурацию.

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

Шаг 4: Проверка и применение конфигурации

Перед перезапуском всегда проверяйте конфигурацию на наличие синтаксических ошибок.

Проверить конфигурацию:

sudo nginx -t

Если ошибок нет (вывод: `syntax is ok, test is successful`), применяем изменения командой `reload`, которая делает это без разрыва текущих соединений.

sudo systemctl reload nginx

Примеры практических конфигураций

1. Reverse Proxy с ограничением доступа по IP (для админ-панели)

Очень частый сценарий: защитить внутренний инструмент (например, Grafana, Prometheus, веб-интерфейс 1С), работающий на локальном порту (например, 3000), и разрешить доступ к нему только из офисной сети.

server {
    listen 80;
    server_name dashboard.example.com;
    # Блок ограничения доступа
    allow 88.77.66.55; # Ваш офисный/домашний IP
    allow 127.0.0.1;   # Доступ с самого сервера
    deny all;          # Запретить доступ всем остальным
    location / {
        proxy_pass http://localhost:3000; # Адрес вашего внутреннего приложения
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

2. Включение просмотра каталогов

Позволяет просматривать содержимое каталога, если в нем отсутствует индексный файл. Полезно для организации файловых архивов.

location /downloads/ {
    root /var/www/files;
    autoindex on; # Включить листинг
    autoindex_exact_size off; # Показывать размеры файлов в удобном виде (KB, MB)
    autoindex_localtime on; # Показывать локальное время файлов
}

3. Запрет доступа к скрытым файлам

Блокирует доступ к файлам, начинающимся с точки, таким как .htaccess или .git.

location ~ /\. {
    deny all;
    return 404;
}

Альтернативы `.htaccess` в Nginx

Важное отличие Nginx от Apache: **Nginx не поддерживает файлы `.htaccess`**. Это сделано осознанно для повышения производительности. Nginx считывает конфигурацию один раз при старте или перезагрузке и держит ее в памяти, в то время как Apache проверяет наличие `.htaccess` в каждом каталоге при каждом запросе.

Все правила, которые вы бы поместили в `.htaccess`, в Nginx прописываются непосредственно в конфигурационном файле вашего сайта (в блоке server или location). Вот как эмулировать популярные правила:

Переадресация (Rewrite) для "красивых" URL

Типичная задача для фреймворков: все запросы, которые не ведут к существующим файлам, отправлять на главный `index.php`.

# Пример для Apache (.htaccess)
# RewriteEngine On
# RewriteCond %{REQUEST_FILENAME} !-f
# RewriteCond %{REQUEST_FILENAME} !-d
# RewriteRule . /index.php [L]
# Эквивалент для Nginx
location / {
    try_files $uri $uri/ /index.php?$query_string;
}

Запрет доступа к каталогу

# Пример для Apache (.htaccess в папке /secret)
# deny from all
# Эквивалент для Nginx
location /secret/ {
    deny all;
    return 404; # Опционально, можно вернуть 403 или 404
}