LINUX.ORG.RU

nginx показывает отключенный сайт

 


0

1

Одна виртуальная машина. Обычная связка nginx + apache на debian wheezy. Кроме того, есть Lightstreamer. Две копии сайта, для доменов .com и .ru Папки с сайтами раздельные. Входящие принимает nginx и дальше отправляет на апач. Потребовалось оставить только .com версию. Соответственно, в enabled удалил линк на сайт .ru Естественно, перепустил. И нифига. Целиком виртуалку перепускал. Сайт на .ru как открывался - так и открывается. Только теперь пишет ошибку «ER setDomain the domain set is inconsistent with the hostname used». Полная остановка nginx приводит к недоступности всех сайтов, что характерно. Какого *цензура* он показывает отключенный сайт? Нет в оставшемся .com никаких ссылок на .ru. Куда копать? Поиск ничего внятного не говорит.

★★★★★

Копать в сторону default vhost.

TL;DR: добавь

server {
    server_name example.ru;
    return 410;
}
И будет тебе счастье.

beastie ★★★★★ ()

Всё-таки интересно, почему оно вообще показывало отключенный сайт?

targitaj ★★★★★ ()
Ответ на: комментарий от targitaj

Потому что, если не найден нужный vhost, срабатывает default vhost (или тот, что идёт в конфиге первым или тот что помечен default_server).

beastie ★★★★★ ()
Ответ на: комментарий от beastie

default_server

grep default_server /etc/nginx/ -R
/etc/nginx/sites-available/default: #listen [::]:80 default_server ipv6only=on; ## listen for ipv6

этот конфиг выключен. Включены были только два целевых сайта. Один был выключен. Сейчас там заглушка.

targitaj ★★★★★ ()

Оффтопик, но гуглить немного лень, зачем с nginx перенаправлять на apache ? Я без задней мысли спрашиваю, просто с вебом как-то редко сталкиваюсь, а тут прям интересно стало.

Dred ★★★★★ ()
Ответ на: комментарий от Dred

зачем с nginx перенаправлять на apache ?

Например: статика - nginx, динамика - apache.

shrub ★★★★★ ()
Ответ на: комментарий от targitaj

Дело не во включен/выключен, а в том, какой vhost первый. Точнее даже там играет роль алфавитный порядок конфигурационных файлов.

beastie ★★★★★ ()
Ответ на: комментарий от shrub

Например: статика - nginx, динамика - apache

динамика apache - это что, например?

я так понимаю, суть вопроса в том, зачем нужен апач как промежуточное звено между nginx и, например, пыхом, если можно их подключить напрямую

MyTrooName ★★★★★ ()

Мне объяснили.

proxy_pass http://localhost:1080/;

пропускает вообще всё и пофиг на доменное имя. Надо править.

targitaj ★★★★★ ()
Ответ на: комментарий от Dred

зачем с nginx перенаправлять на apache ?

Потому что предполагается, что разнесено территориально.

targitaj ★★★★★ ()
Последнее исправление: targitaj (всего исправлений: 1)
Ответ на: комментарий от shrub

разе nginx со статикой не справляется ? просто ни разу их вместе не держал, но то и дело натыкаюсь на подобные вещи

Dred ★★★★★ ()
Последнее исправление: Dred (всего исправлений: 2)
Ответ на: комментарий от Dred

Кроме сайта в домене может быть множество других служб. Личный кабинет. CRM. Веб-морда почты. Какая-нибудь еще хрень, которая создаётся по запросу с данными из базы данных, которой не место на машине с сайтом. Раскидываешь службы где надо, а в nginx указываешь куда идти. Кроме того, с https проще получается. Удобно.

targitaj ★★★★★ ()
Ответ на: комментарий от MyTrooName

динамика apache - это что, например?

Что-нибудь, использующее mod_python, mod_rails и т.п.

я так понимаю, суть вопроса в том, зачем нужен апач как промежуточное звено между nginx и, например, пыхом

Нет, вы не правильно понимаете. Вопрос был:

зачем с nginx перенаправлять на apache ?

Про PHP не было никакого упоминания.

shrub ★★★★★ ()
Ответ на: комментарий от beastie

Что-то тебе не то объяснили. ;)

Я проверил. Вбил локально в hosts говно на нужный ip, сходил в браузере на это говно и получил тот же результат. Что означает, что на это говно сработало proxy_pass. Осталось понять почему оно срабатывает и как вообще доходит до proxy_pass, если оно вбито в конфиге с конретным доменом.

targitaj ★★★★★ ()
Ответ на: комментарий от Dred

разе nginx со статикой не справляется ?

Он её молотит на ура. Разве я написал обратное? :)

shrub ★★★★★ ()
Ответ на: комментарий от shrub

Он её молотит на ура. Разве я написал обратное? :)

это я не то написал, динамику имел ввиду

Dred ★★★★★ ()
Ответ на: комментарий от beastie

ты об этом?

Потому что, если не найден нужный vhost, срабатывает default vhost (или тот, что идёт в конфиге первым или тот что помечен default_server).

Но у меня нет задействованных конфигов с default vhost и default_server.

targitaj ★★★★★ ()
Ответ на: комментарий от targitaj

Раскидываешь службы где надо

ох, у меня подобное обычно в рамках одной машины, разве что БД выношу обычно, но ею уже скрипты занимаются а не веб-сервер

Кстати, а для подобного нельзя использовать связку из разных nginx-ов ?

Dred ★★★★★ ()
Ответ на: комментарий от Dred

Кстати, а для подобного нельзя использовать связку из разных nginx-ов ?

apache - это образно. Там и томкет есть. Кроме того, если не ошибаюсь, при такой схеме клиент не знает где на самом деле находятся сервисы. Ведь клиент ходит до входной точки, а до конечной точки ходит уже сама входная точка. Плюс можно ограничить доступ к конечной точке счетным количеством разрешенных хостов. Тупо на уровне iptables. И пускай ломают на здоровье...

targitaj ★★★★★ ()
Ответ на: комментарий от targitaj

Этой директивой можно поменять порядок. Но она не обязательна. Ещё раз — порядок играет роль (алфавитный порядок файлов в sites-enabled).

Если нужного server_name не найдено — срабатывает первый (или тот, где есть флаг default_server, если такой флаг есть).

beastie ★★★★★ ()
Последнее исправление: beastie (всего исправлений: 2)
Ответ на: комментарий от beastie

Этой директивой можно поменять порядок. Но она не обязательна. Ещё раз — порядок играет роль (алфавитный порядок файлов в sites-enabled).

Было два. Один убил. Остался один. В алфавитном порядке один файл вроде всегда первый?

targitaj ★★★★★ ()
Ответ на: комментарий от Dred

динамику имел ввиду

nginx не всё может на бекенде, поэтому для некоторых работ и нужно что-то типа apache2

Как выше написали, кто-то не осилил php-fpm, кто-то wsgi. А кто-то просто не хочет ковырять легаси-код, работает и ладно. Всякое бывает.

shrub ★★★★★ ()
Последнее исправление: shrub (всего исправлений: 2)
Ответ на: комментарий от beastie

Если нужного server_name не найдено — срабатывает первый (или тот, где есть флаг default_server, если такой флаг есть).

Похоже, так и есть. Хрень какая-то. Почему так? Почему срабатывают НЕ указанные домены? Зачем? Получается, если все доменные имена в Сети перебить на этот ip, то будет открываться единственный указанный на этом хосте сайт. В ответ на любое доменное имя. Бред какой-то. Как это выключить?

targitaj ★★★★★ ()
Ответ на: комментарий от targitaj

вот, тут я уже понимаю, хех. Но все равно спасибо за разъяснение.

Dred ★★★★★ ()
Ответ на: комментарий от shrub

эх, а я как дурак uwsgi использую во все поля. Но потому что не в продакшен наверное.

Dred ★★★★★ ()
Ответ на: комментарий от targitaj

Потому что так работает vhost-ing. И в apache это так же.

beastie ★★★★★ ()
Ответ на: комментарий от beastie

Ок, ткни плиз что почитать.
Проверил на апаче - точно, такая же штука. Ясно, буду курить доки.
Случайно эту особенность работы vhosts не применяют для атак? Берешь целевой ip, пробиваешь у себя локально в резолв на этот ip полную лажу и идёшь по этой лаже. В результате открывается первый виртуальный домен. Если откроется, конечно. Ну круто. Нахрена было так делать-то вообще? Идиотское умолчание, совершенно идиотское.

targitaj ★★★★★ ()
Последнее исправление: targitaj (всего исправлений: 2)
Ответ на: комментарий от Dred

эх, а я как дурак uwsgi использую во все поля. Но потому что не в продакшен наверное.

Ты не поверишь, но я ожидал что MyTrooName мне напишет, что он использует php-fpm во все поля. Но получилось так как получилось.

shrub ★★★★★ ()
Ответ на: комментарий от targitaj

Ничего страшного. По аналогии с firewall создаёшь catch-all vhost.

server {
     listen 80 default_server;
     server_name _;
     return 410;
}

server {
     listen 80;
     server_name a.example.ru;
     # ...
}

server {
     listen 80;
     server_name b.example.ru;
     # ...
}
beastie ★★★★★ ()
Ответ на: комментарий от targitaj

Идиотское умолчание, совершенно идиотское

Вот такая вот обратная совместимость с конфигурацией без vhost-ов - «кто первый встал, того и тапки»

идею с catch-all vhost - плюсую

Pinkbyte ★★★★★ ()
Ответ на: комментарий от MyTrooName

динамика apache - это что, например?

километры кривых Rewrite'ов, которые никто не может переписать

Yustas ★★★ ()
Ответ на: комментарий от beastie

catch-all vhost.

напиши плиз вариант для apache. На nginx сделал, спасибо.

targitaj ★★★★★ ()
Ответ на: комментарий от beastie

<VirtualHost *:80>
ServerName null
ServerAlias *
Redirect 404 /
</VirtualHost>

так норм будет?

targitaj ★★★★★ ()
Ответ на: комментарий от targitaj

Так, вот так делать не надо. Оно ловит вообще всё. Точнее, это надо ставить последней записью.

targitaj ★★★★★ ()
Последнее исправление: targitaj (всего исправлений: 1)
Ответ на: комментарий от targitaj

Да, если мне не изменяет склероз, в апаче ловит последний.

beastie ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.