Welcome! Log In Create A New Profile

Advanced

Re: if ($host != $server name) и несколько доменов в server name

Gena Makhomed
September 03, 2015 11:00AM
On 03.09.2015 16:40, azverev wrote:

> Имеется серве на котором висят сайты one.com и www.two.com test.two.com
> admin.two.com *.two.com
> one.com доступен по 80
> *.two.com доступен только по 443 (с 80 идёт редирект на 443)
>
> Часть клиентов иногда заходит на one.com по 443 и попадают не туда (их
> запрос попадает на https://two.com:443/).
>
> Я прописал в конфиге второго сайта if
>
> if ($host != $server_name) { rewrite ^ http://$host$request_uri? redirect;
> }
>
> Но if как-то странно отрабатывается, он проверяет $host только с первым
> доменом в списке $server_name
>
> То есть когда запрос приходит на admin.two.com то его редиректит на http, а
> такого быть не должно.
>
> Подскажите, где я ошибся.
> По логике, я хотел все запросы, которые приходят на сайт c ssl и не
> совпадают с доменами из server_name редиректить на http://$host/
>
> ps Такая схема ( if ($host != $server_name) { rewrite ^
> http://$host$request_uri? redirect; } ) удачно работает на нескольких
> серверах, но там везде один домен в server_name.

Самый правильный вариант все HTTP-only HTTPS-only сайты
разнести по двум разным IP, тогда все будет работать как надо,
а при попытке зайти на HTTP-only сайт по 443 порту будет
просто ошибка подключения (никто на тому порту не слушает).

Альтернативный вариант - сделать default_server для HTTPS,
куда прописать редирект:

server {
listen 1.2.3.4:443 default_server backlog=1024 ssl spdy;

ssl_certificate /etc/tls/.../site.com.crt;
ssl_certificate_key /etc/tls/.../site.com.key;

return 301 http://$host$request_uri;
}

server {
listen 1.2.3.4:443 ssl spdy;

ssl_certificate /etc/tls/.../site.com.crt;
ssl_certificate_key /etc/tls/.../site.com.key;

server_name www.two.com *.two.com;

// ...
}

Если хочется делать через if - тогда надо явно проверять
с каждым именем хоста, отдельными конструкциями if.

Но конструкции if ($host != ... ) или if ($host = ... )
- это ошибка, вместо них всегда имеет смысл использовать
отдельные блоки server { server_name ... }

--
Best regards,
Gena

_______________________________________________
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru
Subject Author Posted

Re: if ($host != $server name) и несколько доменов в server name

Gena Makhomed September 03, 2015 11:00AM

Re: if ($host != $server name) и несколько доменов в server name

azverev September 03, 2015 11:10AM



Sorry, only registered users may post in this forum.

Click here to login

Online Users

Guests: 208
Record Number of Users: 8 on April 13, 2023
Record Number of Guests: 421 on December 02, 2018
Powered by nginx      Powered by FreeBSD      PHP Powered      Powered by MariaDB      ipv6 ready