$ _SERVER [‘SERVER_NAME’] возвращает somebody-else-domain.com

Проблема: PHP-скрипт возвращает someone-else-domain.com в $_SERVER['SERVER_NAME'], но он должен вернуться foo.example.com, я не настроил этот vhost и не мой dyndns / домен. не знаю, как найти причину этого.


Текущее состояние:

мой скрипт php сохраняет значение $_SERVER['SERVER_NAME'] на каждый запрос. я использую SERVER_NAME вместо HTTP_HOST потому что, если я правильно понял руководство по PHP, это именно то, что мне нужно:

НАЗВАНИЕ СЕРВЕРА:
«Имя хоста сервера, под которым выполняется текущий скрипт. Если скрипт выполняется на виртуальном хосте, это будет значение, определенное для этого виртуального хоста».

сервер apache2 находится на коробке debian7. Я использую динамический DNS-сервис от freedns.afraid.org, чтобы указать IP-адрес сервера. ниже foo.example.com, конечно, не мои настоящие динды для сервера. я получил 3 динда, указывающих на мой 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 [email protected]
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 somebody-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. но сначала я хочу знать, стоит ли мне волноваться;)

0

Решение

во время написания и исследования я обнаружил, что могу решить эту проблему. и так как я уже написал так много, я в любом случае отправляю вопрос, надеясь, что кто-то найдет его полезным.

Директива Apache2 UseCanonicalName On | Off | DNS:

настраивает, как сервер определяет свое собственное имя и порт.

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

так что, если я правильно понял руководство, добавив UseCanonicalName On к конфигурации виртуального хоста, и все должно работать как положено.

также см. этот так ответ: https://stackoverflow.com/a/2297421/668598

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]