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.
wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz -O /usr/share/GeoIP/GeoLiteCity.dat.gz
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 внутри серверного компонента (и выполнение требований).
Надеюсь это поможет.