Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
meteor的建议nginx配置_Nginx_Meteor - Fatal编程技术网

meteor的建议nginx配置

meteor的建议nginx配置,nginx,meteor,Nginx,Meteor,my meteor应用程序的站点配置具有如下指令: 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.o

my meteor应用程序的站点配置具有如下指令:

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\u 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的URL都可以在
web.browser
目录中找到。以静态方式提供这些文件,不要将它们写入访问日志,并告诉客户端它们可以永久缓存

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

我将维护这个示例的完整版本。还值得注意的是,我正在使用一个最近构建的nginx,它支持前面提到的WebSockets

最后,不要忘记在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;
在做了所有这些之后,我能在比赛中得到一个不错的分数

更新日期2014年9月17日:


更新了meteor 0.9.2.1的路径

我对另一个答案做了一些更新和改进。具体来说,

  • 需要为Meteor在中完成的新任务设置
    X-Forwarded-For
    标题。似乎没有使用
    X-Real-IP
  • /nginx\u status
    路径可用于监控通过代理的流量
我对这个做了一些修改,并提出了以下配置。适当地编辑字段

首先是压缩,这大大加快了加载时间。请注意,
gzip\u 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中设置环境变量,以便从反向代理后面正确地获取客户端IP。

如果您允许缓存所有
css
/
js
文件,用户的副本是否仍会被更新(就像热代码重新加载一样)当您更改
客户机
目录中的Meteor文件时?是。每次绑定应用程序时,它都会创建一对具有唯一名称的新css和js文件。在站点上部署实时用户时,如何保持websocket连接的活动状态?我收到502个严重的网关错误,当前用户必须重新加载应用程序。@AndrewMao Nice-很高兴你让它工作起来。我没有将gzip设置添加到gist中,因为它们实际上属于主nginx.conf的不同部分,而不是站点配置。我认为真正的解决办法是,如果我在博客上写下我在生产中是如何做到这一点的。当我这样做的时候,我会从答案中添加一个链接。我建议也添加jpg或png资源?如果他们是从同一个地方来的,谢谢安德鲁。我找到的另一个好资源是。谢谢你的更新;删除了我的评论。我还测试了X-Real-IP和X-Forwarded-For,只有后者由Meteor读取。根据代码,如预期。仍然需要Env var HTTP\u转发\u计数吗?是最新的吗?