2016-07-11 68 views
0

我試圖設置Nginx來顯示用戶的公用文件夾中的文件。該網站將有多個用戶,每個用戶都有一個子目錄,其名稱對Nginx來說是未知的。當子目錄名稱未知時,Nginx會阻止訪問子目錄

目錄結構示例:

/users/usernameHere/public 
/users/usernameHere/private 

我只想nginx的顯示來自用戶的公共目錄中的文件,並拒絕所有訪問任何其他目錄。

這是我試過到目前爲止:

location ^~ /users/*/public/ { 
    allow all; 
    try_files $uri $uri/ =404; 
} 

location ^~ /users/ { 
    deny all; 
} 
+0

你的第一個位置正則表達式可能有問題,應該是''/ users /.*/ public /'' – Lution

回答

1

試試這個配置

location ~ /users/.*/public/ { 
    allow all; 
    try_files $uri $uri/ =404; 
} 

location /users/ { 
    deny all; 
} 

閱讀official docs看到URI之前的修飾符之間的區別,你第一個位置是一個正則表達式的位置並應對區分大小寫和不區分大小寫的匹配使用~*~

位置可以由前綴字符串定義,也可以由正則表達式定義。正則表達式使用前面的「〜*」修飾符(用於不區分大小寫的匹配)或「〜」修飾符(用於區分大小寫的匹配)指定。

然後你的第二個位置是由前綴字符串/users/定義一個共同的位置,^~您使用手段修改跳過正則表達式檢查,並使用當前的最長前綴匹配,這裏是/users/一個,所以用你的配置你將永遠得到403回報。

如果最長匹配的前綴位置具有「^〜」修飾符,則不檢查正則表達式。

+0

謝謝,這很完美。 – PhearOfRayne