2011-09-26 17 views
7

Mam kilka adresów serwera, takich jak cdn1.website.com, cdn2.website.com, cdn3.website.com. Każdy z nich przechowuje pliki simillar.Przekierowanie do CDN przy użyciu nginx

Żądanie przychodzi do mojego serwera i chcę przekierować lub przepisać je na losowy serwer cdn. Czy to możliwe?

Odpowiedz

7

Można spróbować przy użyciu modułu 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

To jest właściwe rozwiązanie tego pytania, ale nie jest to najlepszy sposób na zrobienie tego, czego oczekuję od Ciebie. W szczególności próbujesz odciążyć pracę ze swoich serwerów sieciowych. Jeśli twoja aplikacja wysyła najpierw żądania CDN na twój serwer sieciowy, a następnie jest przekierowywana, tak naprawdę nie rozładowujesz wszystkiego do CDN. Idealnie byłoby, gdyby Twoja aplikacja sama renderowała łącza do zasobów w CDN. Jeśli używasz Railsów, możesz użyć wbudowanej funkcji "asset hosts". Inne frameworki mają podobne funkcje, lub możesz zrobić DIY :) – genexp

0

Jest to oczywiście możliwe. Nginx zapewnia równoważenie obciążenia:

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

Określa dwa serwery do równoważenia obciążenia. Domyślnie żądania będą równo rozłożone na wszystkich zdefiniowanych serwerach. Możesz jednak dodać wagi do wpisów serwera.

Wewnątrz serwera {} konfiguracji można teraz dodać następujące przekazać przychodzące żądania do równoważenia obciążenia (np załadować zrównoważyć wszystkie wnioski o katalogu obrazów):

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

spojrzeć na documentation dla bardziej szczegółowego opisu.

+0

Próbowałem tego rozwiązania, ale przed isnt się na moim serwerze –

+5

To nie jest dobrym rozwiązaniem. Celem CDN jest faktyczne wyładowanie pracy z serwera sieciowego. W rzeczywistości proxy wszystkich żądań do CDN zamiast ich przekierowań, co generalnie czyni CDN bezużytecznym. – genexp

Powiązane problemy