我的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
目录中找到。 静态服务这些文件,不要将它们写入访问日志,并告诉客户端它们可以永久缓存。
因为主CSS和JS文件是在每个bundle操作之后唯一命名的,所以这应该是安全的。
我将在这里维护这个例子的完整版本。 另外值得一提的是,我正在使用最近的一个支持WebSockets的nginx版本。
最后,不要忘记在你的nginx配置中完全启用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:
更新了流星0.9.2.1的路径
我对其他答案做了一些更新和改进。 特别,
X-Forwarded-For
标题, 这个 检测是在这个文件中完成的。 似乎并没有使用X-Real-IP
。 /nginx_status
路径来监视通过代理的流量。 我已经弄清楚了这一点,并提出以下配置。 适当地编辑你的领域。
首先,压缩,这大大加快了加载时间。 请注意, 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;
服务器配置本身:
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环境变量,以便正确地从反向代理中获取客户端IP。