【发布时间】:2014-12-20 19:00:00
【问题描述】:
问题: php 脚本在$_SERVER['SERVER_NAME'] 中返回someone-else-domain.com,但它应该返回foo.example.com。我没有配置该虚拟主机,也不是我的 dyndns/域。不知道怎么找原因。
当前状态:
我的 php 脚本在每个请求中保存 $_SERVER['SERVER_NAME'] 的值。我使用 SERVER_NAME 而不是 HTTP_HOST 因为,如果我正确理解 PHP 手册,这正是我所需要的:
SERVER_NAME: “当前脚本在其下执行的服务器主机的名称。如果脚本在虚拟主机上运行,这将是为该虚拟主机定义的值。”
apache2 服务器位于 debian7 机器上。我使用来自 freedns.afraid.org 的动态 dns 服务指向服务器 ip。下面, foo.example.com 当然不是我真正的服务器动态。我有 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
猫访问.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"
有人知道是什么原因造成的吗?我可以通过在我的脚本中添加主机白名单或拆分 PHP_SELF 来解决这个问题。但首先我想知道我是否应该担心;)
【问题讨论】:
标签: php apache dns virtualhost