Как запустить nginx и node.js на одном сервере?

Как запустить nginx и node.js на одном сервере?

Какую настройку я могу использовать для размещения wordpress/php и node.js на одном сервере? У меня есть VPS от Digitalocean, сервер Ubuntu 12.04.

Я читал, что некоторые используют: Apache -> Nginx -> Varnish, но с другой стороны, я читал в некоторых местах, что если у вас есть Nginx, то Varnish вам не нужен.

Решение, которое у меня есть сейчас, — это Varnish на порту 80 с двумя бэкэндами: один для Apache и один для Node.js.

Будет ли это работать с nginx вместо Apache за Varnish?

решение1

Да, ваша текущая настройка (фронтенд Varnish с бэкендами Apache и Node.js) будет работать так же, если вы переключите Apache на Nginx (т.е. Varnish не особо заботится о бэкендах — Nginx и Apache будут обрабатываться одинаково).

Node.js обычно запускается с Nginx, поскольку гораздо эффективнее обслуживать статические ресурсы напрямую через Nginx, чем через Node.js. Для простой настройки вы можете полностью исключить Varnish — Node.js будет работать на порту 80 и будет проксировать запросы select на сервер Node.js upstream:

upstream nodejs  {
      server 127.0.0.1:3000;
      server 127.0.0.1:3000;
}

server {
        listen 80 default_server;
        server_name  www.example.com;
        error_log /var/log/nginx/www.example.com/error.log;
        access_log /var/log/nginx/www.example.com/access.log;
        root   /var/www/www.example.com/public;

        location / {
             try_files $uri @nodejs;
        }

        location @nodejs {
             proxy_pass  http://nodejs;
             proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
             proxy_redirect off;
             proxy_buffering off;
             proxy_set_header        Host            $host;
             proxy_set_header        X-Real-IP       $remote_addr;
             proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
        }
}

Одной из (предыдущих) причин использования Varnish перед этой настройкой было то, что Nginx изначально не поддерживал проксирование соединений HTTP 1.1 (что было необходимо для заголовка Upgrade, используемого с Websockets) — теперь это не проблема, и текущие версии Nginx также могут проксировать соединения Websockets. Кроме того, если вы фактически используете Varnish для кэширования файлов, это веская причина оставить его в качестве фронтенд-сервера (хотя стоит отметить, что единственный реальный выигрыш возникает, если вы используете Varnish для обслуживания кэшированных копий динамически сгенерированных страниц). Например, если у вас Nginx прослушивает порт 81, а Node.js — порт 3000, у вас может быть следующее в вашем Varnish VCL (который будет обслуживать пути из example.com/nodejs с использованием Node.js и всего остального с помощью Nginx):

backend default {
  .host = "127.0.0.1";
  .port = "81";
}

backend nodejs{
  .host = "127.0.0.1";
  .port = "3000";
}

...

sub vcl_recv {
    set req.grace = 120s;
    ...
    if (req.http.Host ~ "^(www\.)?example.com") {
        if (req.url ~ "^/nodejs/") {
            set req.backend = nodejs;                       
        }
    }

    return (lookup);
}

Связанный контент