Как сделать два вложенных условия в map или if
Anton Kuznetsov
maybe на arjlover.net
Пн Окт 5 11:40:00 UTC 2015
Добрый день!
Есть server {} общий для http & https
Появилась необходимость для 2 стран сделать его только на https с
обязательным редиректом. Но всех остальных так же обязательно оставить на
http. Так не хочется дублировать этот server {} длинный. А сделать
редиректы внутри одного - истина где-то рядом, но никак не дотянуться...
Попытался сделать как в лучших домах:
http{
map "$scheme:$geoip_country_code" $tossl {
"https:RU" "1";
"https:UA" "1";
"http:RU" "2";
"http:UA" "2";
}}
server{}
if ($tossl = "1") {rewrite ^(.*)$ https://example.com$1 permanent;}
Но вот второе правило должно работать от обратного. Надо заредиректить всех
кто не "2", но внутри одного server{} это так же будет и 1. А как в map
пометить все страны кроме этих двух, но с учетом схемы? Нужна снова
последовательная вложенность if.
Есть известный костыль:
if ( $geoip_country_code !~ "RU|UA") { set $lock1 1; }
if ( $scheme = "https" ) { set $lock2 1; }
set $lock3 "$lock1$lock2";
if ( $lock3 = "11" ) { rewrite ^/(.*)$ http://example.com/$1 last ; }
Но он такой уродский...
--
Best regards,
Anton Kuznetsov.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.nginx.org/pipermail/nginx-ru/attachments/20151005/dee1baa7/attachment.html>
Подробная информация о списке рассылки nginx-ru