Назад | Перейти на главную страницу

Nginx, второй поддомен не работает

Я использовал 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.
  • nginx перенаправляет запрос на сервер по умолчанию, то есть phpMyAdmin

Оттуда :

  • phpMyAdmin может обработать запрос, или ...
  • это невозможно, что приводит к ошибке 404 или 403.

Из-за следующей конфигурации ...

if (!-e $request_filename) {}

... phpMyAdmin server{} способен обрабатывать любой запрос, поскольку он перезаписывает все неправильные запросы как index.php Запросы. Вы будете перенаправлены на страницу входа, потому что это страница phpMyAdmin по умолчанию, когда она не может обрабатывать $_GET['url'] параметр.

Чтобы подтвердить теорию, просто добавьте default_server к порту прослушивания в вашей конфигурации статистики:

listen 8088 default_server;

Если поведение изменится, то будешь в этом уверен. Следующий шаг - это изучение журналов. Возможно, ваша конфигурация статистики не соответствует вашей реальной структуре каталогов, вызывая ошибку 404 или 403 (которая сначала привела к перенаправлению запроса на phpMyAdmin, сервер по умолчанию).