2017-04-15 35 views
1

我試圖讓nginx服務測試版的angular2前端更換我的導軌應用程序,通過導航到... /測試版,但我似乎無法讓nginx找到任何文件。nginx無法找到我的文件在一個位置塊

我嘗試導航到..../beta ..../beta/index.html,但它似乎從未找到索引(或任何放置在該目錄中的文件)。

下面是我所知道的匹配塊,因爲當我試圖在任何位於測試版下的任何地方使用try_files指令時,我會將它路由到正常的rails應用程序。 (不try_files我得到一個nginx的404篇回覆)

location /beta { 
    root /var/www/ourlatitude/angular_dist; 
    try_files $uri $uri/ /; 
    } 

我也知道文件的存在,因爲我可以列出該文件,並查看該nginx的啓動腳本的內容。

echo "starting nginx" 
ls -l /var/www/ourlatitude/angular_dist/index.html 
cat /var/www/ourlatitude/angular_dist/index.html 
nginx -g "daemon off;" 

這是腳本的輸出。

starting nginx 
-rw-rw-r-- 1 root root 900 Apr 15 16:16 /var/www/ourlatitude/angular_dist/index.html 
<!doctype html> 
<html> 
<head> 
    <meta charset="utf-8"> 
    <title>Ourlatitude</title> 
    <base href="/"> 

    <meta name="viewport" content="width=device-width, initial-scale=1"> 
    <link rel="icon" type="image/x-icon" href="favicon.ico"> 
    <link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet"> 
    <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,400,500,700,400italic"> 
<link href="styles.c06b2f9217e876bbd94a.bundle.css" rel="stylesheet"/></head> 
<body> 
    <app-root>Loading...</app-root> 
<script type="text/javascript" src="inline.1b4e5bfe11db95ba56df.bundle.js"></script><script type="text/javascript" src="polyfills.1511b33427d0b840a6ea.bundle.js"></script><script type="text/javascript" src="vendor.2104002a7ee0b6a6562f.bundle.js"></script><script type="text/javascript" src="main.8ad811b26786bedbaf91.bundle.js"></script></body> 
</html> 

我覺得我錯過了這裏真正基本的東西。 任何想法可能會發生什麼?

如果有幫助,我可以包含更多的nginx配置文件。

我正在做的唯一另外一件普通的事情是,這是一個碼頭集裝箱內的,但我不認爲重要。

+0

使用'alias'而不是'root'。有關詳細信息,請參見[此文檔](http://nginx.org/en/docs/http/ngx_http_core_module.html#alias)。 –

+0

@RichardSmith謝謝 - 這個作品,但不得不承認,我不明白爲什麼。我認爲我誤解了文檔或基本的東西,因爲它看起來像根應該工作。如果你可以發佈這個答案,並解釋在使用root和別名之間這種情況有什麼不同,我會接受它。再次感謝,我昨天花了很多時間嘗試了很多變化。 – nPn

回答

1

rootalias是完全不同的。 location塊用於匹配URI,在這種情況下爲/beta/index.html

root指令決定添加到URI的前綴,將其轉換爲路徑名。在你的問題,這將是/var/www/ourlatitude/angular_dist/beta/index.html,這是不是你想要的。 location塊的值只與URI匹配相關,而不是來構建路徑名。

前綴內的alias指令location通過首先除去location的值,因此構建的路徑名:

location /beta { 
    alias /var/www/ourlatitude/angular_dist; 
    ... 
} 

將匹配URI /beta/index.html,然後前綴的/var/www/ourlatitude/angular_dist,這將構建之前刪除/beta路徑名稱:/var/www/ourlatitude/angular_dist/index.html

有關詳細信息,請參閱this document