【问题标题】:Reverse Proxy in CakePHP?CakePHP 中的反向代理?
【发布时间】:2009-10-29 05:01:35
【问题描述】:

我有一个 CakePHP 应用程序,我的 httpd.conf 中有以下指令

ProxyRequests off
ProxyPass /forum/ http://somesite.com/phpbb3
ProxyPass /gallery/ http://someothersite.com/gallery3
<Location /forum/>
        ProxyPassReverse /
</Location>
<Location /gallery/>
        ProxyPassReverse /
</Location>

如果没有 CakePHP,这可以正常工作 - 但是因为 CakePHP 使用它自己的来自 routes.php 和其他来源的重定向逻辑,它似乎覆盖了任何代理设置,所以在我的服务器上对“/community”的任何调用都遵循默认路径寻找一个名为 CommunityController 的控制器。

我的问题是我希望有一台服务器为多个应用程序提供服务,但要保持对用户的无缝 - 例如,一个完整的 PHPBB 应用程序可以在“/forum”目录中运行,就好像它是一个控制器一样CakePHP。

以前有人做过吗,可以做到吗?为什么mod_rewrite 和/或 routes.php 文件会覆盖我的 mod_proxy 指令??

【问题讨论】:

    标签: apache cakephp reverse-proxy mod-proxy


    【解决方案1】:

    也许您可以使用 mod_rewrite 来创建带有 [P](代理)标志和 [L](最后一条规则)标志的 RewriteRule 指令,而不是使用 mod_proxy。

    'proxy|P'(强制代理):

    这个标志 强制替换部分为 作为代理请求在内部发送,并且 立即(重写处理停止 这里)通过代理模块。 您必须确保 替换字符串是有效的 URI (通常从 http://hostname) 可以处理 由 Apache 代理模块。如果不, 你会从代理那里得到一个错误 模块。使用此标志来实现 更强大的实现 ProxyPass 指令,用于映射远程 内容到命名空间 本地服务器。

    注意:mod_proxy 必须在 为了使用这个标志。

    'last|L'(最后一条规则):

    停止 此处重写过程,不适用 任何更多的重写规则。这个 对应 Perl 的最后一条命令 或 C 中的 break 命令。使用这个 标志以防止当前 重写的 URL 被重写 进一步遵循规则。为了 例如,用它来重写 root-path URL ('/') 到一个真实的, 例如,'/e/www/'。

    【讨论】:

    • 我看过了,但我读到如果我使用 mod rewrite 会影响性能。我想我的主要问题是为什么 mod_proxy 不优先于 CakePHPs 路由?
    猜你喜欢
    • 2019-03-14
    • 2020-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-05
    • 2016-04-11
    • 2021-04-16
    • 2017-08-16
    相关资源
    最近更新 更多