GEOIP 使用 https 重定向

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。我已经走到这一步,但现在我不确定接下来该怎么做。

答案1

是的,这当然可以做到。我假设您已安装完整的 Nginx,并且 MAP 模块处于活动状态。

您将需要geoip-database安装,在基于 RedHat 的系统上,使用 YUM 您将使用以下内容:

yum install geoip geoip-devel

因此,一旦安装了该程序,您将需要 MaxMind 的城市数据库,该数据库可从 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 语句(以及满足要求)

希望这可以帮助。

相关内容