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

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

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

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

虚拟主机配置(已编辑以便于阅读)

<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>

答案1

配置

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

<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/v1 重定向到端口 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

相关内容