【问题标题】:nodejs domain without port number没有端口号的nodejs域
【发布时间】:2012-12-27 13:00:27
【问题描述】:

我已经在 VPS(ubuntu 10.04)上部署了我的 nodejs 应用程序。我将它托管在一个子域 (subdomain.myapp.com:3000) 上,我只有一个 IP 地址

默认情况下,apache 默认使用端口 80。我只希望我的应用程序应该在端口 3000 上运行,但 URL 应该是 (subdomain.myapp.com)

这在 nodejs 中是否可行,还是我必须调整我的虚拟主机或 apache 的文件。

【问题讨论】:

    标签: node.js url port


    【解决方案1】:

    有可能

    在您的 apache 虚拟主机文件中配置以下内容

    <VirtualHost *:80>
        ServerName subdomain.myapp.com
    
        ProxyRequests off
    
        <Proxy *>
                Order allow,deny
                Allow from all
        </Proxy>
    
        ProxyPass / http://localhost:3000/
        ProxyPassReverse / http://localhost:3000/
        ProxyPreserveHost on
    </VirtualHost>
    

    你应该有

    NameVirtualHost *:80
    

    在您的文件顶部以及为 apache 安装的代理模块(我认为这是 ubuntu 的默认配置)

    LoadModule proxy_module lib/httpd/modules/mod_proxy.so
    

    它必须在您的 httpd.conf 文件中

    那你应该重启apache,应该没问题!

    【讨论】:

    • 我需要把这个ProxyPass / http://localhost:3000/改成ProxyPass / http://subdomain.myapp.com:3000/
    • nope ... 就这样,在 localhost:3000 上运行 node 作为一个单独的进程
    • 问题在 nodejs 上,但答案在 apache 上,这是故意的还是我在这里遗漏了什么?
    • @Basav 这是有意的,至少在没有端口号的服务器上部署 NodeJS 应用程序时,绝对需要 Apache(或 Nginx)。 NodeJS 不是 Apache/Nginx 的完全替代品。
    • 顺便说一下,有两个模块需要加载,在某些发行版上你需要同时启用这两个模块,这两个模块可以通过命令“a2ensite proxy”和“a2ensite proxy_http”来启用。
    【解决方案2】:

    Apache 2.4.*

    只是 @dinchev 答案的更新

    启用代理模式:

    a2ensite proxy_http
    a2ensite proxy
    

    然后:

    <VirtualHost *:80>
        ServerName subdomain.myapp.com
    
        ProxyRequests off
    
        <Proxy *>
                Require all granted
        </Proxy>
    
        ProxyPass / http://localhost:3000/
        ProxyPassReverse / http://localhost:3000/
        ProxyPreserveHost on
    </VirtualHost>
    

    【讨论】:

    • 在尝试解决此问题时,我读到 Apache 在使用代理之前需要“安全”。你知道这意味着什么吗?此外,这些代理似乎在 AWS EC2 实例上默认启用(我只需要添加 VirtualHost 即可使其工作)。这是否意味着 Apache 在 EC2 上是“安全的”?
    【解决方案3】:

    我需要做同样的事情,@drinchev 的回答几乎对我有用,但是因为我在我的开发盒上运行了几个虚拟主机,所以效果并不好。一些小的调整使它不会破坏我所有的其他虚拟主机。

    <Proxy *>
    

    需要

    <Proxy mynodejs.mydevbox.local>
    

    还有

    <VirtualHost *:80>
    

    需要

    <VirtualHost mynodejs.mydevbox.local:80>
    

    所以我的本地开发机器被命名为“mydevbox.local”并且我的节点虚拟主机正在侦听端口 3000,我的最终配置看起来更像:

    <VirtualHost mynodejs.mydevbox.local:80>
        DocumentRoot "/Library/WebServer/Documents/mynodejs"
        ServerName mynodejs.mydevbox.local
        ServerAlias mynodejs.mydevbox.local
    
        ProxyRequests off
    
        <Proxy mynodejs.mydevbox.local>
                Order allow,deny
                Allow from all
        </Proxy>
    
        ProxyPass / http://localhost:3000/
        ProxyPassReverse / http://localhost:3000/
        ProxyPreserveHost on
        ErrorLog "/private/var/log/apache2/mynodejs_error_log"
        CustomLog "/private/var/log/apache2/mynodejs_access_log" common
    </VirtualHost>
    
    <VirtualHost myothervhost.mydevbox.local:80>
        DocumentRoot "/Library/WebServer/Documents/myothervhost"
        ServerName myothervhost.mydevbox.local
        ServerAlias myothervhost.mydevbox.local
        ErrorLog "/private/var/log/apache2/myothervhost_error_log"
        CustomLog "/private/var/log/apache2/myothervhost_access_log" common
    </VirtualHost>
    

    其他虚拟主机可以跟随

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多