Конфигурация веб-сервера для работы с HTTPS и поддоменами обычно организована в нескольких блоках, делая настройки более структурированными и удобными для управления. Давайте подробно рассмотрим структуру конфигурации на основе вашего запроса и объясним, как работает каждая часть.
### Пример конфигурации `default.conf` для Nginx:
```nginx
# Слушаем порт 80 для перенаправления на HTTPS
server {
listen 80;
server_name www.example.com example.com;
# Перенаправление всех запросов на HTTPS
return 301 https://$host$request_uri;
}
# Слушаем на порту 443 для www-версии
server {
listen 443 ssl;
server_name www.example.com;
# SSL-сертификаты
ssl_certificate /path/to/ssl/certificate.crt;
ssl_certificate_key /path/to/ssl/private.key;
# Заголовки безопасности
add_header X-Content-Type-Options nosniff;
add_header X-Frame-Options DENY;
add_header X-XSS-Protection "1; mode=block";
# Перенаправление на основную доменную версию
location / {
return 301 https://example.com$request_uri;
}
}
# Основной сервер на порту 443
server {
listen 443 ssl;
server_name example.com;
# SSL-сертификаты
ssl_certificate /path/to/ssl/certificate.crt;
ssl_certificate_key /path/to/ssl/private.key;
# Заголовки безопасности
add_header X-Content-Type-Options nosniff;
add_header X-Frame-Options DENY;
add_header X-XSS-Protection "1; mode=block";
# Локация для статических файлов
location / {
root /var/www/example.com/html;
index index.html index.htm;
expires 30d; # Настройки кэширования для статических ресурсов
}
# Обработка PHP файлов
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php7.4-fpm.sock; # Убедитесь, что путь к PHP-FPM правильный
}
}
```
### Порядок обработки запросов:
1. **Перенаправление HTTP на HTTPS (порт 80)**:
- Когда пользователь делает запрос к `http://example.com` или `http://www.example.com`, сервер обрабатывает его в первом блоке.
- Этот блок слушает порт 80 и перенаправляет все запросы на HTTPS с помощью `return 301`, что означает, что браузер будет перенаправлен на тот же URI, но с использованием протокола `https://`.
2. **Обработка www-версии (порт 443)**:
- Если запрос поступает на `https://www.example.com`, сервер обрабатывает его во втором блоке.
- Первая операция -- это выполнение SSL-обработки с указанными сертификатами.
- Здесь также добавляются заголовки безопасности.
- Все запросы к `www.example.com` перенаправляются на основную доменную версию `https://example.com` с помощью команды `return 301`.
3. **Основной сервер (порт 443 для example.com)**:
- Когда запросы идут на `https://example.com`, они попадают в третий блок.
- Происходит аналогичная настройка SSL и заголовков безопасности.
- В этом сервере настраиваются локации:
- `location /` отвечает за статические файлы и кэширование, что позволяет улучшить производительность, например, через использование заголовка `expires`.
- `location ~ \.php$` используется для обработки PHP-файлов через FastCGI, перенаправляя запросы на обработку PHP-FPM.
### Общие замечания:
- Все блоки конфигурации работает в порядке, начиная с порта 80, затем 443 для `www`, и, наконец, 443 для основного домена.
- Все перенаправления выполняются с использованием кода 301, что является постоянным перенаправлением, и браузеры кэшируют эти перенаправления, что существенно повышает скорость последующих обращений.
- Заголовки безопасности помогают защитить сайт от определенных уязвимостей, что делает его более безопасным для пользователей.
Эта структура помогает сделать приложение более безопасным и производительным, а также улучшает его удобство для пользователей.