【问题标题】:Apache redirection based on URL from the same webserver基于来自同一 Web 服务器的 URL 的 Apache 重定向
【发布时间】:2018-02-06 22:43:33
【问题描述】:

我们需要为我们的 Zabbix 监控前端实施 SSL,这对我们的一些后端脚本造成了严重破坏(这比修复它更麻烦)。

我目前的工作理论是,我应该能够使用一些重定向魔法来:

  • 通过 HTTPS 访问我们正常的 Zabbix 前端
  • 通过 HTTP 访问我们的 API(这是目前的关键问题)。

最初 - 重定向很容易:

<VirtualHost *:80>
ServerName <servername>
RedirectMatch /zabbix/(.*) https://<servername>/zabbix/$1
</VirtualHost>

但这会导致我们的 API 调用仍然需要通过 HTTP 完成的各种问题(这是通过调用 API 值的脚本完成的,以驱动其他工具中的接口选择)。我实际上最终得到了 412 响应。

所以我想我可以做这样的事情:

RedirectMatch /zabbix/(!api_jsonrpc.php)(.*) https://<servername>/zabbix/$2

虽然这仍然会让我的 API 通过 HTTP 成功,但它不会将我的 zabbix 前端重定向到 HTTPS。

这让我发疯了!任何帮助,将不胜感激。

示例网址:

https://<servername>/zabbix/zabbix.php?action=dashboard.view
https://<servername>/zabbix/index.php
http://<servername>/zabbix/api_jsonrpc.php

最终 - 任何不是“api_jsonrpc.php”的东西都需要重定向到 HTTPS,而任何具有该值的东西都需要通过 HTTP。

我们使用的是 Apache 2.2,目前无法升级。

【问题讨论】:

  • 我只是好奇:为什么要为 API 牺牲 https?那是什么问题?跨站点请求、自签名证书、自定义 CA、...?
  • 这是通过我们内部 CA 的自签名证书。它更像是处理我们大量自动化的跨脚本处理。

标签: apache api redirect zabbix


【解决方案1】:

最终,我遇到的问题归结为您无法真正重定向 POST。

为了解决这个问题,我最终赢得了我的论点,即他的库文件更新(强制所有流量通过 HTTPS)和大规模推送是唯一可行的解​​决方案,我们现在是黄金。

【讨论】:

    【解决方案2】:

    您不能仅通过在字符串前面加上感叹号来否定字符串,必须使用环视。

    我认为 API 请求不会传递任何 GET 参数 - 请尝试以下操作:

    RedirectMatch /zabbix/(.*)(?<!api_jsonrpc\.php)$ https://<servername>/zabbix/$1
    

    【讨论】:

    • 感谢您的支持 - 我以后将不得不使用该配置。
    • 哦,该死的,我完全错过了 POST 重定向不存在的事实,除了 HTTP 代码 307。这使我的答案不正确,但我会保留它,以防它在不同的环境中有用场景。
    • 所以,今天出于好奇,我尝试了您的 redirectmatch 正则表达式字符串。我上周推送了我们的库更新并强制重定向了我们的整个服务器,但最终这指向了我们系统中的另一个漏洞,需要将证书添加到我们的 java 应用程序(Rundeck)中——这引发了我再次尝试重定向的要求.通过我们仍然不明白的魔法行为,您的重定向正则表达式就像一个魅力!我无法将我们所有的监控前端重定向到 SSL,我们的后端功能仍将在端口 80 上运行。超级奇怪,但功能齐全。
    猜你喜欢
    • 1970-01-01
    • 2012-05-06
    • 2021-03-15
    • 2019-12-02
    • 1970-01-01
    • 1970-01-01
    • 2013-08-19
    • 2021-04-29
    • 2020-05-15
    相关资源
    最近更新 更多