v1.0

Next.js / Nuxt SSR

Проксирование Node.js SSR-приложения (Next.js, Nuxt 3, SvelteKit)

Пример конфига
nginx.conf
map $http_upgrade $connection_upgrade {
    default upgrade;
    ''      close;
}

upstream nextjs_backend {
    server 127.0.0.1:3000;
    keepalive 32;
}

server {
    listen 80;
    listen [::]:80;
    server_name example.com;

    server_tokens off;
    client_max_body_size 10m;

    access_log /var/log/nginx/nextjs-access.log combined;
    error_log  /var/log/nginx/nextjs-error.log warn;

    gzip on;
    gzip_vary on;
    gzip_comp_level 5;
    gzip_types text/plain text/css application/json application/javascript text/xml image/svg+xml;

    # Next.js статика — агрессивный кэш (файлы включают хэш в имени)
    location /_next/static/ {
        alias /var/www/nextjs/.next/static/;
        expires 1y;
        add_header Cache-Control "public, immutable";
        access_log off;
    }

    # HMR WebSocket (только для dev-сервера)
    location /_next/webpack-hmr {
        proxy_pass http://nextjs_backend;
        proxy_http_version 1.1;
        proxy_set_header Upgrade    $http_upgrade;
        proxy_set_header Connection $connection_upgrade;
        proxy_set_header Host       $host;
        proxy_read_timeout 3600s;
    }

    location / {
        proxy_pass http://nextjs_backend;
        proxy_http_version 1.1;
        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 Connection        "";
        proxy_read_timeout    60s;
        proxy_connect_timeout 10s;
    }

    error_page 500 502 503 504 /50x.html;
    location = /50x.html {
        root /usr/share/nginx/html;
    }
}
Как настроить
  1. Соберите приложение: npm run build
  2. Запустите в production-режиме через PM2: pm2 start npm --name nextjs -- start
  3. Убедитесь что приложение слушает на 127.0.0.1:3000 (проверьте PORT=3000 в .env)
  4. Для Nuxt 3 и SvelteKit измените порт upstream если он отличается от 3000
  5. Скопируйте конфиг в /etc/nginx/sites-available/, проверьте (nginx -t) и перезагрузите (systemctl reload nginx)