configuration nginx recommandée pour meteor

la configuration du site pour mon application meteor a des directives qui ressemblent à celles-ci:

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;
  }
}

je me sens comme je devrais dire nginx pour servir le contenu de static_cacheable et le réglage de l' expires en-tête max. Exactement comment dois-je faire? Existe-il d'autres choses que je dois ajouter ici?

25
demandé sur Dan Dascalescu 2013-08-02 00:14:50
la source

2 ответов

bien que je ne sois pas un expert de nginx, j'ai l'impression d'avoir une bien meilleure compréhension de la façon de le faire maintenant. Comme je l'ai trouver plus je vais mettre à jour cette réponse.

Voici une solution possible à ma question initiale:

location ~* "^/[a-z0-9]{40}\.(css|js)$" {
  root /home/ubuntu/app/bundle/programs/web.browser;
  access_log off;
  expires max;
}

qui dit: toute URL de ce site contenant une barre oblique suivie de 40 caractères alphanumériques + .js ou .css, peut être trouvé dans le web.browser répertoire. Servez ces fichiers statiquement, ne les écrivez pas dans le journal d'accès, et dites au client que ils peuvent être mis en cache jamais.

parce que les principaux fichiers css et js sont nommés de façon unique après chaque opération de bundle, cela devrait être sûr à faire.

je maintiendrai une version complète de cet exemple ici. Il est également intéressant de noter que j'utilise une construction récente de nginx qui prend en charge les WebSockets comme parlé ici.

enfin, n'oubliez pas d'activer complètement gzip dans votre NGINX config. Ma section gzip semble comme:

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;

après avoir fait tout cela, j'ai pu obtenir un score décent sur pagespeed.

mise à jour 9/17/2014:

mise à Jour les chemins d'accès pour meteor 0.9.2.1

26
répondu David Weldon 2014-09-17 11:41:00
la source

j'ai fait quelques mises à jour et des améliorations à l'autre réponse. Plus précisément,

  • X-Forwarded-For en-tête doit être réglé pour Meteor nouveau détection d'adresse IP c'est fait en ce fichier. Il ne semble pas que X-Real-IP est utilisé.
  • /nginx_status le chemin peut être utilisé pour surveiller la quantité de trafic passant par le proxy.

j'ai bricolé un peu avec ça et j'ai trouvé la configuration suivante. Modifier votre champs de façon appropriée.

tout d'abord, la compression, qui accélère considérablement le temps de charge. Notez que l' gzip_buffers la directive est généralement calculée automatiquement par défaut en utilisant la taille de la page mémoire du système:

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;

le serveur se configure lui-même:

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;
    }
}

enfin, comme Dan l'a mentionné, vous aurez besoin de définir le HTTP_FORWARDED_COUNT variable d'environnement dans Meteor pour bien récupérer les IPs du client derrière le proxy inverse.

9
répondu Andrew Mao 2015-07-15 18:17:04
la source

Autres questions sur