Назад | Перейти на главную страницу

Перенаправление GEOIP с https

server{
    listen 80;
    listen [::]:80;
    server_name 111.111.111.111 example.com www.example.com;
    return 301 https://example.com$request_uri;

}

Я не устанавливал никаких дополнительных библиотек NGINX. У меня есть указанный выше серверный блок в моем sites-available конфигурация по умолчанию, которая затем переходит к блоку сервера HTTPS. Я хочу перенаправить посетителей из Канады на example.ca и все другие страны в example.com. Я зашел так далеко, но теперь не знаю, куда мне еще идти.

Да, это, безусловно, можно сделать. Я предполагаю, что у вас есть полная установка Nginx с активным модулем MAP.

Вам понадобится geoip-database В системе на основе RedHat с YUM вы будете использовать следующее:

yum install geoip geoip-devel

Итак, как только вы его установите, вам понадобится база данных MaxMind City, которую можно получить с веб-сайта MaxMind.

  1. wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz -O /usr/share/GeoIP/GeoLiteCity.dat.gz
  2. gunzip /usr/share/GeoIP/GeoLiteCity.dat.gz

Итак, теперь у вас есть все необходимое для настройки NGINX, что относительно просто.

Пример конфигурации для вашего случая будет выглядеть примерно так:

user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;

include /usr/share/nginx/modules/*.conf;

events {
    worker_connections 1024;
}

http {
  geoip_city /usr/share/GeoIP/GeoLiteCity.dat;

  map $geoip_city_country_code $nearest_server {
    default example.com;
    CA      example.ca;
  }

  server{
      listen 80;
      listen [::]:80;
      server_name example.com
                  example.ca;

      if ($nearest_server != $host) {
        rewrite ^ $scheme://$nearest_server$request_uri break;
      }

  }
}

Итак, особенности: в приведенной выше конфигурации это зависит от вашей установки, поэтому вам необходимо убедиться, что каталог include, error_log и pid соответствует вашей установке и предпочтениям.

Что касается того, как это работает, я считаю, что это довольно очевидно, но стоит немного углубиться в это:

geoip_city /usr/share/GeoIP/GeoLiteCity.dat; > связывает загруженные данные города MaxMind GeoIP с NGINX.

  map $geoip_city_country_code $nearest_server {
    default example.com;
    CA      example.ca;
  }

Вышеупомянутый раздел связывает несколько ваших хостов и их соответствующий код страны, например CA для Канады - вы можете добавить столько записей, сколько хотите.

  if ($nearest_server != $host) {
    rewrite ^ $scheme://$nearest_server$request_uri break;
  }

Вышеупомянутый раздел определяет, какой сервер использовать в зависимости от местоположения, и передает URI запроса. пример http://example.com/store.php запрошенный с канадского IP-адреса будет перенаправлен на http://example.ca/store.php

Вот и все, основные разделы - это раздел MAP и оператор IF внутри серверного компонента (и выполнение требований).

Надеюсь это поможет.