Acelere el tiempo de carga de aplicaciones web Node.js, Socket.io aprovechando Nginx para servir archivos estáticos
Node.js es un excelente entorno de ejecución JavaScript, que puede utilizar para servir activos web completos(dinámicos estáticos) desde él
Si está trabajando en un proyecto pequeño y experimental entonces probablemente esté bien, sin embargo, si el tiempo de respuesta está preocupado entonces debe considerar el uso de un servidor web como Nginx delante de Node.js para servir archivos estáticos
En realidad, no sólo para servir archivos estáticos sino también desde el punto de vista de la seguridad debería considerar Nginx
Últimamente, estuve trabajando en Herramientas Geekflare (Website SEO & Security Analyzer) donde utilicé Node.js, Socket.io, y pude mejorar significativamente el tiempo de respuesta al descargar los archivos estáticos de Nginx
Como puede ver, cuando trasladé los archivos estáticos a Nginx eldía 29, el tiempo de respuesta disminuyó drásticamente
Así que si usted está utilizando Node.js para entregar una imagen, js, CSS, fuente, etc, a continuación, dar un pensamiento y considerar la separación de los deberes
Echemos un vistazo a cómo hice esto
Esto supone que tiene Nginx y Node.js instalados. Haga una copia de seguridad de la configuración existente antes de modificarla para poder volver atrás si las cosas van mal.
- Vaya a la ubicación donde está instalado Nginx (por defecto en SO basados en UNIX como CentOS/Ubuntu sería /etc/nginx)
- Vaya a sitios-disponibles
- Cree un nuevo archivo con lo siguiente (para facilitar la comprensión puede nombrar el archivo como su nombre de dominio)
upstream backend {
server localhost:3000;
}
server {
listen 80;
server_name siterelic.com;
root /var/tools/public;
location / {
try_files $uri @backend;
}
location @backend {
proxy_pass http://backend;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# Lo siguiente es necesario para la compatibilidad con Websocket
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
Hay los cinco bloques cruciales arriba, déjeme ir a través de uno por uno
- Upstream - especifique la variable como "backend" y proporcione la información del servidor node.js y el puerto. En un ejemplo, he dado localhost:3000 lo que significa que estoy ejecutando node.js en el mismo servidor como Nginx con número de puerto 3000.
- Servidor - dar el número de puerto, que Nginx debe estar escuchando, y el nombre del servidor como su nombre de dominio.
- Raíz - el directorio desde donde desea servir los archivos estáticos.
- Ubicación - esto es importante. Le estoy pidiendo a Nginx que intente buscar archivos en el directorio especificado con la ubicación raíz y si no coincide entonces vaya a @backend que es node.js
- Location@backend - esta es la configuración genérica del proxy node.js websocket.io
Habilite el sitio en /etc/nginx/sites-enabled
creando un simbólico
cd /etc/nginx/sites-enabled
ln
-s /etc/nginx/sites-available/$yourdomainname
Reinicie el Nginx y ¡diviértase!
Con la configuración anterior, pude mejorar el tiempo de respuesta significativamente, y espero que usted también lo haga
Si usted es nuevo en Nginx, entonces usted puede estar interesado en aprender cómo construir un servidor Nginx de alto rendimiento desde cero.