2014-04-18 34 views
0

我們正在開發一個新站點。我們希望更新指向我們服務器的域名,以便我們能夠快速發佈網站,當我們從客戶那裏獲得好處時。nginx:爲某些IP地址服務站點,爲其他人提供proxy_pass

與此同時,所有IP地址都應該proxy_pass到舊站點(IP地址),我們(和客戶)應該重定向到新站點。

現在它正在工作,但它是一個醜陋的黑客與一些if語句。我讀過這不推薦。

現在的配置是這樣的:

server { 
    listen x.x.x.x:80; 
    server_name yyyyy; 
    root /etc/www; 
    index index.html index.htm; 
    set $needRewrite Y; 
    if ($remote_addr ~* w.x.y.z) { set $needRewrite N;} 
    location/{ 
     if ($needRewrite = Y) { 
     proxy_pass http://old_address; 
     break; 
     } 
     try_files $uri $uri/ /index.php?$args; 
    } 
    ..... 

什麼是做這樣的事情的正確方法?

回答

1

您可以使用地理IP模塊,具有基於客戶端的IP地址的變量根:

geo $www_root { 
    default /etc/www; 
    w.x.y.z/32 /etc/client/www; 
} 

server { 
    listen x.x.x.x:80; 
    server_name yyyyy; 
    root $www_root; 
    index index.html index.htm; 
    try_files $uri $uri/ /index.php?$args; 
} 

注:如果這兩個網站使用相同的IP地址上面的配置才起作用。如果您的服務器位於不同的IP地址,你可以只重定向到客戶端的預覽網站:

geo $client { 
    default 0; 
    w.x.y.z/32 1; 
} 

server { 
    listen x.x.x.x:80; 
    server_name yyyyy; 
    root /etc/www; 
    index index.html index.htm; 
    try_files $uri $uri/ /index.php?$args; 

    location/{ 
     if ($client) { 
      return 302 http://client-preview-site; 
     } 
    } 
} 

注意:如果並不總是壞事if這是你唯一的選擇。 ;)

相關問題