【问题标题】:How can I access Unique ID in apache?如何访问 apache 中的唯一 ID?
【发布时间】:2014-05-20 17:14:52
【问题描述】:

如何访问 apache 为每个请求跟踪的 unique_id?我想在它调用的任何 php 脚本中跟踪它,并为每个请求记录它。

我从http.conf 文件中删除了对以下行的评论:

LoadModule unique_id_module libexec/apache2/mod_unique_id.so

我正在尝试在这个简单的 php 脚本中引用 ID:

<?php

print("Hello world\n");
print($_SERVER['UNIQUE_ID']);
?>

然而这个脚本只返回Hello World

这可能吗?如果这有什么不同,我正在运行 macos。

$_SERVER 的 var_dump 如下:

array(29) { ["HTTP_HOST"]=> string(9) "localhost" 
["HTTP_CONNECTION"]=> string(10) "keep-alive" 
["HTTP_CACHE_CONTROL"]=> string(9) "max-age=0" 
["HTTP_ACCEPT"]=> string(74) "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8" ["HTTP_USER_AGENT"]=> string(120) "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.117 Safari/537.36" ["HTTP_ACCEPT_ENCODING"]=> string(17) "gzip,deflate,sdch" 
["HTTP_ACCEPT_LANGUAGE"]=> string(14) "en-US,en;q=0.8" 
["HTTP_COOKIE"]=> string(11) "undefined=0" 
["PATH"]=> string(186) "/opt/local/bin:/opt/local/sbin:/opt/local/bin:/opt/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/opt/X11/bin:/opt/local/lib/postgresql84/bin:/Applications/XAMPP/xamppfiles/bin" 
["SERVER_SIGNATURE"]=> string(0) "" 
    ["SERVER_SOFTWARE"]=> string(67) "Apache/2.2.24 (Unix) DAV/2 PHP/5.3.26 mod_ssl/2.2.24 OpenSSL/0.9.8y" 
    ["SERVER_NAME"]=> string(9) "localhost" 
    ["SERVER_ADDR"]=> string(3) "::1" 
    ["SERVER_PORT"]=> string(2) "80" 
    ["REMOTE_ADDR"]=> string(3) "::1" 
    ["DOCUMENT_ROOT"]=> string(28) "/Library/WebServer/Documents" 
    ["SERVER_ADMIN"]=> string(15) "you@example.com" 
    ["SCRIPT_FILENAME"]=> string(35) "/Library/WebServer/Documents/id.php" 
    ["REMOTE_PORT"]=> string(5) "49669" 
    ["GATEWAY_INTERFACE"]=> string(7) "CGI/1.1" 
    ["SERVER_PROTOCOL"]=> string(8) "HTTP/1.1" 
    ["REQUEST_METHOD"]=> string(3) "GET" 
    ["QUERY_STRING"]=> string(0) "" 
    ["REQUEST_URI"]=> string(7) "/id.php" 
    ["SCRIPT_NAME"]=> string(7) "/id.php" 
    ["PHP_SELF"]=> string(7) "/id.php" 
    ["REQUEST_TIME"]=> int(1397681759) 
    ["argv"]=> array(0) { } 
    ["argc"]=> int(0) }

我在同一领域遇到的另一个问题可能指向手头的问题:https://apple.stackexchange.com/questions/127801/where-are-the-apache-config-files-stored?noredirect=1#comment149749_127801

【问题讨论】:

  • 你重启apache了吗?
  • 是的,已经重启了。我做了一个sudo /usr/sbin/apachectl restart
  • var_dump($_SERVER) 看看你必须使用什么
  • 添加了 $_SERVER 的 var_dump
  • 显然模块没有加载。你能确认libexec/apache2/mod_unique_id.so 存在吗?重启后 apache 日志会显示什么内容?

标签: php macos apache audit


【解决方案1】:

正如 bounty cmets 中所述,在 OS X 上,配置文件存在一些问题。 例如,在 OS X 10.7 上,我在 httpd.conf 中成功启用了 mod_unique_id,如果我通过 Preference Pane - Web Sharing 重新启动,一切都按预期工作,但如果我通过 apachectl 命令重新启动,则会出现一些奇怪的问题。

在 OS X 10.9 中,首选项窗格中没有 Web 共享,因此我的建议是坚持使用 PHP 的唯一 ID 生成器,例如,这些功能可能会有所帮助: http://www.php.net/manual/en/function.uniqid.phphttp://www.php.net/manual/en/function.openssl-random-pseudo-bytes.php

【讨论】:

  • 我没有关注如何使用 PHP 的唯一 ID 生成器来代替 apache Unique_ID。来自 apache 的 Unique_ID 基于 WEB REQUEST。在 php 中生成一个唯一 ID 会给我一个唯一 ID,但它不会将该脚本链接回来自 Apache 的原始调用。
  • 我运行的是 10.8,但那里的首选项窗格中也没有网络共享...
  • Apache 的 mod_unique_id 将在每次调用脚本时生成唯一 ID。您可以使用这些 PHP 函数获得相同的行为,简单地在脚本顶部的某处生成唯一 ID,并以与通过 _SERVER["UNIQUE_ID"] 使用它相同的方式使用它。
  • 我了解 PHP 唯一 ID 将是唯一 ID,但我想要与 Apache 关联的唯一 ID。 Apache unique_ID 与 apache、request 相关联,对吗?因此,如果我的理解是正确的,Apache 字段将生成一个 Unqiue_ID 的单个 HTTP 请求。如果该请求调用多个 php 脚本,所有这些调用(形成相同的请求)将引用相同的 Apache Unique_ID。因此,PHP 唯一 ID 不是我要寻找的 - 提示 php 脚本的 apache 调用的 ID。
  • 我正在尝试为每个请求在 apache 和 php 之间建立审计跟踪。因此,如果我只有在 php 中创建的唯一 id,我如何使用它来破译 apache 是如何调用该脚本的?
【解决方案2】:

在我全新安装的 OS X 10.9.2 中,我在 /etc/apache2/httpd.conf 中启用了 unique_id_module 和 php5_module,使用 sudo apachectl restart 重新启动 Web 服务器,它工作正常。

我在执行 apachectl -M | sort 时列出了 unique_id_module,并且在 PHP 脚本中也得到了 _SERVER["UNIQUE_ID"]

像这样的脚本:

<?php
echo $_SERVER["UNIQUE_ID"];
?>

我有这样的输出:

U08ZosCoAAMAAC9CATgAAAAA

【讨论】:

  • 我已经做到了,没有骰子。您是否在我的其他堆栈问题(RE:apache 配置文件)中看到了这个问题? apple.stackexchange.com/questions/127801/…
  • 我已在另一台 OS X 10.9.2 机器上完成此操作,并且再次正常工作
【解决方案3】:

创建一个包含以下文本的 phpinfo.php 脚本:

<?php
phpinfo();
?>

之后 - 在浏览器中打开它并查看 unique_id_module 是否列为“已加载”。

【讨论】:

    【解决方案4】:

    正如module documentation中所说:

    环境变量 UNIQUE_ID 设置为每个请求的标识符

    尝试用getenv('UNIQUE_ID')代替$_SERVER['UNIQUE_ID'],不一样

    【讨论】:

      【解决方案5】:

      我必须先执行/usr/sbin/httpd -k stop,然后执行/usr/sbin/httpd -k start 才能获取配置。不确定为什么 sudo apachectl restart 看起来像是在重新启动,但实际上不是......

      【讨论】:

        【解决方案6】:
        a2enmod unique_id
        

        重新启动 Apache 后,这对我有用。将 %{UNIQUE_ID}e 与自定义 LogFormat 一起使用时,我得到了一个连字符。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2020-05-23
          • 2016-02-12
          • 2023-04-06
          • 2012-09-11
          • 2021-12-09
          • 1970-01-01
          • 2014-09-19
          • 1970-01-01
          相关资源
          最近更新 更多