如何使用Nginx的是在Debian或Ubuntu全球业务总监

介绍

随着您的客户群增加,您的服务器和客户之间的距离也会增加。 我们都知道,如果你的服务器负载增加 - 你的规模。 但要做到什么时候距离是问题吗?

解决方案很简单:在距离您的客户群更近的地理位置安装服务器,并根据他们的位置指导他们。 但是我们如何在成本有效的同时轻松做到这一点?

在本指南中,我们将配置Nginx来检测客户并将其重定向到指向更适合地理位置的服务器的子域。

先决条件

要完成本指南,您将需要一个用户sudo权限。
您还需要知道如何在不同的地区创建服务器。

假设

本文做了一些假设,以方便可读性。

  • 您的域名是www.example.com
  • 您的主要服务器位于美国
  • 您想要为欧洲和亚洲安装GTD
  • 您的服务器IP地址如下:美国: 1.1.1.1欧盟: 1.1.1.2 AS: 1.1.1.3

子域和DNS配置

选择子域名取决于您。 在本教程中,我们使用eu.example.com欧洲和as.example.com亚洲。

对于每一个这些子域的,添加A record与服务器该区域的IP DNS配置:

  • eu.example.com - 1.1.1.2
  • as.example.com - 1.1.1.3

它应该看起来像这样:

dns

安装Nginx和GeoIP

有Nginx的使用GeoIP的模块,你有两个选择:1)使用预编译包(仅-full和-额外拥有的GeoIP模块)或2)与编译nginx的--with-http_geoip_module配置参数-在这种情况下,你还需要geoip-dev库。

让我们使用已经可用的存储库包。

sudo apt-get update
sudo apt-get install nginx-full geoip-database

现在,Nginx和GeoIP二进制文件都可用。 但还有一件事:GeoIP的城市数据库包括地区信息。 您需要手动下载并安装它。

wget -N http://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz
gunzip GeoLiteCity.dat.gz
mv GeoLiteCity.dat /usr/share/GeoIP/

配置Nginx和您的虚拟主机

这里我们要告诉Nginx GeoIP数据库文件在哪里。 在我们的虚拟主机中,我们将配置Nginx如何基于其geoip信息响应请求。

打开nginx.conf (默认/etc/nginx/nginx.conf )与您的首选编辑器。 添加行geoip_city /usr/share/GeoIP/GeoLiteCity.dat; nginx.conf看起来就像这样:

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

保存。

现在,让我们编辑自己的虚拟主机(缺省/etc/nginx/sites-available/default )。 内部,我们需要创建一个map和子域添加到server_name指令。

map中的Nginx允许我们设置一个变量$closest_server基于价值$geoip_city_continent_code 你可以阅读更多有关map模块上的Nginx的文档。

map $geoip_city_continent_code $closest_server {
  default www.example.com;
  EU      eu.example.com;
  AS      as.example.com;
}

接下来我们添加基于位置的子域到$server_name指令:

server {
  server_name example.com
              www.example.com
              eu.example.com
              as.example.com;
  ...
}

该过程的最后一部分是在虚拟主机中创建一个条件,将访问者重定向到最近的服务器。 在配置中添加以下条件:

server {
  ...

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

  ...
}

完成所有更改后,虚拟主机文件将如下所示:

map $geoip_city_continent_code $closest_server {
  default www.example.com;
  EU      eu.example.com;
  AS      as.example.com;
}

server {
  server_name example.com
              www.example.com
              eu.example.com
              as.example.com;

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

  ...
}

对要配置的每个服务器重复此步骤。 这样,所有的服务器都将充当流量控制器。

运行几个测试

完成所有这些步骤后,最后一个是测试你做了什么。 当使用Nginx时,总是在应用之前测试新配置。

Nginx提供了一个选项来测试其配置文件,而不影响当前运行的Nginx。 您可以通过运行以下命令之一来执行此操作:

nginx -tservice nginx configtest/etc/init.d/nginx configtest

如果一切都很好 - 重新加载您的Nginx配置:

nginx -s reloadservice nginx reload/etc/init.d/nginx reload

查看您的交通总监的行动。 打开浏览器,并访问www.example.com

如果使用在欧洲的代理访问该网站,你应该被重定向到eu.example.com

如果使用在亚洲的代理访问该网站,你应该被重定向到as.example.com

从现在起,您的全球访问者将立即重定向到最接近他们的服务器,改善他们在您的网站上的体验。

:提交亚历Soban
赞(52) 打赏
未经允许不得转载:优客志 » 系统运维
分享到:

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏