16

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

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

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

4

3 回答 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,它一定没问题!

于 2013-01-13T13:01:41.840 回答
3

只是使用Apache 2.4 更新 @drinchev 答案。*

启用代理模式:

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>
于 2015-07-02T16:38:59.153 回答
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>

其他虚拟主机可以跟随

于 2016-11-04T23:39:10.560 回答