Nginx支援.htaccess的分析處理

尛沫發表於2014-06-13

曾經聽說過關於Nginx支援.htaccess檔案的問題。有人認為,Nginx能夠支援.htaccess規則,且相容Apache規則。但我認為,Nginx支援使用.htaccess檔案來儲存Nginx的偽靜態規則,不相容.htaccess規則。

查閱了Nginx的官方文件文件1/文件2之後會發現,文件1是Nginx的Rewrite模組的doc,詳細地解釋了Nginx的rewrite規則組成,在其中,並沒有找到關於Apache的規則;在文件2中,文件說明了為什麼不使用.htaccess檔案 並將Nginx和Apache進行比較。眾所周知,Nginx不支援.htaccess規則。以前有一篇文章提到過:誰說nginx不支援.htaccess,在我看來,這是在混淆視聽,偷換了概念,我們說的是.htaccess規則,而文章說的是.htaccess檔案。

接下來我們來分析一下Nginx為什麼不支援.htaccess,主要有以下幾個方面。

效能需要 在文件2中我們可以知道,Apache處理偽靜態規則時會依次搜尋各個目錄下的.htaccess檔案,這樣就會造成大量的查詢,影響效能,與Nginx的設計理念不符。

軟體模式決定 Apache設計時便是動態載入這一點,可以從Apache處理.htaccess檔案看出來。你修改了.htaccess後,就可以馬上生效,包括Apache載入模組也是動態載入,而Nginx則是寫死的規則,修改後需要過載Nginx才可以。Tengine雖然提供了動態載入模組,但仍需要過載設定才能生效,可以說是在“偽動態”。

北方毛熊的自尊心作祟 Apache後面有美帝的身影,毛熊們覺得要是相容了就有點低聲下氣。所以搞出自己的版本。

關於.htaccess應用於Nginx的可行性分析。在我看來,.htaccess不可能應用於LNMP平臺的商業化。主要有以下幾個原因。

安全性較低
由於Nginx是先載入配置檔案,然後才執行,所以,如果你用的虛擬主機有一個愛折騰的鄰居,萬一那個傢伙手殘了,改錯了,你也會無法訪問,隨之遭殃。

操作不便
Nginx因為是先載入配置檔案,所以,在每次修改完需要重啟Nginx,你是否給使用者ssh密碼以方便其重啟?如果不給密碼使用php中的exec,又會有跨站的危險。如果開啟了Chroot,exec就沒有效果了。

實際上nginx不僅僅支援.htaccess檔案,你甚至可以使用.mp3來放偽靜態規則。但是,為了安全起見,我建議你使用預設的conf檔案來儲存rewrite規則。畢竟,說不定那天不小心就把目錄清空了,規則就沒了。Nginx也因此崩潰

本文為Anyforweb技術分享部落格,需要了解網站建設及更多Web應用相關資訊,請訪問anyforweb.com。

相關文章