我已经在VPS(ubuntu 10.04)上部署了我的Node.js应用程序。我将其托管在一个子域名下(subdomain.myapp.com:3000),并且只有一个IP地址。
默认情况下,Apache使用端口80作为默认端口。我只想让我的应用程序运行在端口3000上,但URL应该是(subdomain.myapp.com)
这在Node.js中是否可行,还是我需要调整虚拟主机或Apache的文件。
是的,这是可能的。
在您的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,一切就应该没问题了!
跟进@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>
我需要做同样的事情,@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>
其他虚拟主机可以跟随
ProxyPass / http://localhost:3000/
更改为ProxyPass / http://subdomain.myapp.com:3000/
吗? - Niraj Chauhan