当前位置: 首页 > 面试题库 >

Nginx和多个Meteor / Nodejs应用出现问题

丁安宜
2023-03-14
问题内容

我知道可以使用Nginx在一台服务器上运行多个Node.js(扩展名为Meteor)。我已经安装好Nginx并可以在Ubuntu服务器上运行它,我什至可以使其响应请求并将其代理到我的一个应用程序中。但是,当尝试让Nginx将流量代理到第二个应用程序时,我遇到了障碍。

一些背景:

  • 在端口8001上运行的第一个应用程序
  • 在端口8002上运行的第二个应用
  • Nginx在端口80上监听
  • 尝试让Nginx在/处向应用程序一发送流量,在/ app2 /处向应用程序二发送流量
  • 可以通过转到domain:8001和domain:8002来访问两个应用程序

我的Nginx配置:

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

关于流量进入/ 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 docs

然后我们开始:

weight = NUM​​BER- 设置服务器的权重,如果未设置,则权重等于1。不平衡默认循环。

max_fails = NUM​​BER-
在一定时间内(由参数fail_timeout分配)与服务器通信的失败尝试次数,在此时间内它被认为是无效的。如果未设置,则尝试次数为1。值为0将关闭此检查。可以认为失败的是由proxy_next_upstream或fastcgi_next_upstream定义的(http_404错误不计入max_fails)。

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

希望能帮助到你。



 类似资料:
  • 问题内容: 我在向多个收件人发送邮件时遇到问题。 我的剧本是 我有两个问题 我可以列出一系列收件人吗? 如何在密件抄送列表中获取一组收件人? 与以上两个查询相关的解决方案确实会有所帮助 谢谢Nabarun 问题答案: 您可以在和字段中使用一系列收件人。 例如: 如果这对您不起作用,并且Node没有吐出任何错误,请登录SendGrid的网站并查看“ 电子邮件活动日志”,以检查是否已发送电子邮件。 我

  • 问题内容: 所以我遇到了这种困境。 以上是在我的PHP页面上调用的。 然后我打电话 这将加载一堆textareas ..... tinyMCE首次返回时将在所有文本区域上加载..当我单击重新加载时,再次运行以上操作并返回文本区域,它们不再连接上tinyMCE给他们。我不确定为什么它会在第一次而不是随后的时间起作用。 问题答案: 重新加载之前,应正确关闭tinymce,以便在重新加载后能够重新初始化

  • 我需要通过蓝牙将手机连接到Raspberry,获取可用wifi列表,在手机上选择一个,将其发送到Raspberry并连接到选定的网络。 我为react native选择了“react native ble manager”,为raspberry选择了bleno。 在用我的手机连接到Raspberry后,我正试图成为一名污点管理者。已读,但响应的readData为空字符串 树莓的特性: React

  • 问题内容: 我是Nodejs的新手。如何导出多个对象?例如 我想使用类似的模型: 我想使用类似这样的对象: 谢谢你的建议:D 更新 :解决以下方法: 但是我还有另一个问题。如何动态分配模型? 更新通过 以下方式解决了第二个问题: 问题答案: 只需将它们包装在对象文字中即可。在纯JS(没有CoffeeScript)中,将是: 在coffeescript中,您使用缩进,但要创建空对象时除外:

  • 上周,我已经很好地安装了我的nginx服务器,直到我注意到我收到了针对它的DOSS攻击。然后我注意到此时我的Nginx服务器无法启动。我尝试了所有其他方法,除了阅读没有帮助的文档之外,我不确定如何解决这个问题。 关于Nginx的文档 主nginx。conf似乎为空,由于某种原因,我无法保存到它。 root@ubuntu-vpc-do-moon:~# /etc/init.d/nginx状态●ngin

  • 当我使用 Flask 结合 uWSGI 在服务器上以 HTTP 模式启动部署时,如果我通过科学上网访问服务器的公网 IP 加上端口,我可能会遇到网络阻断和高延迟的问题,导致无法正常访问。然而,当我关闭科学上网并使用服务器的真实 IP 地址时,访问就正常了。另外一种解决方法是使用 Nginx 反向代理端口,这样就不会受到科学上网的影响。不清楚这种方法的原理是什么。