AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 617096
Accepted
jobu1324
jobu1324
Asked: 2014-08-01 16:09:26 +0800 CST2014-08-01 16:09:26 +0800 CST 2014-08-01 16:09:26 +0800 CST

使用 Apache 将子目录反向代理到子目录

  • 772

我理解概念上的代理(尽管从未设置过)。我正在尝试代理 Drupal,但我相当确定我的问题与 Drupal 无关。由于我从今天早上开始就一直在尝试确定使这项工作发挥作用的神奇成分,因此我将开始着手:

环境

我有两台服务器,如下所述。两者都可以公开访问,但是需要从代理服务器访问 drupal 站点的某些部分——特别是需要登录的内容。

代理服务器 (c5.domain.com)

  • c5.domain.com 是一个 Concrete5 站点,这意味着会有与之关联的 cookie。如果可能的话,我想避免 cookie 冲突造成的“碎屑后果”(不确定这是否是一个问题)。
  • http://c5.domain.com/my-account/应该代理http://drupal.domain.com/proxy/
  • http://c5.domain.com/my-account/login是登录页面的 url(http://drupal.domain.com/proxy/login在 drupal 上)

Drupal 服务器 (drupal.domain.com)

  • 非常标准的网站,带有大量令人讨厌的重定向。重定向似乎需要RewriteRule绕过。

什么有效(但不是我需要的)

虽然这允许对 drupal 站点的完全访问,包括登录的能力,但这具有阻止访问具体站点的明显且不幸的副作用。

ProxyPass         /        http://drupal.domain.com/
ProxyPassReverse  /        http://drupal.domain.com/
ProxyPassReverseCookieDomain   c5.domain.com    drupal.domain.com

我现在正在尝试什么

通过以下设置,我可以使用 url 访问 drupal 页面http://c5.domain.com/my-account/...,但我无法登录 - 尝试这样做会将我重新路由到http://c5.domain.com/proxy/(重定向到 /my-account/)

阿帕奇

<Location /my-account/>
    ProxyPass http://drupal.domain.com/proxy/
    ProxyPassReverse http://drupal.domain.com/proxy/
    ProxyPassReverseCookieDomain drupal.domain.com c5.domain.com
    # the cookie path seems important...
    ProxyPassReverseCookiePath / /my-account/
</Location>

# These rules seem necessary, since drupal's mod-alias seems to
# feed the browser a path like `https://c5.domain.com/proxy/...`
RewriteRule ^/proxy/(.*)$ /my-account/$1 [R,L]
RewriteRule ^/my-account/proxy/(.*)$ /my-account/$1 [R,L]

Drupal 配置

在这里,我尝试让 Drupal 与代理服务器配合得很好:

if (isset($_SERVER['HTTP_X_FORWARDED_HOST']) &&
    'drupal.domain.com' === $_SERVER['HTTP_X_FORWARDED_HOST']
) {
  $base_url = "$protocol://{$_SERVER['HTTP_X_FORWARDED_HOST']}/proxy";
  $cookie_domain = '.drupal.domain.com';
  $conf['reverse_proxy'] = TRUE;
  $conf['reverse_proxy_addresses'] = array('55.55.55.55',);
} else {
  $base_url = "$protocol://{$_SERVER['SERVER_NAME']}";
}
apache-2.2
  • 1 1 个回答
  • 4272 Views

1 个回答

  • Voted
  1. Best Answer
    jobu1324
    2014-08-06T13:22:42+08:002014-08-06T13:22:42+08:00

    问题:

    登录表单发布到 URL Drupal 知道:/proxy. 这意味着代理服务器收到的请求是http://c5.domain.com/proxy,而不是http://c5.domain.com/my-account。我想我可以通过重定向来解决这个问题:

    RewriteRule ^/proxy/(.*)$ /my-account/$1 [R,L]
    RewriteRule ^/my-account/proxy/(.*)$ /my-account/$1 [R,L]
    

    事实证明,大多数重定向都不会转发 POST 数据。

    一个解法:

    此规则有一个例外:307 将转发 POST 数据。像这样的工作:

    RewriteRule ^/proxy/(.*)$ /my-account/$1 [R=307,L]
    RewriteRule ^/my-account/proxy/(.*)$ /my-account/$1 [R=307,L]
    

    一个警告:

    当然,这种解决方案也不是没有优点和缺点。大多数浏览器会通知用户重定向(适当地,因为 POST 数据可以发送到任何地方)并询问用户他们是否打算将数据发送到新 URL。由于很少有用户可能理解该通知,因此此选项可能会导致混淆。

    • 0

相关问题

  • Apache Django Mod_Wsgi - 自动重新加载应用程序

  • Apache:对多个虚拟主机使用相同的目录指令

  • Apache 上的子域不工作 - 找不到服务器

  • PHP 作为 CGI 还是 Apache 模块?

  • 避免将某些丢失的文件记录到 Apache2 错误日志中

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve