Nginx和多个Meteor / Nodejs应用程序的问题

我知道多个node.js,我假设扩展Meteor,可以使用Nginx运行在一台服务器上。 我已经安装了Nginx并在Ubuntu服务器上运行,我甚至可以让它响应请求并将它们代理到我的一个应用程序。 然而,当我尝试让Nginx代理第二个应用程序的stream量时,我遇到了一个障碍。

一些背景:

  • 第一个应用程序在端口8001上运行
  • 第二个应用程序在端口8002上运行
  • Nginx在80端口监听
  • 尝试让nginx发送/到应用程序一的stream量和在/ app2 /到应用程序二的stream量
  • 转到域:8001和域:8002可以访问这两个应用程序

我的Nginxconfiguration:

upstream mydomain.com { server 127.0.0.1:8001; server 127.0.0.1:8002; } # the nginx server instance server { listen 0.0.0.0:80 default_server; access_log /var/log/nginx/mydomain.log; location /app2 { rewrite /app2/(.*) /$1 break; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_set_header X-NginX-Proxy true; proxy_pass http://127.0.0.1:8002; proxy_redirect off; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; } location / { proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_set_header X-NginX-Proxy true; proxy_pass http://127.0.0.1:8001; proxy_redirect off; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; } } 

任何洞察到什么可能会发生什么时候stream量去/ app2 /我将不胜感激!

 proxy_pass http://127.0.0.1:8002/1; <-- these should be proxy_pass http://**my_upstream_name**; <--these 

然后

 upstream my_upstream_name { //Ngixn do a round robin load balance, some users will conect to / and othes to /app2 server 127.0.0.1:8001; server 127.0.0.1:8002; } 

一些技巧控制代理:

看看这里 @nginx文档

那么我们在这里:

权重= NUM​​BER – 设置服务器的权重,如果没有设置权重等于1。 失衡的默认循环。

max_fails = NUM​​BER – 在该时间段内与服务器通信失败的次数(由参数fail_timeout分配),在此之后它被认为不起作用。 如果没有设置,尝试的次数是一次。 值为0会关闭此检查。 什么被认为是失败是由proxy_next_upstream或fastcgi_next_upstream(除了不计入max_fails的http_404错误除外)定义的。

fail_timeout = TIME – 必须发生的时间* max_fails *尝试与服务器通信失败的次数,导致服务器被认为不可用,以及服务器被认为不可用的时间(在另一次尝试之前)。 如果没有设置的时间是10秒。 fail_timeout与上游响应时间无关,使用proxy_connect_timeout和proxy_read_timeout来控制。

服务器标记为永久脱机,并与指令ip_hash一起使用。

如果非备份服务器全部关闭或忙碌,则备份 – (0.6.7或更高版本)仅使用此服务器(不能与指令ip_hash一起使用)

 EXAMPLE generic upstream my_upstream_name { server backend1.example.com weight=5; server 127.0.0.1:8080 max_fails=3 fail_timeout=30s; server unix:/tmp/backend3; } // proxy_pass http://my_upstream_name; 

这些是你需要的:

如果你只是想控制一个应用程序的虚拟主机之间的负载:

  upstream my_upstream_name{ server 127.0.0.1:8080 max_fails=3 fail_timeout=30s; server 127.0.0.1:8081 max_fails=3 fail_timeout=30s; server 127.0.0.1:8082 max_fails=3 fail_timeout=30s; server 127.0.0.1:8083 backup; // proxy_pass http://my_upstream_name; // amazingness no.1, the keyword "backup" means that this server should only be used when the rest are non-responsive } 

如果你有2个或更多的应用程序:1每个应用程序的上游,如:

 upstream my_upstream_name{ server 127.0.0.1:8080 max_fails=3 fail_timeout=30s; server 127.0.0.1:8081 max_fails=3 fail_timeout=30s; server 127.0.0.1:8082 max_fails=3 fail_timeout=30s; server 127.0.0.1:8083 backup; } upstream my_upstream_name_app2 { server 127.0.0.1:8084 max_fails=3 fail_timeout=30s; server 127.0.0.1:8085 max_fails=3 fail_timeout=30s; server 127.0.0.1:8086 max_fails=3 fail_timeout=30s; server 127.0.0.1:8087 backup; } upstream my_upstream_name_app3 { server 127.0.0.1:8088 max_fails=3 fail_timeout=30s; server 127.0.0.1:8089 max_fails=3 fail_timeout=30s; server 127.0.0.1:8090 max_fails=3 fail_timeout=30s; server 127.0.0.1:8091 backup; } 

希望能帮助到你。

寻找替代Nginx的用户:为每个Meteor应用程序安装Cluster软件包,软件包将自动处理负载平衡。 https://github.com/meteorhacks/cluster

如何设置:

 # You can use your existing MONGO_URL for this export CLUSTER_DISCOVERY_URL=mongodb://host:port/db, # this is the direct URL to your server (it could be a private URL) export CLUSTER_ENDPOINT_URL=http://ipaddress # mark your server as a web service (you can set any name for this) export CLUSTER_SERVICE=web 

示例设置:

 { "ip-1": { "endpointUrl": "http://ip-1", "balancerUrl": "https://one.bulletproofmeteor.com" }, "ip-2": { "endpointUrl": "http://ip-2", "balancerUrl": "https://two.bulletproofmeteor.com" }, "ip-3": { "endpointUrl": "http://ip-3", "balancerUrl": "https://three.bulletproofmeteor.com" }, "ip-4": { "endpointUrl": "http://ip-4" } }