<div dir="ltr">Так, я, видимо, не очень правильно описал проблему. Попробую еще раз:<div><br></div><div>- Есть домены:</div><div>domain1.tld</div><div>domain2.tld</div><div>domain3.tld</div><div><br></div><div>Сами главные домены хостятся где-то в другом, отличном от нашего сервера, месте. Для каждого из них есть wildcard SSL-сертификат.</div>
<div><br></div><div>На нашем сервере хостятся приложения, доступные по поддоменам этих доменов (app1.domain2.tld, app10.domain3.tld, etc). Для каждого приложения создан конфиг в sites-enabled с описанием сервера (где задается и нужный SSL-сертификат, в зависимости от того, в каком домене находится приложение). Доступны они только по SSL (по сертификату *.domain.tld). Но иногда приложения удаляются, а ссылки на них где-то живут. </div>
<div><br></div><div>Мне нужно каким-то образом реализовать возможность редиректить все запросы к адресам а-ля <a href="https://appX.domainX.tld/">https://appX.domainX.tld/</a>, в случае, если приложение уже не существует (т.е. сервер appX.domainX.tld не описан в конфиге nginx).</div>
<div><br></div><div>Пока домен был один - я эту проблему решал просто, определил в конфиге один сервер с признаком default и там уже в location / осуществлял редирект на нужный сайт. Все прекрасно работало.</div><div><br>
</div><div>А теперь сайтов стало три. В описании default-сервера я могу задать только одну пару сертификат:ключ, соответственно, те, кто придет по appX.domainX.tld (в случае, если домен отличается от того, чей сертификат прописан) в default-сервер получат в браузере ошибку (и не получат редирект).</div>
<div><br></div><div>Прописать для каждого из доменов сервер с server_name *.domainX.tld я тоже не могу, т.к. тогда туда пойдут не только запросы к несуществующим приложениям, а вообще ВСЕ запросы (т.е. в приложение никто не попадет).</div>
<div><br></div><div>Т.е. проблема моя не в том, что мне нужно иметь несколько SSL-сервисов на одном IP (это-то прекрасно работает, тут проблем нет), а в том, что мне нужно каким-то образом иметь несколько default-серверов с поддержкой SSL (либо иметь возможность задавать приоритеты серверам, чтобы запрос всегда попадал в более точный сервер (appX.domainX.tld), а не в wildcard *.domainX.tld).</div>
<div><br></div><div>Как мне из этой ситуации выйти?</div><div><br></div></div><div class="gmail_extra"><br><br><div class="gmail_quote">1 ноября 2013 г., 14:56 пользователь Igor Sysoev <span dir="ltr"><<a href="mailto:igor@sysoev.ru" target="_blank">igor@sysoev.ru</a>></span> написал:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="word-wrap:break-word"><a href="http://nginx.org/ru/docs/http/configuring_https_servers.html#name_based_https_servers" target="_blank">http://nginx.org/ru/docs/http/configuring_https_servers.html#name_based_https_servers</a><div>
<br><div>
<div style="word-wrap:break-word"><span style="text-indent:0px;letter-spacing:normal;font-variant:normal;text-align:-webkit-auto;font-style:normal;font-weight:normal;line-height:normal;border-collapse:separate;text-transform:none;font-size:medium;white-space:normal;font-family:Georgia;word-spacing:0px"><div style="word-wrap:break-word">
<span style="text-indent:0px;letter-spacing:normal;font-variant:normal;text-align:-webkit-auto;font-style:normal;font-weight:normal;line-height:normal;border-collapse:separate;text-transform:none;font-size:medium;white-space:normal;font-family:Georgia;word-spacing:0px"><div style="word-wrap:break-word">
<span style="text-indent:0px;letter-spacing:normal;font-variant:normal;text-align:-webkit-auto;font-style:normal;font-weight:normal;line-height:normal;border-collapse:separate;text-transform:none;font-size:medium;white-space:normal;font-family:Georgia;word-spacing:0px"><div style="word-wrap:break-word">
<span style="text-indent:0px;letter-spacing:normal;font-variant:normal;font-style:normal;font-weight:normal;line-height:normal;border-collapse:separate;text-transform:none;font-size:medium;white-space:normal;font-family:Georgia;word-spacing:0px"><br>
-- <br>Igor Sysoev<br></span></div><div style="word-wrap:break-word"><span style="text-indent:0px;letter-spacing:normal;font-variant:normal;font-style:normal;font-weight:normal;line-height:normal;border-collapse:separate;text-transform:none;font-size:medium;white-space:normal;font-family:Georgia;word-spacing:0px"><a href="http://nginx.com" target="_blank">http://nginx.com</a></span></div>
</span></div></span></div></span></div>
</div>
<br><div><div><div class="h5"><div>On Nov 1, 2013, at 11:12 , Nikita A Kardashin wrote:</div><br></div></div><blockquote type="cite"><div><div class="h5"><div dir="ltr">Всем привет,<div><br></div><div>Возникла задача:</div>
<div><br></div><div>- На один nginx ссылаются >1 домена, при этом, для каждого из них должен быть доступен SSL (есть сертификаты).</div><div>- Все запросы к несуществующим на сервере хостам должны попадать в некий хост по-умолчанию (и редиректиться оттуда rewrite-ом, но это частности).</div>
<div><br></div><div>Т.е, поступает запрос. Если есть сервер, для которого запрошенный хост прописан в server_name - отправляем его туда. Если нет - в сервер по-умолчанию для domain.tld, откуда его регулярка отправляет "по адресу" (на главный сайт в зависимости от запрошенного домена).</div>
<div><br></div><div>Классическая схема (сервера + один сервер с опцией default) прекрасно работала до тех пор, пока домен был один, а сейчас - не вариант, т.к. мы не можем прописать в сервере больше, чем 1 SSL-сертификат (в результате чего пользователь при обращении к несуществующему серверу по домену, отличному от первого вместо ожидаемого редиректа получает неожиданный FailedCertificateAlert от браузера и блокировку дальнейшего редиректа).</div>
<div><br></div><div>Если же создать сервер с server_name = *.domain.tld для каждого домена, то туда попадают все запросы, даже те, для которых есть отдельные server-ы. </div><div><br></div><div>Есть какой-то нормальный путь это обойти? Например, задавать приоритет серверу (тогда можно поставить минимальный умолчальному серверу и запрос таки будет улетать туда только тогда, когда более подходящих серверов нет). Или выбирать сертификат в зависимости от домена (по IF-у)?<br clear="all">
<div><br></div>-- <br>With best regards,<br>differentlocal (<a href="http://www.differentlocal.ru/" target="_blank">www.differentlocal.ru</a> | <a href="mailto:differentlocal@gmail.com" target="_blank">differentlocal@gmail.com</a>),<br>
System administrator.
</div></div></div></div>
_______________________________________________<br>nginx-ru mailing list<br><a href="mailto:nginx-ru@nginx.org" target="_blank">nginx-ru@nginx.org</a><br><a href="http://mailman.nginx.org/mailman/listinfo/nginx-ru" target="_blank">http://mailman.nginx.org/mailman/listinfo/nginx-ru</a></blockquote>
</div><br></div></div><br>_______________________________________________<br>
nginx-ru mailing list<br>
<a href="mailto:nginx-ru@nginx.org">nginx-ru@nginx.org</a><br>
<a href="http://mailman.nginx.org/mailman/listinfo/nginx-ru" target="_blank">http://mailman.nginx.org/mailman/listinfo/nginx-ru</a><br></blockquote></div><br><br clear="all"><div><br></div>-- <br>With best regards,<br>differentlocal (<a href="http://www.differentlocal.ru">www.differentlocal.ru</a> | <a href="mailto:differentlocal@gmail.com">differentlocal@gmail.com</a>),<br>
System administrator.
</div>