Как сделать два вложенных условия в 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