推荐用于meteor的nginxconfiguration

我的meteor应用程序的网站configuration有如下的指令:

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

我觉得我应该告诉nginx服务static_cacheable内容,并设置expires标题为max 。 我到底怎么做呢? 我还有其他的东西吗?

虽然我不是一个nginx专家,但我觉得现在对于如何做到这一点有了更好的理解。 当我弄清楚,我会更新这个答案。

我原来的问题的一个可能的解决办法是:

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

其中说:任何网站包含斜线后跟40个字母数字字符+ .js或.css,可以在web.browser目录中find。 静态服务这些文件,不要将它们写入访问日志,并告诉客户端它们可以永久caching。

因为主CSS和JS文件是在每个bundle操作之后唯一命名的,所以这应该是安全的。

我将在这里维护这个例子的完整版本。 另外值得一提的是,我正在使用最近的一个支持WebSockets的nginx版本。

最后,不要忘记在你的nginxconfiguration中完全启用gzip。 我的gzip部分如下所示:

 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; 

做完所有这些之后,我能够在pagespeed上得到一个不错的分数。

更新9/17/2014:

更新了meteor0.9.2.1的path

我对其他答案做了一些更新和改进。 特别,

  • 需要为meteor的新IP地址检测设置X-Forwarded-For标题, 这个 检测是在这个文件中完成的。 似乎并没有使用X-Real-IP
  • 可以使用/nginx_statuspath来监视通过代理的stream量。

我已经弄清楚了这一点,并提出以下configuration。 适当地编辑你的领域。

首先,压缩,这大大加快了加载时间。 请注意, gzip_buffers指令通常默认使用系统的内存页大小自动计算:

 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; 

服务器configuration本身:

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

最后,正如Dan所提到的,您需要在Meteor中设置HTTP_FORWARDED_COUNT环境variables,以便正确地从反向代理中获取客户端IP。