Я использовал DNS-запись с подстановочными знаками CNAME, например:
@ IN A ip.add.re.ss
www IN CNAME @
* IN CNAME @
Мои корневой домен domain.com и sub1.domain.com доступны (в одной и той же капле digitalocean).
Но если я попытаюсь получить доступ к sub2.domain.com, после настройки веб-сервера, он перейдет на sub1.domain.com.
Я использую серверные блоки NginX, и все домены используют один и тот же IP-адрес. (Я настроил domain.com на 80, пока я получаю доступ / настраиваю такие подсистемы, как sub1.domain.com:8088 и sub2.domain.com:8088)
sub1 - это phpmyadmin:
server {
listen 8088;
server_name phpmyadmin.mydomain.com;
root /usr/share/nginx/html/phpmyadmin;
index index.php index.html index.htm;
access_log /var/log/nginx/phpmyadmin/access.log;
error_log /var/log/nginx/phpmyadmin/error.log;
if (!-e $request_filename) {
rewrite ^/(.+)$ /index.php?url=$1 last;
break;
}
# Images and static content is treated different
location ~* ^.+.(jpg|jpeg|gif|css|png|js|ico|xml)$ {
access_log off;
expires 360d;
}
location ~ /\.ht {
deny all;
}
location ~ /(libraries|setup/frames|setup/libs) {
deny all;
return 404;
}
location ~ \.php$ {
try_files $uri =404;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
include /etc/nginx/fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
}
sub2 - это статистика:
server {
listen 8088;
server_name stats.mydomain.com;
root /usr/share/nginx/html/piwik;
index index.php piwik.php;
access_log /var/log/nginx/piwik/access.log;
error_log /var/log/nginx/piwik/error.log;
location ~ /\.ht {
deny all;
}
location ~ \.php$ {
try_files $uri =404;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
include /etc/nginx/fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
}
Мои / etc / hosts:
127.0.0.1 localhost mydomain
::1 ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
Нажатие в браузере phpmyadmin.mydomain.com:8088 работает нормально, но нажатие stats.mydomain.com:8088 переводит меня на страницу входа phpmyadmin. Нужно ли мне создавать больше записей A или CNAME для нескольких поддоменов?
Если вы перезагрузили конфигурацию (nginx -s reload
) и ничего не изменилось, то подозреваю, что некоторые default_server
уловка. Давайте посмотрим на документация.
nginx проверяет только поле заголовка запроса «Хост», чтобы определить, на какой сервер должен быть направлен запрос. Если его значение не соответствует ни одному имени сервера или запрос вообще не содержит этого поля заголовка, то nginx направит запрос на сервер по умолчанию для этого порта.
По сути, это означает, что если нет server{}
предоставляет дескриптор вашего запроса, он будет передан на сервер по умолчанию. Поскольку вы явно не установили его ...
В приведенной выше конфигурации [см. Пример в документации] сервер по умолчанию является первым, что является стандартным поведением nginx по умолчанию.
В вашем случае «первый сервер» - это phpMyAdmin, поскольку «p» стоит перед «s» (статистика) в алфавите. Что происходит:
stats.mydomain.com
.server{}
block не предоставляет никакого блока местоположения, соответствующего вашему URI.Оттуда :
Из-за следующей конфигурации ...
if (!-e $request_filename) {}
... phpMyAdmin server{}
способен обрабатывать любой запрос, поскольку он перезаписывает все неправильные запросы как index.php
Запросы. Вы будете перенаправлены на страницу входа, потому что это страница phpMyAdmin по умолчанию, когда она не может обрабатывать $_GET['url']
параметр.
Чтобы подтвердить теорию, просто добавьте default_server
к порту прослушивания в вашей конфигурации статистики:
listen 8088 default_server;
Если поведение изменится, то будешь в этом уверен. Следующий шаг - это изучение журналов. Возможно, ваша конфигурация статистики не соответствует вашей реальной структуре каталогов, вызывая ошибку 404 или 403 (которая сначала привела к перенаправлению запроса на phpMyAdmin, сервер по умолчанию).