Node.js域名不带端口号

16

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

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

这在Node.js中是否可行,还是我需要调整虚拟主机或Apache的文件。

3个回答

15

是的,这是可能的。

在您的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/ 吗? - Niraj Chauhan
不需要更改任何内容,只需在本地以独立进程运行节点(node)并访问localhost:3000即可。 - drinchev
4
问题是关于Node.js的,但回答涉及到Apache,这是故意的还是我漏看了什么? - Basav
1
顺便提一下,有2个模块需要加载,在某些发行版上需要同时启用这两个模块,可以使用命令"a2ensite proxy"和"a2ensite proxy_http"来启用这两个模块。 - adelriosantiago
它对我没有作用,有人可以帮助我吗? - Alok Deshwal
显示剩余4条评论

3

跟进@drinchev的回答,更新Apache 2.4.*版本的方法:

启用代理模式:

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上是“安全”的? - MadPhysicist

0

我需要做同样的事情,@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>

其他虚拟主机可以跟随


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接