5.0 KiB
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";
}
}
Шаги для применения
-
Отредактируйте конфигурацию nginx:
sudo nano /etc/nginx/sites-available/app.mylocaldomain.online # или sudo nano /etc/nginx/conf.d/app.mylocaldomain.online.conf -
Добавьте location
/apiПЕРЕД location/(порядок важен!) -
Укажите правильный IP и порт бэкенда в
proxy_passдля location/api -
Проверьте конфигурацию:
sudo nginx -t -
Перезагрузите nginx:
sudo systemctl reload nginx # или sudo service nginx reload
Проверка работы
После применения конфигурации проверьте:
- API должен быть доступен:
https://app.mylocaldomain.online/api/v1/products - Изображения должны загружаться:
https://app.mylocaldomain.online/api/v1/files/... - В логах nginx должны появиться запросы к
/api/v1/files/*
Отладка
Если изображения все еще не загружаются:
-
Проверьте логи nginx:
sudo tail -f /var/log/nginx/access.log sudo tail -f /var/log/nginx/error.log -
Проверьте логи бэкенда - должны быть запросы к
/api/v1/files/* -
Проверьте, что бэкенд запущен и слушает на указанном порту:
netstat -tlnp | grep :443 # или ss -tlnp | grep :443 -
Проверьте доступность бэкенда напрямую (если возможно):
curl -k https://127.0.0.1:443/api/v1/products