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

如何在端口80上为网站建立Node.js多租户?

景唯
2023-03-14
问题内容

我的最终目标是使每个服务器实例的node.js更具成本效益。

我不是在玩游戏或聊天室,而是在为客户提供简单的网站。我想在单个服务器上容纳多个客户端,但使用主机头映射将多个网站从80端口运行。我仍想在使用Express,但如果可能的话,它更像是从端口80路由到其他节点应用程序的路由。如果以此方式完成节点,则可能会更便宜,但就我的目的而言,它目前更昂贵,因为如果每个客户在端口80上运行,他们都将需要自己的盒子。此外,我的动机是专注于节点开发,但必须有一个理由因此在成本方面。

我在Windows中为ASP.NET做了大量的工作,因为IIS对此提供了开箱即用的支持,而且我知道这对于Apache也很正常。

如果这不是正确的问题,请随意将其移至其他论坛,以进行堆栈交换,或者提出建设性批评,而不是随意投下反对票。谢谢。

更新

我采用的方法是使用静态托管(通过gatspy和s3),然后使用API​​,而不是通过来自客户端的帖子消息和来自服务器的API密钥注册域,并随着站点的更改定期生成静态站点,但是感谢所有建议!


问题答案:

从理论上讲,您可以构建一个模拟Apache / Lighttpd /
Nginx功能的纯节点Web服务器,但我不建议这样做。实际上,对于严肃的生产服务,我建议您始终在Nginx或同等产品上领先您的服务)。

这是一个简单的Nginx配置对端口80上公开的两个子服务的工作方式。

worker_processes  4;

events {
  worker_connections 1024;
}

http {
  include       mime.types;
  default_type  text/html;

  server {
    listen 80;
    server_name service1.mydomain.com
    location / {
      proxy_pass         http://127.0.0.1:3000/;
    }
  }
  server {
    listen 80;
    server_name service2.mydomain.com
    location / {
      proxy_pass         http://127.0.0.1:3001/;
    }
  }
}

我已经看到生产环境出现内核恐慌,因为Node默认情况下不会限制负载,并且正在优先接受新连接而不是处理现有请求-当然,它“不应该”使内核崩溃,但是确实崩溃了。另外,通过在端口3000上运行,您可以以很少的权限以非root用户身份运行Node服务(并且仍然可以对其进行代理,以便它似乎位于端口80上)。您还可以在多个工作线程之间分散负载,提供静态服务,日志请求,重写URL等,等等。Nginx非常快(比Apache轻得多)。同框代理转发的开销很小,并且为您购买了如此多的功能和鲁棒性,这在我的书中是扣篮。甚至是很小的东西,例如-
当我崩溃或使节点服务超载时,用户是否也会出现黑洞或“请原谅我们的灰尘,



 类似资料:
  • 问题内容: 我的目标是在端口80上运行Node.js。这是因为我发现node.js被某些网络阻止,这些网络不允许来自任何其他端口的流量。 看来最好的方法是通过Node.js代理Apache。我已经尝试使用node-http- proxy 来做到这一点,但是我没有任何运气。 我正在使用的代码在这里: 但是我一直收到端口80的错误“地址正在使用”。我一定做错了。 如何使用node-http-proxy

  • 问题内容: 我有一个通过端口5000运行的Flask服务器,很好。我可以在http://example.com:5000上访问它 但是是否可以在http://example.com上简单地访问它?我假设这意味着我必须将端口从5000更改为80。但是当我在Flask上尝试使用该端口时,运行该错误消息。 连续lsof -i :80收益 我需要先杀死这些进程吗?这样安全吗?还是有另一种方法可以让Flas

  • (这个问题的灵感来自对此线程的响应:WebSocket 服务器如何处理多个传入的连接请求? 我的理解是这样的: 假设客户端 IP = 1.1.1.1,服务器 IP = 9.9.9.9 > 浏览器选择一个随机的本地可用端口,例如 5555,并启动与服务器端口 80 的连接。因此,在客户端上,应表示 IP 连接,例如 (1.1.1.1 服务器在其端口80上调用并识别来自客户端的连接请求。然后服务器选择

  • 问题内容: 我正在运行Ubuntu 11.10,并已在该系统上安装Jenkins。 我看过一些有关如何设置反向代理(Apache,Nginx等)的教程,但是,这是专门用于jenkins的VM,我想让jenkins在端口80上运行时尽可能保持精简。 我发现了新贵的配置,并将端口修改为80 当我通过启动jenkins时,显示它运行了几秒钟然后终止。 这是因为jenkins 在特权端口上以用户身份运行吗

  • 我有一个server.java文件: 还有一个客户。java文件格式为: 我还创建了自己的证书,如下所示: 但无论我做什么,我总是会犯错误: 我担心的是,如果我将端口从80更改为其他类型,代码工作得非常好,但我必须专门处理这个端口本身。证书和两个java文件位于同一文件夹中。你们能帮我找到一种在端口80上执行SSL操作的方法吗?

  • 问题内容: 我想知道如何使用Node.js从头开始开发网站。我明白我怎么能 可能 做到这一点,但我感兴趣的是 最好的 设计实践。 我需要这个理论网站来: 做很多AJAX 非常简单 相对较小 连接到…假设一个MySQL服务器 在PHP中,构建一个非常小的网站非常简单-我在Apache和MySQL服务器上设置了PHP,然后执行以下操作: 其中具有用于连接数据库的connect.php,具有常见数据库相