nginx geoip перенаправление в первый раз только ведет для перенаправления цикла

Я пытаюсь настроить nginx для выполнения geoIP проверок на новых посетителях только.

Идея состоит в том, что новые посетители должны быть перенаправлены к версии страницы, которая была настроена для их языка/страны.

Я могу проверить, существует ли определенный cookie. Если это делает, то nginx может продолжиться и не перенаправить.

Это настроило средства, что все новые посетители будут перенаправлены к тому, что это, вероятно, будет самая соответствующая версия страницы для их страны/языка. И в то же время те пользователи, которые хотят, могут все еще просмотреть свободно все версии, доступные впоследствии.

Я полагаю, что Google рекомендует этот тип настроенных для многоязычных/многоузловых веб-страниц также.

Проблема состоит в том, что я получаю цикл перенаправления, если переписать директива помещается вне корневого местоположения. Все же, потому что американская версия совпадает с корнем/, переписывает в местоположениях, оказались еще более трудными настроить.

Значения geo_IP передаются хорошо через fastcgi к php, если не переписывают, указан, таким образом, я не думаю, что существует что-то не так с установкой кроме переписывания себя.

Это - моя конфигурация:

map $geoip2_data_country_code $country_url {
  default example.com; ##This is the US version
  GB      example.com/uk;
  CA      example.com/ca;
}

server {
    listen 443 ssl spdy default_server;
    server_name example.com;
    root /var/www/html;

    if ($http_cookie !~ "cookie_to_check") {        
       rewrite ^ https://$country_url break;
       #Appending $request_uri to the rewrite yields very similar results
    }    


    location / {
    try_files $uri $uri/ /index.php?$args; 
    }

    location /uk {
    try_files $uri $uri/ /uk/index.php?$args;   
    }

    location /ca {  
    try_files $uri $uri/ /ca/index.php?$args;   
     }

##Other locations
}
0
задан 30 July 2015 в 20:52
1 ответ

Bir çox sınaq və səhvdən sonra bu, gözlənildiyi kimi işləyəcək və yerinə yetirəcək konfiqurasiyadır.

Əvvəlki versiyamda problem ikiqat idi:

  • Nginx kənar yerlərdə yenidən yazırdı dağınıq və onlar yalnız pis döngələr yaratmaqla işləməkdən imtina edəcəklər
  • Nginx, nginx arxasında bir php tətbiqi ilə təyin olunan bir çərəzin mövcudluğunu yoxlayır. Bunu göstərdiyinə görə @AlexeyTen-ə təşəkkür edirəm. Şərti olaraq nginx ilə əlavə bir çerez qurmaq hiylə yaratdı

     map $ geoip2_data_country_code $ country_url {
      default example.com;  ## Bu ABŞ versiyasıdır
      GB example.com/uk;
      CA example.com/ca;
     }
    
    server {
      443 ssl spdy default_server qulaq asın;
      server_name example.com;
      root / var / www / html;
    
      yer / {
      try_files $ uri $ uri / /index.php?$args;
      əgər ($ http_cookie! ~ "country = set") {
      add_header Set-Cookie "ölkə = dəst; Maksimum Yaş = 31536000";
      ^ $ sxemini yenidən yazın: // $ country_url $ request_uri break;
      }
      }
    
      yer / uk {
      try_files $ uri $ uri / /uk/index.php?$args;
      əgər ($ http_cookie! ~ "country = set") {
      add_header Set-Cookie "ölkə = dəst; Maksimum Yaş = 31536000";
      ^ $ sxemi yenidən yaz: // $ country_url $ request_uri break;
      }
      }
    
      yer / ca {
      try_files $ uri $ uri / /ca/index.php?$args;
      əgər ($ http_cookie! ~ "country = set") {
      add_header Set-Cookie "ölkə = dəst; Maksimum Yaş = 31536000";
      ^ $ sxemi yenidən yaz: // $ country_url $ request_uri break;
      }
      }
    
      ## Digər yerlər
      }
     
0
ответ дан 5 December 2019 в 12:30

Теги

Похожие вопросы