【问题标题】:Send subdomain to node.js将子域发送到 node.js
【发布时间】:2011-08-02 03:36:00
【问题描述】:

我的工作在运行 apache 的 ubuntu 服务器 (10.10) 上运行了几个不同的内部 Web 应用程序。我目前正在开发另一个 Web 应用程序,并且正在认真考虑在定制的 node.js Web 服务器之上进行开发。我想要这样做的原因是:

  1. 速度/可扩展性
  2. 安全性 - 页面将提供一个 switch...case,而不是只为(潜在恶意的)用户提供他们所要求的任何内容。
  3. 易于设置 - 我的目的是使其成为一个开源项目,并且 node.js 对用户来说更容易设置,而不是处理 apache/IIS/等。

我的问题是,在我有 apache 监听端口 80 的服务器上,我怎样才能将某些子域传递给 node.js。我看过几篇关于使用 apache 虚拟主机来传递它的文章,但这似乎违背了使用 node.js 的目的。如果我必须通过 apache,那么我避免 apache/IIS 的所有三个理由都已失效。

我知道我可以使用不同的端口(:8080?),但从最终用户的角度来看,必须放入自定义端口是相当令人困惑的。有什么替代的想法吗?

谢谢

【问题讨论】:

    标签: apache node.js virtualhost


    【解决方案1】:

    让我从头开始:

    您有一个DNS。一个 dns 服务器将一个 DNS 映射到一个 IP!

    然后您的计算机上运行apache,它侦听port 80 上的http:// 和端口443 上的https:// 连接。 http://example/ 实际上是对http://example:80/ 的请求。

    您不能使用node.js 在与apache 相同端口上的同一台机器上进行侦听。这就是为什么使用端口 8080 是可行的。

    您还可以将子域映射到不同的 IP。唯一需要注意的是,您需要有一个公共 IP 地址。

    【讨论】:

      【解决方案2】:

      反过来做事怎么样:将节点绑定到端口 80,处理以子域为目标的流量,并将其用作 apache 的反向代理来处理其他所有事情?

      【讨论】:

      • 你知道的任何好的 node.js 模块/扩展或教程?或者至少是一个很好的搜索关键字?
      • Node http proxy 应该可以解决问题。
      【解决方案3】:

      您不能同时从 Apache 和 node.js 提供端口 80。将 Apache 作为reverse proxy 效率不会很高,这就是为什么 nginx 在这种情况下很受欢迎。除了基于 nginx 的反向代理之外,其他替代方法可以是 Khez 建议的将您的子域映射到不同的 IP 地址,这将使 node.js 程序 listen 或使用 node.js 本身作为 Apache 的反向代理。

      【讨论】:

        【解决方案4】:

        您可以在 apache 中为您的新站点配置一个虚拟主机,并在其中添加一个永久重定向到 node.js 使用的本地主机和端口。

        这就是我在具有其他几个虚拟主机的服务器上执行此操作的方式,并且我的 node.js 应用程序在端口 3000 上运行:

        名称虚拟主机 *:80

        [为简洁起见省略其他虚拟主机]

        ...

        服务器名称 mynewsite.com 重定向匹配 (.*) http://localhost:3000$1

        【讨论】:

        • 我知道这是一岁...这真的有效吗?我注意到这个答案得到了 0 票,所有其他帖子都说 OP 要求的是不可能的。
        【解决方案5】:
        <VirtualHost *:80>
        ServerName subdomain.yourdomain.com
        ProxyPreserveHost on
        ProxyPass / http://localhost:8080/
        </VirtualHost>
        

        感谢http://www.chrisshiplet.com/2013/how-to-use-node-js-with-apache-on-port-80/

        【讨论】:

          【解决方案6】:

          如果 socket.io 节点正在运行,请务必同时启用一些 apache 模块:

          1. a2enmod 代理
          2. a2enmod proxy_balancer
          3. a2enmod proxy_express
          4. a2enmod proxy_http

          在文件 /etc/apache2/sites-available/chat.example.com.conf 中


          <VirtualHost *:80>
              ServerName chat.example.com
          
              <Location "/">
                  ProxyPreserveHost On
                  ProxyPass http://localhost:3000/
                  ProxyPassReverse http://localhost:3000/
              </Location>
          </VirtualHost>
          

          当然是service apache2 reload

          【讨论】:

            猜你喜欢
            • 2012-07-26
            • 2018-06-22
            • 2020-09-20
            • 1970-01-01
            • 2019-09-22
            • 2015-06-30
            • 2020-12-23
            • 2015-01-18
            • 2011-07-05
            相关资源
            最近更新 更多