Да, Nginx нужен. Он будет работать как reverse proxy — принимать запросы из интернета и распределять их между твоими приложениями (сайтом и бекендом).
Короткая схема работы:
Интернет → Cloudflare (SSL) → Nginx (прокси) → Твои приложения на разных портах
Базовая настройка для твоего случая:
- Устанавливаешь Nginx на VPS
- Создаешь конфиги в /etc/nginx/sites-available/
- Настраиваешь proxy_pass на порты твоих приложений (например, сайт на порт 3000, бекенд на порт 8080)
- Включаешь сайты через симлинки в sites-enabled
Пример конфига для двух приложений:
# Бекенд (api.твойдомен.ru)
server {
listen 80;
server_name api.твойдомен.ru;
location / {
proxy_pass
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
# Сайт (твойдомен.ru)
server {
listen 80;
server_name твойдомен.ru;
root /var/www/site;
index index.html;
location / {
try_files $uri $uri/ /index.html;
}
}
Что касается Cloudflare:
- SSL можно отдать на откуп Cloudflare — на сервере оставить HTTP (порт 80)
- В дашборде Cloudflare выставить режим SSL/TLS: Full или Full (strict)
- Можно создать Origin-сертификат в Cloudflare и подключить его в Nginx для шифрования трафика между Cloudflare и сервером
Важный момент:
Чтобы Nginx видел реальные IP клиентов (а не Cloudflare), добавь в конфиг:
set_real_ip_from 173.245.48.0/20;
set_real_ip_from 103.21.244.0/22;
set_real_ip_from 103.22.200.0/22;
set_real_ip_from 103.31.4.0/22;
set_real_ip_from 141.101.64.0/18;
set_real_ip_from 108.162.192.0/18;
set_real_ip_from 190.93.240.0/20;
set_real_ip_from 188.114.96.0/20;
set_real_ip_from 197.234.240.0/22;
set_real_ip_from 198.41.128.0/17;
set_real_ip_from 162.158.0.0/15;
set_real_ip_from 104.16.0.0/13;
set_real_ip_from 172.64.0.0/13;
set_real_ip_from 131.0.72.0/22;
real_ip_header CF-Connecting-IP;
Итоговая схема:
- Cloudflare принимает HTTPS-запросы
- Расшифровывает их (SSL) и отправляет по HTTP на твой VPS
- Nginx ловит запрос и проксирует на нужное приложение по порту
Всё просто, главное — не запутаться в портах и конфигах. Удачи с сервером