
Какую настройку я могу использовать для размещения 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);
}