【问题标题】:Apache2 API (or another webserver) for mod_php or PHP用于 mod_php 或 PHP 的 Apache2 API(或其他网络服务器)
【发布时间】:2012-09-09 23:18:21
【问题描述】:

我正在寻找一种方法来使用 API 来操作 PHP 在其下运行的网络服务器。

例如,我希望能够动态添加 mod 重写规则或阻止某些路径的 IP 地址,所有这些都无需接触 .htaccess 文件。

PHP 是否存在类似this 的内容?

【问题讨论】:

  • 为什么不用.htaccess 文件?每次进行更改时都必须重新启动服务器,但我想如果不经常修改配置就可以了。
  • @ShaquinTrifonoff 并非如此,Apache2 会定期检查 .htaccess 文件的更改并重新编译它们。确实不会立即检测到更改,但会在几秒钟内检测到它们。不使用 .htaccess 文件的一个原因是更难检测和回滚错误(回滚很容易,删除,重新创建;检测更难)。
  • 我说的是服务器配置 (httpd.conf),因为你必须重新启动服务器。
  • 我在想/希望通过 API 对(内存中的)配置进行动态更改。
  • 我不认为有类似的东西,不幸的是必须使用.htaccess文件。

标签: php api apache2 webserver


【解决方案1】:

PHP 无法动态更改 Apache 的配置,尽管如您所述,您可以使用 PHP 编辑配置或 .htaccess 文件重新加载配置。但我认为让您的 web 应用程序对 web 服务器具有如此大的权力会带来很大的安全风险。

您可以使用mod_rewrite's RewriteMap directive 动态阻止 IP 的示例。基本上,您将为您的网站编写一个 mod_rewrite 规则,该规则将指示 mod_rewrite 查看您的 PHP 脚本可以维护的外部数据源。

mod_rewrite 文档有一个示例从:Denying Hosts in a Blacklist

说明:
我们希望维护一个主机黑名单,就像 hosts.deny 一样,
并阻止这些主机访问我们的服务器。

解决方案:
重写引擎开启
RewriteMap hosts-deny txt:/path/to/hosts.deny
RewriteCond ${hosts-deny:%{REMOTE_ADDR}|NOT-FOUND} !=NOT-FOUND [OR]
RewriteCond ${hosts-deny:%{REMOTE_HOST}|NOT-FOUND} !=NOT-FOUND
重写规则 ^ - [F]
##
## hosts.deny
##
## 注意力!这是一个地图,而不是一个列表,即使我们这样对待它也是如此。
## mod_rewrite 解析它的键/值对,所以至少一个
## 虚拟值“-”必须存在于每个条目中。
##

193.102.180.41 -
bsdti1.sdm.de -
192.76.162.40 -

讨论:
第二个 RewriteCond 假设您打开了 HostNameLookups,
以便解析客户端 IP 地址。如果不是这样的话,
您应该删除第二个 RewriteCond,然后将 [OR] 标志从
第一个 RewriteCond。

您的 PHP 脚本可以维护这些文本文件(也可以使用其他数据存储),并且您可以根据您的特定需求创建任意数量的规则集来动态控制访问。这行得通吗?

【讨论】:

  • 我认为这看起来是正确的看待它的方式。通常,您希望获得想要动态更改的功能在 Apache 之外以及您可以控制它的某个地方。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-01-31
  • 2011-10-03
  • 2013-05-01
  • 2017-08-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多