# 🌐 Настройка Nginx для SmartSolTech ## 📋 Быстрая настройка ### Шаг 1: Создать конфигурацию в sites-available ```bash sudo nano /etc/nginx/sites-available/smartsoltech ``` **Содержимое файла:** ```nginx # Редирект с www на non-www server { listen 80; listen [::]:80; server_name www.smartsoltech.kr; return 301 https://smartsoltech.kr$request_uri; } # HTTP → HTTPS редирект server { listen 80; listen [::]:80; server_name smartsoltech.kr; # Let's Encrypt challenge location /.well-known/acme-challenge/ { root /var/www/certbot; } location / { return 301 https://$server_name$request_uri; } } # HTTPS конфигурация server { listen 443 ssl http2; listen [::]:443 ssl http2; server_name smartsoltech.kr; # SSL сертификаты (раскомментировать после получения) # ssl_certificate /etc/letsencrypt/live/smartsoltech.kr/fullchain.pem; # ssl_certificate_key /etc/letsencrypt/live/smartsoltech.kr/privkey.pem; # ssl_trusted_certificate /etc/letsencrypt/live/smartsoltech.kr/chain.pem; # SSL настройки ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers HIGH:!aNULL:!MD5; ssl_prefer_server_ciphers on; ssl_session_cache shared:SSL:10m; ssl_session_timeout 10m; # Security headers add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always; add_header X-Frame-Options "SAMEORIGIN" always; add_header X-Content-Type-Options "nosniff" always; add_header X-XSS-Protection "1; mode=block" always; # Максимальный размер загружаемых файлов client_max_body_size 100M; # Логи access_log /var/log/nginx/smartsoltech_access.log; error_log /var/log/nginx/smartsoltech_error.log; # Статические файлы - ВАЖНО: должны быть ПЕРЕД location / # Nginx отдаёт статику напрямую из файловой системы (быстрее чем через Django) location /static/ { alias /opt/smartsoltech_site/smartsoltech/staticfiles/; expires 30d; add_header Cache-Control "public, immutable"; access_log off; } # Медиа файлы location /media/ { alias /opt/smartsoltech_site/smartsoltech/media/; expires 7d; add_header Cache-Control "public"; access_log off; } # Прокси к Django приложению location / { proxy_pass http://localhost:8000; 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; proxy_redirect off; proxy_buffering off; } } ``` ### Шаг 2: Удалить default конфигурацию ```bash # Удалить симлинк default sudo rm /etc/nginx/sites-enabled/default # Проверить, что удалён ls -la /etc/nginx/sites-enabled/ ``` ### Шаг 3: Создать симлинк smartsoltech в sites-enabled ```bash # Создать симлинк sudo ln -s /etc/nginx/sites-available/smartsoltech /etc/nginx/sites-enabled/ # Проверить симлинк ls -la /etc/nginx/sites-enabled/ ``` **Ожидаемый результат:** ``` lrwxrwxrwx 1 root root 40 Nov 24 12:00 smartsoltech -> /etc/nginx/sites-available/smartsoltech ``` ### Шаг 4: Проверить конфигурацию Nginx ```bash # Проверка синтаксиса sudo nginx -t # Должно быть: # nginx: the configuration file /etc/nginx/nginx.conf syntax is ok # nginx: configuration file /etc/nginx/nginx.conf test is successful ``` ### Шаг 5: Перезагрузить Nginx ```bash # Перезагрузка конфигурации sudo systemctl reload nginx # Или полный перезапуск sudo systemctl restart nginx # Проверить статус sudo systemctl status nginx ``` --- ## 🔒 Получение SSL сертификата (опционально) ### Если уже настроен HTTPS (порт 443): ```bash # Временно закомментировать SSL строки в конфиге sudo nano /etc/nginx/sites-available/smartsoltech # Закомментировать эти 3 строки: # ssl_certificate /etc/letsencrypt/live/smartsoltech.kr/fullchain.pem; # ssl_certificate_key /etc/letsencrypt/live/smartsoltech.kr/privkey.pem; # ssl_trusted_certificate /etc/letsencrypt/live/smartsoltech.kr/chain.pem; # Перезагрузить Nginx sudo systemctl reload nginx # Получить сертификат sudo certbot certonly --webroot -w /var/www/certbot \ -d smartsoltech.kr \ -d www.smartsoltech.kr \ --email admin@smartsoltech.kr \ --agree-tos \ --no-eff-email # Раскомментировать SSL строки обратно sudo nano /etc/nginx/sites-available/smartsoltech # Перезагрузить Nginx sudo systemctl reload nginx ``` --- ## 🧪 Проверка работоспособности ### Проверка HTTP ```bash # Проверка редиректа HTTP → HTTPS curl -I http://smartsoltech.kr # Должно быть: # HTTP/1.1 301 Moved Permanently # Location: https://smartsoltech.kr/ # Проверка редиректа www → non-www curl -I http://www.smartsoltech.kr # Должно быть: # HTTP/1.1 301 Moved Permanently # Location: https://smartsoltech.kr/ ``` ### Проверка HTTPS (после получения SSL) ```bash # Проверка основного сайта curl -I https://smartsoltech.kr # Должно быть: # HTTP/2 200 # server: nginx ``` ### Проверка прокси к Django ```bash # Проверить, что Nginx проксирует запросы к Django curl -I http://localhost:8000/ curl -I https://smartsoltech.kr/ # Оба должны возвращать одинаковый контент ``` --- ## 🔧 Устранение неполадок ### Проблема: "Address already in use" ```bash # Проверить, что занимает порт 80/443 sudo netstat -tulpn | grep :80 sudo netstat -tulpn | grep :443 # Если Apache или другой сервис: sudo systemctl stop apache2 sudo systemctl disable apache2 # Перезапустить Nginx sudo systemctl restart nginx ``` ### Проблема: "502 Bad Gateway" ```bash # Проверить, что Django запущен docker ps | grep django_app # Проверить логи Django docker logs django_app --tail 50 # Проверить, что порт 8000 доступен curl -I http://localhost:8000/ # Перезапустить Django docker restart django_app ``` ### Проблема: "403 Forbidden" ```bash # Проверить права на директории ls -la /opt/smartsoltech_site/ # Проверить SELinux (если включен) sudo setenforce 0 # Проверить логи Nginx sudo tail -f /var/log/nginx/smartsoltech_error.log ``` ### Проблема: SSL сертификат не работает ```bash # Проверить наличие сертификатов sudo ls -la /etc/letsencrypt/live/smartsoltech.kr/ # Проверить срок действия sudo certbot certificates # Обновить сертификат вручную sudo certbot renew --force-renewal # Перезагрузить Nginx sudo systemctl reload nginx ``` --- ## 📊 Мониторинг логов ### В реальном времени ```bash # Логи доступа sudo tail -f /var/log/nginx/smartsoltech_access.log # Логи ошибок sudo tail -f /var/log/nginx/smartsoltech_error.log # Оба лога одновременно sudo tail -f /var/log/nginx/smartsoltech_*.log ``` ### Анализ логов ```bash # Топ 10 IP адресов sudo awk '{print $1}' /var/log/nginx/smartsoltech_access.log | sort | uniq -c | sort -rn | head -10 # Топ 10 запрашиваемых URL sudo awk '{print $7}' /var/log/nginx/smartsoltech_access.log | sort | uniq -c | sort -rn | head -10 # Количество ошибок 404 sudo grep " 404 " /var/log/nginx/smartsoltech_access.log | wc -l # Количество ошибок 5xx sudo grep " 50[0-9] " /var/log/nginx/smartsoltech_access.log | wc -l ``` --- ## 🔄 Автоматическое обновление SSL сертификата ### Настройка cron ```bash # Редактировать crontab sudo crontab -e # Добавить строку (обновление каждый день в 3:00) 0 3 * * * certbot renew --quiet --post-hook "systemctl reload nginx" ``` ### Проверка автообновления ```bash # Тестовый запуск обновления sudo certbot renew --dry-run # Проверить задачи cron sudo crontab -l ``` --- ## 📝 Структура файлов Nginx ``` /etc/nginx/ ├── nginx.conf # Главный конфиг ├── sites-available/ │ └── smartsoltech # Конфигурация сайта ├── sites-enabled/ │ └── smartsoltech → ../sites-available/smartsoltech # Симлинк (активный) └── /var/log/nginx/ ├── smartsoltech_access.log # Логи доступа └── smartsoltech_error.log # Логи ошибок ``` --- ## ✅ Чеклист настройки - [ ] Создан файл `/etc/nginx/sites-available/smartsoltech` - [ ] Удалён симлинк `/etc/nginx/sites-enabled/default` - [ ] Создан симлинк `/etc/nginx/sites-enabled/smartsoltech` - [ ] Выполнена проверка `sudo nginx -t` (успешно) - [ ] Nginx перезагружен `sudo systemctl reload nginx` - [ ] HTTP редирект работает (301 → HTTPS) - [ ] WWW редирект работает (www → non-www) - [ ] Django доступен через Nginx - [ ] SSL сертификат получен (опционально) - [ ] HTTPS работает (опционально) - [ ] Настроено автообновление SSL (опционально) - [ ] Логи пишутся в `/var/log/nginx/smartsoltech_*.log` --- ## 🚀 Быстрая команда (всё в одном) ```bash # Скопировать и выполнить на сервере sudo rm /etc/nginx/sites-enabled/default && \ sudo ln -s /etc/nginx/sites-available/smartsoltech /etc/nginx/sites-enabled/ && \ sudo nginx -t && \ sudo systemctl reload nginx && \ echo "✅ Nginx настроен! Проверьте: curl -I http://smartsoltech.kr" ``` --- **Создано:** 24 ноября 2025 г. **Для проекта:** SmartSolTech **Домен:** smartsoltech.kr