Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache是否向PHP传递端口(:80)是否被显式请求?_Php_Apache_Apache2_Newrelic - Fatal编程技术网

Apache是否向PHP传递端口(:80)是否被显式请求?

Apache是否向PHP传递端口(:80)是否被显式请求?,php,apache,apache2,newrelic,Php,Apache,Apache2,Newrelic,无论资源是通过mydomain.com还是mydomain.com:80(这是一些机器人/蜘蛛发出请求的方式):HTTP\u HOST始终显示为“mydomain.com”,PHP无法知道请求是否包含:80(2)。这让我相信,无论是否指定了端口,Apache都会将完全相同的请求传递给PHP(这是有意义的) 问题是:我在这台机器上安装了NewRelic PHP代理,它通过mydomain.com和mydomain.com:80向NewRelic服务报告。这两个应用程序是同一个应用程序,在NewRe

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

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

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

2) 无论是否显式调用,服务器_端口始终为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

HTTP_HOST
实际上就是您正在访问的站点的主机名,例如www.example.com。如果您想要请求进入的端口号,那么有
$\u SERVER['SERVER\u port']

浏览器,当请求的端口为标准端口(端口80)时,curl将从主机头中删除:80。因为我没有使用手动发布的GET进行测试,所以我不知道$\u服务器['HTTP\u HOST']如何包含端口号当端口包含在主机头中时,我发现确实如此(这是有意义的,因为指定$\u服务器['HTTP\u Host']是“主机的内容:来自当前请求的头(如果有)。)

声明如果端口#不是默认端口80,则应将其包括在请求中但当使用的端口是默认端口时,它没有说明是否可以包含端口号。

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

如果您需要亲自查看,则需要发出手动GET请求。使用Netcat或Telnet发送以下命令:

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

(在末尾添加两个CRLF)

是,但设置应用程序名称的代码不使用服务器端口。我把问题的措辞改得更具体一些。Apache是否向PHP传递端口(:80)是否被显式请求?是。这就是
SERVER\u PORT
的用途-处理请求的端口。无论是否显式调用,端口始终为80,因此这没有帮助。这是正常的,因为HTTP默认为端口80.0。因此,服务器端口的值根本没有帮助。无论:80是否明确包含在请求中,都是一样的。我希望这一点现在已经足够清楚了。谢谢你的帮助。