Thứ sáu, 30/05/2014 | 00:00 GMT+7

Cách sử dụng Nginx làm Giám đốc lưu lượng toàn cầu trên Debian hoặc Ubuntu

Khi cơ sở khách hàng của bạn phát triển, khoảng cách giữa (các) server và khách hàng của bạn cũng vậy. Tất cả ta đều biết rằng nếu tải server của bạn tăng lên - bạn sẽ mở rộng quy mô. Nhưng phải làm gì khi khoảng cách là vấn đề?

Giải pháp rất đơn giản: cài đặt (các) server ở các vị trí địa lý gần cơ sở khách hàng của bạn hơn và hướng họ dựa trên vị trí của họ. Nhưng làm thế nào để ta thực hiện điều này một cách dễ dàng mà vẫn tiết kiệm chi phí?

Trong hướng dẫn này, ta sẽ cấu hình Nginx để phát hiện và chuyển hướng khách hàng đến domain phụ trỏ đến server phù hợp hơn về mặt địa lý.

Yêu cầu

Để hoàn thành hướng dẫn này, bạn cần một user có quyền sudo .
Bạn cũng cần biết cách tạo server ở các vùng khác nhau.

Giả định

Bài viết này đưa ra một số giả định để dễ đọc.

  • Miền của bạn là www.example.com
  • Server chính của bạn ở USA
  • Bạn muốn cài đặt GTD cho Châu Âu và Châu Á
  • IP server của bạn như sau: Mỹ: 1.1.1.1 EU: 1.1.1.2 AS: 1.1.1.3

Tên domain phụ và cấu hình DNS

Việc chọn domain phụ là tùy thuộc vào bạn. Đối với hướng dẫn này, hãy sử dụng eu.example.com cho Châu Âu và as.example.com cho Châu Á.

Đối với mỗi domain phụ đó, hãy thêm A record trong cấu hình DNS của bạn với IP của server cho khu vực đó:

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

Nó trông giống như sau :

dns

Cài đặt Nginx và GeoIP

Để có Nginx với module GeoIP, bạn có hai lựa chọn: 1) sử dụng gói được biên dịch trước (chỉ -full và -extra có module GeoIP) hoặc 2) biên dịch nginx của bạn với tham số cấu hình --with-http_geoip_module - Trong trường hợp này, bạn cũng cần thư viện geoip-dev.

Hãy sử dụng các gói repository đã có sẵn.

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

Như vậy, cả hai mã binary Nginx và GeoIP đều có sẵn. Nhưng còn một điều nữa: Database city của GeoIP bao gồm thông tin khu vực. Bạn cần download và cài đặt thủ công.

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

Cấu hình Nginx và server ảo của bạn

Ở đây ta sẽ cho Nginx biết các file database GeoIP ở đâu. Và trong server ảo của ta , ta sẽ cấu hình cách Nginx sẽ phản hồi các yêu cầu dựa trên thông tin địa lý của chúng.

Mở nginx.conf (mặc định /etc/nginx/nginx.conf ) với biên tập bạn muốn . Thêm dòng geoip_city /usr/share/GeoIP/GeoLiteCity.dat; . nginx.conf của bạn sẽ trông như thế này:

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

Lưu nó.

Bây giờ, hãy chỉnh sửa server ảo của bạn (mặc định /etc/nginx/sites-available/default ). Bên trong, ta cần tạo một map và thêm các domain phụ vào chỉ thị server_name .

map trong Nginx cho phép ta đặt một biến $closest_server dựa trên giá trị của $geoip_city_continent_code . Bạn có thể đọc thêm về mô-đun Bản đồ trên tài liệu của Nginx.

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

Tiếp theo, ta thêm các domain phụ dựa trên vị trí vào chỉ thị $server_name :

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

Phần cuối cùng của quá trình là tạo điều kiện trong server ảo của bạn chuyển hướng khách truy cập đến server gần nhất. Thêm điều kiện sau vào cấu hình của bạn:

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

Sau khi bạn thực hiện xong tất cả các thay đổi, file server ảo của bạn sẽ trông giống như sau:

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;   }    ... } 

Lặp lại bước này cho từng server bạn muốn cấu hình. Bằng cách đó, tất cả các server của bạn sẽ hoạt động như một giám đốc lưu lượng.

Chạy một vài thử nghiệm

Sau khi hoàn thành tất cả các bước này, bước cuối cùng là kiểm tra những gì bạn đã làm. Khi làm việc với Nginx, hãy luôn kiểm tra các cấu hình mới trước khi áp dụng.

Nginx cung cấp một tùy chọn để kiểm tra các file cấu hình của nó mà không ảnh hưởng đến Nginx hiện đang chạy. Bạn có thể thực hiện bằng cách chạy một trong các lệnh sau:

nginx -t , service nginx configtest hoặc /etc/init.d/nginx configtest

Nếu mọi thứ đều tốt - Reload cấu hình Nginx của bạn:

nginx -s reload , nginx -s reload service nginx reload hoặc /etc/init.d/nginx reload

Để xem giám đốc giao thông của bạn đang hoạt động. Mở trình duyệt và truy cập www.example.com :

Nếu bạn truy cập trang web bằng proxy ở Châu Âu, bạn sẽ được chuyển hướng đến eu.example.com :

Nếu bạn truy cập trang web bằng proxy ở Châu Á, bạn sẽ được chuyển hướng đến as.example.com :

Và từ bây giờ, khách truy cập global của bạn sẽ được chuyển hướng ngay lập tức đến server gần họ nhất, cải thiện trải nghiệm của họ trên trang web .

<div class = “author”> Người gửi: <a href=osystemhttps://github.com/SobanVuexosystem> Alex Soban </a> </div>


Tags:

Các tin liên quan

Cách sử dụng HAProxy làm bộ cân bằng tải lớp 7 cho WordPress và Nginx trên Ubuntu 14.04
2014-05-27
Cách cung cấp tệp mật khẩu KeePass2 với Nginx trên server Ubuntu 14.04
2014-05-16
Cách cài đặt WordPress với Nginx trên Ubuntu 14.04
2014-05-15
Cách tạo chứng chỉ SSL trên Nginx cho Ubuntu 14.04
2014-05-09
Cách tạo chứng chỉ SSL trên Nginx cho Ubuntu 14.04
2014-05-09
Cách cài đặt Nginx trên Ubuntu 14.04 LTS
2014-04-29
Cách thiết lập server block Nginx (server ảo) trên Ubuntu 14.04 LTS
2014-04-25
Cách tùy chỉnh tên server Nginx của bạn sau khi biên dịch từ nguồn trong CentOS
2014-02-11
Cách triển khai ứng dụng Rails bằng Passenger với Nginx trên CentOS 6.5
2014-01-29
Cách triển khai ứng dụng Rails bằng Unicorn và Nginx trên CentOS 6.5
2014-01-29