$ _SERVER ['SERVER_NAME']返回someone-else-domain.com

时间:2014-12-20 19:00:00

标签: php apache dns virtualhost

问题: 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来解决这个问题。但首先我想知道我是否应该担心;)

1 个答案:

答案 0 :(得分:0)

在写作和研究的同时,我发现我可以解决这个问题。因为我已经写了这么多,我还是发布了这个问题,希望其他人发现它有用。

Apache2指令 UseCanonicalName On | Off | DNS

  

配置服务器如何确定自己的名称和端口。

http://httpd.apache.org/docs/2.2/mod/core.html#usecanonicalname

所以,如果我正确理解了手册,将UseCanonicalName On添加到虚拟主机配置中,并且所有这些都应该按预期工作。

也看到这个SO答案:https://stackoverflow.com/a/2297421/668598