configuração nginx recomendada para meteor

A configuração do site para o meu aplicativo de meteors tem diretivas parecidas com as seguintes:

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

Eu sinto que deveria estar dizendo nginx para servir conteúdo de static_cacheable e definindo o header de expires para max . Como exatamente eu faço isso? Há outras coisas que devo adicionar aqui?

Embora eu não seja um especialista em nginx, sinto que tenho uma compreensão muito melhor de como fazer isso agora. Quanto mais eu descobrir, atualizarei esta resposta.

Uma solução possível para minha pergunta original é esta:

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

O que diz: Qualquer URL para este site que contenha uma barra seguida por 40 caracteres alfanuméricos + .js ou .css, pode ser encontrado no diretório web.browser . Sirva esses arquivos estaticamente, não os grave no log de access e diga ao cliente que eles podem ser armazenados em cache para sempre.

Como os principais arquivos css e js são nomeados exclusivamente após cada operação do pacote, isso deve ser seguro.

Eu vou manter uma versão completa deste exemplo aqui . Também vale a pena notar que estou usando uma versão recente do nginx que suporta WebSockets como falamos aqui .

Finalmente, não esqueça de habilitar totalmente o gzip em sua configuração do nginx. Minha seção gzip se parece com:

 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; 

Depois de fazer tudo isso, consegui uma pontuação decente na velocidade da página .

atualização 17/09/2014:

Atualizados os caminhos para o meteor 0.9.2.1

Fiz algumas atualizações e melhorias para a outra resposta. Especificamente,

  • o header X-Forwarded-For precisa ser configurado para a nova detecção de endereço IP do Meteor que é feita neste arquivo . Não parece que o X-Real-IP é usado.
  • o caminho /nginx_status pode ser usado para monitorar a quantidade de tráfego proveniente do proxy.

Eu brinquei com isso um pouco e fiz a seguinte configuração. Edite seus campos adequadamente.

Primeiro, a compression, que acelera consideravelmente o tempo de carregamento. Observe que a diretiva gzip_buffers é geralmente calculada automaticamente por padrão usando o tamanho da página de memory do 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; 

O servidor config-se:

 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 Dan mencionou, você precisará configurar a variável de ambiente HTTP_FORWARDED_COUNT no Meteor para selecionar corretamente os IPs do cliente por trás do proxy reverso.