2016-01-20 84 views
1

我對nginx非常陌生,並且配置簡單的重定向。 這是我很簡單的配置試圖重定向:在nginx中重定向

server { 
    listen 80 default_server; 

    set $mobile "false"; 

    if ($http_user_agent ~* '(phone|droid)') { 
     set $mobile "true"; 
    } 

    if ($mobile = true) { 
     return 301 http://X.X.X.X/mobile$request_uri; 
    } 

    location /mobile { 
     include uwsgi_params; 
     uwsgi_pass unix:/var/www/video_m/video.sock; 
    } 

    location/{ 
     include uwsgi_params; 
     uwsgi_pass unix:/var/www/video/video.sock; 
    } 
} 

當轉到從桌面一切網站是確定,我的要求是要uwsgi。 但是從移動設備我從瀏覽器ERR_TOO_MANY_REDIRECTS錯誤,請求的URL看起來像http://X.X.X.X/mobile/mobile/mobile/mobile/mobile/mobile/mobile/mobile

有明顯必不可少的東西,可能很簡單的一塊,我失蹤。請幫助我。

+0

嘗試 '突破;'在if塊中 - 就在集合$ mobile「true」之下; –

+0

它沒有爲我工作。我仍然得到重定向循環。 – user2814036

回答

1

您已經創建了一個循環。第一次遇到if/return時,會添加/mobile前綴。然後再次呈現該URI,並且它碰到相同的語句,並添加另一個/mobile前綴,並且這繼續被重複。

要打破這個循環,您需要在第一次添加/mobile前綴後保護if/return的路徑。

可能:

server { 
    listen 80 default_server; 

    location /mobile { 
     include uwsgi_params; 
     uwsgi_pass unix:/var/www/video_m/video.sock; 
    } 

    location/{ 
     if ($http_user_agent ~* '(phone|droid)') { 
      return 301 $scheme://$host/mobile$request_uri; 
     } 

     include uwsgi_params; 
     uwsgi_pass unix:/var/www/video/video.sock; 
    } 
} 
+0

謝謝。我不知道在添加前綴後,請求會從頭開始再次評估。 – user2814036