Files
store-platform/NGINX_SETUP.md
T
2025-12-07 13:34:02 +03:00

5.0 KiB

Настройка Nginx для работы с бэкендом и фронтендом

Проблема

В текущей конфигурации nginx проксирует только фронтенд (порт 3000), но не проксирует API запросы на бэкенд. Из-за этого изображения не загружаются, так как запросы к /api/v1/files/* не доходят до бэкенда.

Решение

Нужно добавить location для /api в конфигурацию nginx.

Обновленная конфигурация nginx

server {
    listen 443 ssl;
    server_name app.mylocaldomain.online;

    ssl_certificate /etc/nginx/ssl/mylocaldomain.online.crt;
    ssl_certificate_key /etc/nginx/ssl/mylocaldomain.online.key;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;

    # ВАЖНО: location /api должен быть ПЕРЕД location /,
    # так как nginx выбирает наиболее специфичное совпадение
    
    # Проксирование API запросов на бэкенд (включая /api/v1/files/* для изображений)
    location /api {
        # Укажите IP и порт вашего бэкенда
        # Если бэкенд на том же сервере:
        proxy_pass http://127.0.0.1:443;
        # Или если бэкенд на другом сервере (например, 10.15.5.113:443):
        # proxy_pass http://10.15.5.113:443;
        
        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_set_header X-Forwarded-Host $host;
        
        # Важно для работы с большими файлами (изображениями)
        proxy_read_timeout 36000s;
        proxy_connect_timeout 60s;
        proxy_send_timeout 36000s;
        proxy_buffering off;  # Отключаем буферизацию для потоковой передачи файлов
        
        # Важно для работы с WebSocket (если используется)
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        
        # Увеличиваем размер буферов для больших файлов
        proxy_buffer_size 128k;
        proxy_buffers 4 256k;
        proxy_busy_buffers_size 256k;
    }

    # Проксирование всех остальных запросов на фронтенд (React/Vite)
    location / {
        proxy_pass http://10.15.5.252: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;
        proxy_set_header X-Forwarded-Host $host;
        proxy_read_timeout 36000s;
        proxy_buffers 16 4k;
        proxy_buffer_size 2k;
        
        # Важно для работы с WebSocket
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }
}

Шаги для применения

  1. Отредактируйте конфигурацию nginx:

    sudo nano /etc/nginx/sites-available/app.mylocaldomain.online
    # или
    sudo nano /etc/nginx/conf.d/app.mylocaldomain.online.conf
    
  2. Добавьте location /api ПЕРЕД location / (порядок важен!)

  3. Укажите правильный IP и порт бэкенда в proxy_pass для location /api

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

    sudo nginx -t
    
  5. Перезагрузите nginx:

    sudo systemctl reload nginx
    # или
    sudo service nginx reload
    

Проверка работы

После применения конфигурации проверьте:

  1. API должен быть доступен: https://app.mylocaldomain.online/api/v1/products
  2. Изображения должны загружаться: https://app.mylocaldomain.online/api/v1/files/...
  3. В логах nginx должны появиться запросы к /api/v1/files/*

Отладка

Если изображения все еще не загружаются:

  1. Проверьте логи nginx:

    sudo tail -f /var/log/nginx/access.log
    sudo tail -f /var/log/nginx/error.log
    
  2. Проверьте логи бэкенда - должны быть запросы к /api/v1/files/*

  3. Проверьте, что бэкенд запущен и слушает на указанном порту:

    netstat -tlnp | grep :443
    # или
    ss -tlnp | grep :443
    
  4. Проверьте доступность бэкенда напрямую (если возможно):

    curl -k https://127.0.0.1:443/api/v1/products