如何配置在同一子域中运行的反向代理(在 /)和 Laravel 项目(在 /backoffice/)?

如何配置在同一子域中运行的反向代理(在 /)和 Laravel 项目(在 /backoffice/)?

我正在尝试在 Apache 上配置一个子域,该子域应该:

  • 如果请求以 /backoffice 开头,则提供 PHP Laravel 应用程序
  • 否则,ReverseProxy 到节点应用程序。

我可以独立配置反向代理和 Laravel,但不能同时配置,因为 Laravel 公共文件夹上的 .htaccess 与反向代理配置冲突。

这是 laravel 文件夹中的 .htaccess:

<IfModule mod_rewrite.c>
    <IfModule mod_negotiation.c>
        Options -MultiViews -Indexes
    </IfModule>

    RewriteEngine On

    # Redirect Trailing Slashes If Not A Folder...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_URI} (.+)/$
    RewriteRule ^ %1 [L,R=301]

    # Send Requests To Front Controller...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]
</IfModule>

以下是 apache conf 文件配置的相关部分:

        Alias /backoffice /mnt/volume_fra1_01/project/backoffice/public
        <Directory /mnt/volume_fra1_01/project/backoffice/public >
                Options Indexes FollowSymLinks MultiViews
                AllowOverride All
                Require all granted
        </Directory>


        ProxyRequests On
        ProxyPass /backoffice !
        ProxyPass / http://localhost:3000
        ProxyPassReverse / http://localhost:3000


即使排除 /backoffice,每个请求都会到达反向代理。

通过删除 .htaccess,我可以确认排除确实发生了。因此,我怀疑 modrewrite 正在干扰 URI,以至于被 ProxyPass 规则捕获。

这种配置似乎很容易实现。而且在 NGINX 中很容易实现。如何在 Apache 中实现?

相关内容