
¿Qué tipo de configuración puedo usar para alojar wordpress/php y node.js en el mismo servidor? Tengo un VPS de Digitalocean, un servidor Ubuntu 12.04.
He leído que algunos usan: Apache -> Nginx -> Varnish, pero nuevamente leí en algunos lugares que si tienes Nginx no necesitas Varnish.
La solución que tengo ahora es Varnish en el puerto 80 con 2 backends, uno para Apache y otro para Node.js.
¿Funcionará esto con nginx en lugar de Apache detrás de Varnish?
Respuesta1
Sí, su configuración existente (front-end de Varnish, con backends de Apache y Node.js) funcionará igual si cambia Apache por Nginx (es decir, a Varnish no le importan particularmente los backends: Nginx y Apache recibirán el mismo trato) .
Node.js normalmente se ejecuta con Nginx porque es mucho más eficiente servir activos estáticos directamente a través de Nginx que a través de Node.js. Para una configuración simple, puede eliminar Varnish por completo: Node.js se ejecutará en el puerto 80 y enviará solicitudes de selección a un servidor ascendente de 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;
}
}
Una de las razones (anteriores) para usar Varnish antes de esta configuración fue porque Nginx no admitía de forma nativa el proxy de conexiones HTTP 1.1 (que era necesario para el encabezado de actualización usado con Websockets); esto ya no es un problema y las versiones actuales de Nginx también puede proxy de conexiones websocket. Aparte de eso, si realmente estás usando Varnish para almacenar archivos en caché, esa es una razón de peso para mantenerlo como servidor front-end (aunque vale la pena señalar que la única ganancia real ocurre si estás usando Varnish para servir copias en caché de archivos generados dinámicamente). páginas). Por ejemplo, si tiene Nginx escuchando en el puerto 81 y Node.js en el puerto 3000, es posible que tenga lo siguiente en su VCL de Varnish (que servirá rutas desde example.com/nodejs usando Node.js y todo lo demás con 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);
}