【问题标题】:Does Apache pass to PHP whether the port (:80) was explicitly requested?Apache 是否将端口 (:80) 明确请求传递给 PHP?
【发布时间】:2013-10-01 18:47:37
【问题描述】:

无论是通过mydomain.com 还是mydomain.com:80(这是一些机器人/蜘蛛发出请求的方式)请求资源都没有关系:HTTP_HOST 始终显示为“mydomain.com”,PHP 没有办法了解请求是否包含:80 (2)。这让我相信,无论是否指定了端口,Apache 都会将完全相同的请求传递给 PHP(这是有道理的)。

问题:我在这台机器上安装了 NewRelic PHP 代理,它通过 PHP auto_prepend_file used to name the applications separately(1)、mydomain.commydomain.com:80 向 NewRelic 服务报告。这两个是同一个应用程序在NewRelic控制面板中以两个不同的名称显示,这是不可取的。由于应用程序名称是通过PHP设置的,mydomain.com:80怎么可能传递给NewRelic API时设置名称的代码甚至看不到请求是否明确定义:80? NewRelic 支持告诉我 我的代码 正在将 :80 传递给他们的 API,这是不可能的 (2)。 无论端口 (:80) 是否被明确请求,Apache 都会传递给 PHP 吗?

1) 如果我不使用此文件,服务器上的每个虚拟主机都将使用相同的通用“PHP 应用程序”名称进行报告

2) SERVER_PORT 将始终为 80,无论是否显式调用(当然,除非它是 https 或非标准端口请求,这不是这里讨论的内容)。换句话说,我不能使用 SERVER_PORT 来过滤明确定义了端口的请求,因为请求是否有明确定义的端口对 PHP 是不可见的。

Apache 2.2.15、mod_fcgid 2.3.7、PHP 5.3.3、Linux 2.6.32.60-40 x64、CentOS 6.4

【问题讨论】:

    标签: php apache apache2 newrelic


    【解决方案1】:

    HTTP_HOST 实际上只是主机名,例如www.example.com,您正在访问的网站。如果你想要请求进入的端口号,那么有$_SERVER['SERVER_PORT']

    【讨论】:

    • 是的,但是设置应用名称的代码不使用 SERVER_PORT。我已将问题改写为更具体。 Apache 是否将端口 (:80) 明确请求传递给 PHP?
    • 是的。这就是 SERVER_PORT 的用途 - 正在处理的请求所在的端口。
    • 无论是否显式调用,端口始终为 80,因此无济于事。
    • 这很正常,因为 HTTP 默认是 80 端口。
    • 完全正确。所以 SERVER_PORT 的值根本没有帮助。无论 :80 是否明确包含在请求中,它总是相同的。我希望现在已经足够清楚了。谢谢你的帮助。
    【解决方案2】:

    当请求的端口是标准端口(端口 80)时,浏览器和 curl 将从主机标头中删除 :80。由于我没有使用手动发出的 GET 进行测试,我没有看到 $_SERVER['HTTP_HOST'] 怎么可能包含端口号。 我发现确实如此,当端口包含在主机标头中时(这是有道理的,因为 manual 指定 $_SERVER['HTTP_HOST'] 是“主机的内容: 当前请求的标头,如果有的话。")

    Section 14.23 of the HTTP spec 声明如果端口号不是默认端口 80,则应在请求中包含端口号。但它没有说明在使用的端口 IS 时是否可以包含端口号默认。

    在我的例子中,包含端口号的请求,即使使用默认端口,也来自Baidu Spider

    如果您需要自己查看此内容,则需要发出手动 GET 请求。使用 Netcat 或 Telnet 发送这些命令:

    $ telnet www.host.com 80
    GET /host.php HTTP/1.1
    Host: www.host.com:80
    Connection: close
    

    (在末尾添加两个 CRLF)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-06-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-12
      • 2017-02-10
      • 1970-01-01
      相关资源
      最近更新 更多