我已经在VPS(ubuntu 10.04)上部署了我的nodejs应用程序。我已将其托管在子域(subdomain.myapp.com:3000)上,我只有一个IP地址
默认情况下,apache默认使用端口80。我只是希望我的应用程序应该在端口3000上运行,但URL应该是(subdomain.myapp.com)
这在nodejs中是可行的还是我必须调整我的虚拟主机或apache的文件。
答案 0 :(得分: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,一定很好!
答案 1 :(得分: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>
答案 2 :(得分:0)
我需要做同样的事情,@ drinchev的回答几乎对我有用,但是因为我在我的开发盒上运行了几个vhosts它并不完全。一些小的调整使它不会破坏我所有的其他虚拟对象。
<Proxy *>
需要
<Proxy mynodejs.mydevbox.local>
并且
<VirtualHost *:80>
需要
<VirtualHost mynodejs.mydevbox.local:80>
因此,我的本地开发机器命名为“mydevbox.local”而我的节点vhost正在侦听端口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>
其他vhost可以跟随