我已经在 VPS(ubuntu 10.04)上部署了我的 nodejs 应用程序。我将它托管在一个子域 (subdomain.myapp.com:3000) 上,我只有一个 IP 地址
默认情况下,apache 默认使用端口 80。我只希望我的应用程序应该在端口 3000 上运行,但 URL 应该是 (subdomain.myapp.com)
这在nodejs中是否可行,还是我必须调整我的虚拟主机或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,它一定没问题!
只是使用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>
我需要做同样的事情,@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>
其他虚拟主机可以跟随