问题: php脚本会在someone-else-domain.com
中返回$_SERVER['SERVER_NAME']
,但它应该返回foo.example.com
。我没有配置vhost,也不是我的dyndns / domain。我不知道如何找到原因。
当前状态:
我的php脚本会在每个请求中保存$_SERVER['SERVER_NAME']
的值。我使用SERVER_NAME
而不是HTTP_HOST
,因为如果我正确理解PHP手册,它就是我所需要的:
SERVER_NAME: "正在执行当前脚本的服务器主机的名称。如果脚本在虚拟主机上运行,则这将是为该虚拟主机定义的值。"
apache2服务器位于debian7盒子上。我使用freedns.afraid.org中的动态DNS服务指向服务器ip。下面,foo.example.com当然不是我服务器真正的dyndns。我有3个dyndns指向我的服务器ip:foo-,bar-和baz.example.com。下面是foo的配置。 bar和baz完全相同,除了域和路径。
保存SERVER_NAME的部分。我没假错:
$this->v['host'] = NULL;
if (isset($_SERVER['SERVER_NAME'])) {
$this->v['host'] = str_replace('www.', '', $_SERVER['SERVER_NAME']);
}
/etc/apache2/sites-enabled/foo.example.com
<VirtualHost *:80>
ServerAdmin webmaster@foo.example.com
ServerName foo.example.com
ServerAlias foo # to access from local network, less typing, more time to be lazy
ServerSignature Off
DocumentRoot /var/www/foo.example.com/public
<Directory />
Options -Indexes +FollowSymLinks
AllowOverride none
</Directory>
<Directory /var/www/foo.example.com/public>
Options -Indexes +FollowSymLinks +MultiViews
AllowOverride Options=Indexes
Order allow,deny
allow from all
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
LogLevel warn
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
/etc/apache2/ports.conf
NameVirtualHost *:80
Listen 80
cat access.log | grep someone-else-domain.com
1.2.3.4 - - [14/Dec/2014:20:11:41 +0100] "GET http://www.someone-else-domain.com/ HTTP/1.1" 200 1488 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:29.0) Gecko/20100101 Firefox/29.0"
1.2.3.5 - - [16/Dec/2014:00:16:14 +0100] "GET http://www.someone-else-domain.com/ HTTP/1.1" 200 1488 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:29.0) Gecko/20100101 Firefox/29.0"
1.2.3.6 - - [18/Dec/2014:01:48:19 +0100] "GET http://www.someone-else-domain.com/ HTTP/1.1" 200 2033 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:29.0) Gecko/20100101 Firefox/29.0"
1.2.3.7 - - [18/Dec/2014:12:18:05 +0100] "GET http://www.someone-else-domain.com/ HTTP/1.1" 200 2153 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:29.0) Gecko/20100101 Firefox/29.0"
1.2.3.8 - - [20/Dec/2014:00:24:23 +0100] "GET http://www.someone-else-domain.com/ HTTP/1.1" 200 2398 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:29.0) Gecko/20100101 Firefox/29.0"
有人知道可能导致这种情况的原因是什么?我可以通过向我的脚本添加hosts-whitelist或拆分PHP_SELF来解决这个问题。但首先我想知道我是否应该担心;)
答案 0 :(得分:0)
Apache2指令 UseCanonicalName On | Off | DNS :
配置服务器如何确定自己的名称和端口。
http://httpd.apache.org/docs/2.2/mod/core.html#usecanonicalname
所以,如果我正确理解了手册,将UseCanonicalName On
添加到虚拟主机配置中,并且所有这些都应该按预期工作。