在子文件夹中运行Apache和node.js

我想在Apache(2.4.7)服务器提供的域( /home/www/public )的子文件夹( /home/www/public/v1 )中运行meteor.js应用程序。 我已经build立了一个虚拟主机,监听端口80,并代理以“v1”开始的位置到nodejs应用程序。 它工作正常(我认为),除了我得到一个由meteor.js生成的404页面。

我必须修改meteor.js设置来接受来自“domain.tld / v1”而不是“domain.tld”的请求吗? 如果是这样,哪个文件? 这种设置可能吗?

虚拟主机configuration (为易读性编辑)

 <VirtualHost *:80> ServerName domain.tld DocumentRoot /home/username/www/domain.tld/public <Directory /> Options FollowSymLinks AllowOverride All Require all granted </Directory> <Directory /home/username/www/domain.tld/public/> Options Indexes FollowSymLinks MultiViews AllowOverride All Order allow,deny allow from All Require all granted </Directory> # NODEJS APP in V1 FOLDER ProxyRequests on <Proxy *> Order deny,allow Allow from all Require all granted </Proxy> <Location "/v1/"> ProxyPreserveHost on ProxyPass http://localhost:3000/ ProxyPassReverse http://localhost:3000/ </Location> </VirtualHost> 

组态

您的configuration是正确的,但有些选项已过时,其他不需要:

 <VirtualHost *:80> ServerName domain.tld DocumentRoot /home/username/www/domain.tld/public <Directory /> Options +FollowSymLinks AllowOverride All </Directory> <Directory /home/username/www/domain.tld/public/> Options +Indexes +FollowSymLinks +MultiViews AllowOverride All </Directory> # NODEJS APP in V1 FOLDER <Location "/v1"> ProxyPass http://localhost:3000/V1 ProxyPassReverse http://localhost:3000/V1 </Location> </VirtualHost> 

Meteor.js将从端口3000 / v1redirect到端口80 / v1

更多信息:

这在Apache 2.4中不存在

 Order allow,deny allow from All 

当你受到限制时,这是必要的

 Require all granted 

这将使你的服务器代理任何请求,并不是你所需要的( https://httpd.apache.org/docs/2.4/en/mod/mod_proxy.html#proxyrequests

 ProxyRequests on 

这是可选的( https://httpd.apache.org/docs/2.4/en/mod/mod_proxy.html#proxypreservehost

 ProxyPreserveHost on