Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/41.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/vb6/2.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
Apache 将子域发送到node.js_Apache_Node.js_Virtualhost - Fatal编程技术网

Apache 将子域发送到node.js

Apache 将子域发送到node.js,apache,node.js,virtualhost,Apache,Node.js,Virtualhost,我的工作是在运行apache的ubuntu服务器(10.10)上运行两个不同的内部web应用程序。我目前正在开发另一个web应用程序,并且正在认真考虑在定制的node.js web服务器上开发。我想这样做的理由是: 速度/可扩展性 安全性-页面将提供一个switch…case,而不仅仅是满足(潜在的恶意)用户的任何要求 易于设置-我的目的是将其作为一个开源项目,node.js对于用户来说更容易设置,而不是处理apache/IIS/等 我的问题是,在我让apache监听端口80的服务器上,如何将某

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

  • 速度/可扩展性
  • 安全性-页面将提供一个switch…case,而不仅仅是满足(潜在的恶意)用户的任何要求
  • 易于设置-我的目的是将其作为一个开源项目,node.js对于用户来说更容易设置,而不是处理apache/IIS/等
  • 我的问题是,在我让apache监听端口80的服务器上,如何将某个子域传递给node.js。我已经看过几篇关于使用apache虚拟主机来传递它的文章,但这似乎违背了使用node.js的目的。如果我必须通过apache,那么我避免使用apache/IIS的所有三个理由都无效了

    我知道我可以使用不同的端口(:8080?),但从最终用户的角度来看,必须设置自定义端口是非常令人困惑的。有其他的想法吗


    谢谢

    让我从头开始:

    你有一个好主意。dns服务器将一个dns映射到一个IP

    然后,您的计算机上运行的是
    apache
    ,它在80上侦听
    http://
    的连接,在端口443上侦听
    https://
    的连接<代码>http://example/实际上是
    http://example:80/

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


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

    反过来做怎么样:将节点绑定到端口80,处理针对子域的流量,并将其用作apache的反向代理,用于其他一切?

    您不能同时从apache和node.js为端口80提供服务。使用Apache作为代理不会有多大的效率,这就是为什么nginx在这个场景中很受欢迎的原因。除了基于nginx的反向代理之外,其他替代方法可以是按照Khez的建议,将您的子域映射到不同的IP地址,这将使node.js程序成为Apache的反向代理,或者可能将node.js本身用作Apache的反向代理。

    您可以在Apache中为新站点配置一个虚拟主机,并在其中添加到localhost和port的永久重定向由node.js使用

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

    名称虚拟主机*:80

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

    ServerName mynewsite.com 重定向匹配(.*)1美元

    
    ServerName subdomain.yourdomain.com
    代理主机
    ProxyPass/http://localhost:8080/
    

    多亏了

    如果socket.io节点正在运行,请确保同时启用一些apache MOD:

  • a2enmod代理
  • a2enmod代理_平衡器
  • a2enmod proxy_express
  • a2enmod代理服务器
  • 文件/etc/apache2/sites available/chat.example.com.conf中


    
    ServerName chat.example.com
    代理主机
    ProxyPasshttp://localhost:3000/
    ProxyPassReversehttp://localhost:3000/
    

    然后当然
    服务apache2重新加载

    您知道有什么好的node.js模块/扩展或教程吗?或者至少是一个好的关键字来搜索?我知道这是一岁的孩子。。。这真的有效吗?我注意到这个答案得到了0票,而所有其他帖子都说OP所要求的是不可能的。
    <VirtualHost *:80>
    ServerName subdomain.yourdomain.com
    ProxyPreserveHost on
    ProxyPass / http://localhost:8080/
    </VirtualHost>
    
    <VirtualHost *:80>
        ServerName chat.example.com
    
        <Location "/">
            ProxyPreserveHost On
            ProxyPass http://localhost:3000/
            ProxyPassReverse http://localhost:3000/
        </Location>
    </VirtualHost>