2014-04-07 92 views
0

我有一個基於nginx的配置,其中域的根應該導致一個靜態頁面(一個啓動頁面),其他任何東西都應該代理到一個內部可訪問的機器。配置看起來大致如下:Nginx解決了錯誤的路由

server { 
    listen 80; 

    location =/{ 
     root /var/www; 
    } 

    location ~/{ 
     location /robots.txt { 
      root /var/www; 
     } 
     proxy_pass http://127.0.0.1:9091; 
     proxy_set_header Host $host; 
    } 

} 

的問題是,如果代碼的第二塊中存在,第一個停止被考慮在內。換句話說,nginx開始在9091實例上尋找一個不存在的index.html文件。如果proxy_pass塊被評論,則第一部分生效。

就文檔而言,情況並非如此。如果我的域的根被調用,Nginx應該在第一個塊之後停止搜索,因爲它是明確的。然而,事實並非如此。

這裏應該做些什麼?我不想合併飛濺頁面代碼和其他代碼。

+0

什麼是你與測試網址是什麼? – rednaw

+0

對我來說看起來像一個bug,因爲文檔中的示例(http://nginx.org/en/docs/http/ngx_http_core_module.html#location)看起來非常相似,說明概述如下:_「/」請求將匹配配置一個_。但在我的情況下,總是配置B匹配。 –

+0

閱讀本頁面會更好。 http://wiki.nginx.org/Pitfalls – risyasin

回答

0

試試這個:

更換splash.html你的初始頁面文件名。

# Set root directory for requests 
root /var/www; 

# Rewrite/to /splash.html 
rewrite ^/$ /splash.html break; 

location = /splash.html { } 

location = /robots.txt { } 

location ~*/{ 
    proxy_pass http://127.0.0.1:9091; 
    proxy_set_header Host $host; 
} 
1

你的配置看起來很奇怪,但沒有跡象表明它不應該像你打算的那樣工作。

也許你可以嘗試這樣的事情?否則,請提供您的完整配置(也許您的簡化示例丟失了我們應該瞭解的重要內容)。

server { 
    listen 80; 
    root /var/www; 
    location =/{ 
    } 
    location = /index.html { 
    } 
    location = /robots.txt { 
    } 
    location/{ 
     proxy_pass http://127.0.0.1:9091; 
     proxy_set_header Host $host; 
    } 
} 
0

我猜你有index指令的地方,這是怎麼index的作品。

應該注意的是,使用索引文件會導致內部重定向,並且可以在不同的位置處理請求。

你的第一location比賽,但隨後index模塊造成內部重定向到/index.html和請求在第二location塊結束。

我會寫這樣的事:

server { 
    listen 80; 
    root /var/www; 

    location = /index.html { 
    } 

    location = /robots.txt { 
    } 

    location/{ 
     proxy_pass http://127.0.0.1:9091; 
     proxy_set_header Host $host; 
    } 
}