2011-09-26 10 views
7

Tôi có một vài địa chỉ máy chủ, như cdn1.website.com, cdn2.website.com, cdn3.website.com. Mỗi người trong số họ giữ các tập tin simillar.Yêu cầu chuyển hướng đến CDN bằng nginx

Yêu cầu đến máy chủ của tôi và tôi muốn chuyển hướng hoặc viết lại nó vào một máy chủ cdn ngẫu nhiên. Có thể không?

Trả lời

7

Bạn có thể thử bằng cách sử dụng mô-đun split clients:

http { 

    # Split clients (approximately) equally based on 
    # client ip address 
    split_clients $remote_addr $cdn_host { 
    33% cdn1; 
    33% cdn2; 
    - cdn3; 
    } 

    server { 
    server_name example.com; 

    # Use the variable defined by the split_clients block to determine 
    # the rewritten hostname for requests beginning with /images/ 
    location /images/ { 
     rewrite^http://$cdn_host.example.com$request_uri? permanent; 
    } 
    } 
} 
+3

Đây là giải pháp phù hợp cho câu hỏi, nhưng đó không phải là cách tốt nhất để làm những gì tôi mong đợi bạn thực sự muốn. Cụ thể, bạn đang cố gắng giảm tải công việc từ máy chủ web của mình. Nếu ứng dụng của bạn đang gửi yêu cầu CDN đến máy chủ web của bạn trước, sau đó được chuyển hướng, bạn không thực sự tải mọi thứ xuống CDN. Lý tưởng nhất là bạn muốn bản thân ứng dụng của mình hiển thị trực tiếp các liên kết đến các nội dung trên CDN. Nếu bạn sử dụng Rails, bạn có thể sử dụng tính năng "máy chủ lưu trữ nội dung" được tích hợp sẵn. Các khung công tác khác có các tính năng tương tự hoặc bạn có thể tự làm :) – genexp

0

Điều này tất nhiên là có thể. Nginx đi kèm với cân bằng tải:

upstream mysite { 
    server www1.mysite.com; 
    server www2.mysite.com; 
} 

Điều này xác định 2 máy chủ để cân bằng tải. Theo yêu cầu mặc định sẽ được phân phối đều trên tất cả các máy chủ được xác định. Tuy nhiên, bạn có thể thêm trọng số cho các mục nhập máy chủ.

Bên trong máy chủ {} cấu hình của bạn bây giờ bạn có thể thêm những điều sau đây để vượt qua yêu cầu đến để cân bằng tải (ví dụ như để cân bằng tải tất cả các yêu cầu cho các thư mục hình ảnh):

location /images/ { 
     proxy_pass http://mysite; 
} 

Có một cái nhìn tại documentation để có mô tả chi tiết hơn.

+0

Tôi đã thử giải pháp này, nhưng ngược dòng isnt nằm trên máy chủ của tôi –

+5

Đây không phải là giải pháp đúng. Điểm của CDN là thực sự giảm tải công việc từ máy chủ web. Điều này thực sự sẽ ủy quyền tất cả các yêu cầu tới CDN thay vì chuyển hướng chúng, thường làm cho CDN vô dụng. – genexp