[英]File not found error from nginx on a virtual machine where /var/www/ is mounted from host file structure
我正在嘗試將一個相當復雜的開發環境設置為虛擬Ubuntu 12.04服務器。
為了使我可以編輯文件並在刷新頁面時立即看到更改,就像您在正常的本地開發情況下所期望的那樣,我在〜/ www / site1中的主機操作系統(薄荷14)上有php源代碼我已將其作為持久共享文件夾添加到virtualbox,然后將其安裝在虛擬機上
mount -t vboxsf site1 /var/www
如果我ls / var / www -la我看到了所有的php文件,但是當我嘗試從瀏覽器訪問虛擬機時,頁面上出現File not found錯誤,並且在stderr中發送了FastCGI的子域報告error.log :“從上游讀取響應頭時,”主腳本未知“ 。例外是子域phpmyadmin.virtualmachine完美加載,因此我知道nginx為所請求的子域提供正確的文件結構。
作為測試,我創建了一個指向/ var / test的子域info.virtualmachine,而index.php是最簡單的phpinfo(),並且可以正常工作,因此我只能假定nginx不會讀取已安裝的vboxsf文件結構/ var / www可以正確查看,因為可以查看來賓OS上的所有“本地”文件。
Nginx已配置為以root身份運行,而其他所有服務均以root身份運行。 這是nginx的已知錯誤,還是我需要配置以允許nginx查看已安裝的vboxsf共享的東西?
我找到了答案,事實證明這是由於文件許可以及對php-fpm的工作方式不熟悉。
首先,我在虛擬服務器中啟用了root用戶,並使用超級用戶來控制守護程序,將它們全部設置為以root用戶身份運行。 php-fpm的父進程以root身份運行,但所有子進程均以www-data身份運行。 以root身份掛載共享導致php-fpm的子進程無法使用該文件夾,這導致nginx拋出文件未找到錯誤,並且由於vboxsf的工作方式,我無法對共享進行chown或chmod。
通過使用以下命令將共享添加到/ etc / fstab來解決此問題:
sharename /var/www vboxsf rw,uid=33,gid=33 0 0
這樣就可以將共享安裝在www-data用戶下,從而為www-data提供讀取權限。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.