介绍
随着您的客户群增加,您的服务器和客户之间的距离也会增加。 我们都知道,如果你的服务器负载增加 - 你的规模。 但要做到什么时候距离是问题吗?
解决方案很简单:在距离您的客户群更近的地理位置安装服务器,并根据他们的位置指导他们。 但是我们如何在成本有效的同时轻松做到这一点?
在本指南中,我们将配置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
它应该看起来像这样:
安装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 -t
, service nginx configtest
或/etc/init.d/nginx configtest
如果一切都很好 - 重新加载您的Nginx配置:
nginx -s reload
, service nginx reload
或/etc/init.d/nginx reload
查看您的交通总监的行动。 打开浏览器,并访问www.example.com
:
如果使用在欧洲的代理访问该网站,你应该被重定向到eu.example.com
:
如果使用在亚洲的代理访问该网站,你应该被重定向到as.example.com
:
从现在起,您的全球访问者将立即重定向到最接近他们的服务器,改善他们在您的网站上的体验。