varios - configuración nginx recomendada para meteoro
reiniciar nginx (2)
La configuración del sitio para mi aplicación de meteorito tiene directivas que se parecen a las siguientes:
server {
listen 443;
server_name XXX;
ssl on;
ssl_certificate XXX;
ssl_certificate_key XXX;
location / {
proxy_pass http://localhost:3000;
proxy_set_header X-Real-IP $remote_addr; # http://wiki.nginx.org/HttpProxyModule
proxy_http_version 1.1; # recommended for keep-alive connections per http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_http_version
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
}
}
Siento que debería decirle a nginx que sirva contenido de static_cacheable
y establezca el encabezado expires
a max
. ¿Cómo hago eso exactamente? ¿Hay otras cosas que debería agregar aquí?
Aunque no soy un experto en nginx, siento que entiendo mucho mejor cómo hacerlo ahora. A medida que descubra más, actualizaré esta respuesta.
Una posible solución a mi pregunta original es esta:
location ~* "^/[a-z0-9]{40}/.(css|js)$" {
root /home/ubuntu/app/bundle/programs/web.browser;
access_log off;
expires max;
}
Que dice: Cualquier URL para este sitio que contiene una barra seguida de 40 caracteres alfanuméricos + .js o .css, se puede encontrar en el directorio web.browser
. Sirva estos archivos estáticamente, no los escriba en el registro de acceso y dígale al cliente que se pueden almacenar en caché para siempre.
Debido a que los principales archivos css y js tienen un nombre único después de cada operación del paquete, esto debería ser seguro.
Mantendré una versión completa de este ejemplo here . También vale la pena señalar que estoy usando una compilación reciente de nginx que admite WebSockets como se explica here .
Finalmente, no olvide habilitar completamente gzip en su configuración de nginx. Mi sección gzip se ve así:
gzip on;
gzip_disable "msie6";
gzip_vary on;
gzip_proxied any;
gzip_comp_level 6;
gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;
Después de hacer todo eso, pude obtener un puntaje decente en pagespeed de pagespeed .
actualización 17/09/2014:
Actualizado las rutas para el meteorito 0.9.2.1
Hice algunas actualizaciones y mejoras a la otra respuesta. Específicamente,
- el encabezado
X-Forwarded-For
debe establecerse para la nueva detección de dirección IP de Meteor que se realiza en este archivo . No parece que se useX-Real-IP
. - la ruta
/nginx_status
se puede usar para controlar la cantidad de tráfico que llega a través del proxy.
He jugueteado con esto un poco y se me ocurrió la siguiente configuración. Edita tus campos apropiadamente.
En primer lugar, la compresión, que acelera considerablemente el tiempo de carga. Tenga en cuenta que la directiva gzip_buffers
generalmente se calcula automáticamente de forma predeterminada utilizando el tamaño de página de la memoria del sistema:
gzip on;
gzip_disable "msie6";
gzip_min_length 1100;
gzip_vary on;
gzip_proxied any;
gzip_comp_level 6;
gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;
La configuración del servidor en sí:
server {
listen 443 ssl;
server_name my.domain.com;
ssl on;
ssl_certificate /etc/ssl/nginx/certificate.crt;
ssl_certificate_key /etc/ssl/nginx/certificate.key;
access_log /var/log/nginx/localhost.ssl_access_log main;
error_log /var/log/nginx/localhost.ssl_error_log info;
# Forward to meteor server
location / {
proxy_pass http://localhost:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
# copied from http://blog.kovyrin.net/2006/04/29/monitoring-nginx-with-rrdtool/
location /nginx_status {
stub_status on;
access_log off;
allow 192.168.0.0/24;
deny all;
}
}
Finalmente, como mencionó Dan, necesitará establecer la variable de entorno HTTP_FORWARDED_COUNT en Meteor para recoger apropiadamente las direcciones IP del cliente detrás del proxy inverso.