Nginx

自動索引切斷目錄路徑的結尾;需要解決方法

  • November 17, 2017

我正在嘗試使用 nginx 設置一種共享主機,其中每個使用者都有一個public_html目錄。請求/~username別名為/home/domain-users/username/public_html. 問題是,我還希望啟用自動索引。將下面的配置添加到伺服器塊中,對特定文件的請求就可以/~username/test.txt正常工作;它們別名為/home/domain-users/username/public_html/test.txt. 但是,當嘗試請求/~usernameor時~/username/,我得到一個 404 並/var/log/nginx/error.log顯示 autoindex 出於某種原因試圖列出其中的文件/home/domain-users/username/public_htm(注意缺少的“l”:路徑被截斷。)

由於能夠在/~username沒有尾隨斜杠的情況下作為目錄進行訪問並不重要,因此我嘗試$public_html_path/try_files指令中刪除。然後,即使在請求時/~username/,也不會呼叫 autoindex。自動索引功能可能需要文字尾部斜杠try_files

# For requests to "/~username" without a trailing slash
set $public_html_path "";
# Lazy quantifier at the end allows processing requests to "~/username". We add the trailing slash later in try_files
location ~ ^\/\~(?<user_home_folder>[^\\n\/]+)(?<public_html_path>\/.*)?$ {
   alias /home/domain-users/$user_home_folder/public_html;
   autoindex on;
   try_files $public_html_path $public_html_path/ =404;
}

我的研究結果很少,最接近的是這個 StackOverflow question。由於這似乎是 NGINX 中不太可能修復的錯誤(最後一條評論是一年多以前),我正在尋找一種解決方法。使用root指令代替alias將是完美的,除了 autoindex 刪除/~username/URI 的關鍵部分,認為它列出的文件在 web 根目錄中,因為在某種程度上,它們是。即使是駭人聽聞的解決方法也將不勝感激……謝謝!

alias與正則表達式一起使用時location,您需要在值中重構整個路徑名alias。有關詳細資訊,請參閱此文件

location ~ ^/~(?<user_home_folder>[^/]+)(?<public_html_path>/.*)?$ {
   alias /home/domain-users/$user_home_folder/public_html$public_html_path;
   autoindex on;
}

由於這個問題,一起使用try_filesand可能會導致並發症。但是,預設行為實際上與您問題中的陳述相同。alias``try_files

引用自:https://serverfault.com/questions/883866