
Que tipo de configuração posso usar para hospedar wordpress/php e node.js no mesmo servidor? Tenho um VPS da Digitalocean, um servidor Ubuntu 12.04.
Eu li que alguns usam: Apache -> Nginx -> Varnish, mas li novamente em alguns lugares que se você tem Nginx você não precisa do Varnish.
A solução que tenho agora é o Varnish na porta 80 com 2 backends, um para Apache e outro para Node.js.
Isso funcionará com o nginx em vez do Apache atrás do Varnish?
Responder1
Sim, sua configuração existente (front-end do Varnish, com back-ends Apache e Node.js) funcionará da mesma forma se você trocar o Apache pelo Nginx (ou seja, o Varnish não se preocupa particularmente com os back-ends - Nginx e Apache serão tratados da mesma forma) .
O Node.js normalmente é executado com Nginx porque é muito mais eficiente servir ativos estáticos diretamente por meio do Nginx do que por meio do Node.js. Para uma configuração simples, você pode eliminar totalmente o Varnish - o Node.js será executado na porta 80 e fará proxy de solicitações selecionadas para um servidor upstream do Node.js:
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;
}
}
Um dos motivos (anteriores) para usar o Varnish na frente desta configuração foi porque o Nginx não suportava nativamente conexões proxy HTTP 1.1 (que eram necessárias para o cabeçalho de atualização usado com Websockets) - isso não é mais um problema, e as versões atuais do O Nginx também é capaz de fazer proxy de conexões de websocket. Além disso, se você estiver realmente usando o Varnish para armazenar arquivos em cache, esse é um motivo convincente para mantê-lo como servidor front-end (embora seja importante notar que o único ganho real ocorre se você estiver usando o Varnish para servir cópias em cache de arquivos gerados dinamicamente. Páginas). Por exemplo, se você tiver Nginx escutando na porta 81 e Node.js na porta 3000, poderá ter o seguinte em sua VCL Varnish (que servirá caminhos de example.com/nodejs usando Node.js e tudo mais com 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);
}