nginx本身不能處理php,它只是個web伺服器。當接收到客戶端請求後,如果是php請求,則**給php直譯器處理,並把結果返回給客戶端。如果是靜態頁面的話,nginx自身處理,然後把結果返回給客戶端。
nginx下php直譯器使用最多的就是fastcgi。一般情況nginx把php請求**給fastcgi管理程序處理,fastcgi管理程序選擇cgi子程序進行處理,然後把處理結果返回給nginx。
在這個過程中就牽涉到兩個使用者,乙個是nginx執行的使用者,乙個是php-fpm執行的使用者。如果訪問的是乙個靜態檔案的話,則只需要nginx執行的使用者對檔案具有讀許可權或者讀寫許可權。
而如果訪問的是乙個php檔案的話,則首先需要nginx執行的使用者對檔案有讀取許可權,讀取到檔案後發現是乙個php檔案,則**給php-fpm,此時則需要php-fpm使用者對檔案具有有讀許可權或者讀寫許可權。
檢視nginx執行在什麼使用者下
ps aux|grep nginx
看到nginx的父程序是執行在root使用者下的,而子程序時執行在nobody使用者下,而且只有乙個子程序。這個和我們在nginx的配置檔案中,配置的一致。
注意:nginx如果沒有配置執行使用者的話,預設是使用nobody使用者執行。使用nobody執行nginx安全性是比較高的。
ps aux |grep php-fpm
通過上圖,我們可以看到php-fpm的父程序執行在root使用者下,而子程序全部執行在apache使用者下。
我們再來看看mysql資料庫執行在哪個使用者下面,使用ps命令檢視。如下:
ps aux |grep mysql
在實際生產環境中,我們一般的配置是nginx與php-fpm都執行在nobody使用者下,而且**的根目錄也要屬於nobody使用者,並且根目錄對nobody使用者具有所有許可權。
這樣配置是最安全的,因為nobody使用者最安全。即使黑客攻破了**,但是也不能登入系統。
這個客戶端貌似相當不錯!!!!
為什麼帶有的文章就不能發布呢?
其實這個問題很簡單,文章中的需要先上傳到**的根目錄下,然後才能正常訪問。現在php-fpm執行在apache使用者下,而問題是apache使用者對虛擬主機a.ilanni.com根目錄沒有訪問許可權,更沒有寫入許可權。
那麼如何解決這個問題呢?
我們現在需要做的就是統一nginx與php-fpm執行使用者為nobody,然後把nginx的虛擬主機a.ilanni.com**根目錄對nobody使用者及nobody使用者組具有所有許可權。
調整php-fpm執行使用者
php-fpm我們是通過yum方式進行安裝的。而且使用的還是預設配置,該配置檔案為/etc/php-fpm.d/www.conf。
編輯完畢後,重啟php-fpm。如下:
/etc/init.d/php-fpm restart
ps aux|grep php-fpm
我們現在來修改虛擬主機的根目錄使用者及使用者組。如下:
參考:
nginx php fpm mysql使用者許可權解析
nginx本身不能處理php,它只是個web伺服器。當接收到客戶端請求後,如果是php請求,則 給php直譯器處理,並把結果返回給客戶端。如果是靜態頁面的話,nginx自身處理,然後把結果返回給客戶端。nginx下php直譯器使用最多的就是fastcgi。一般情況nginx把php請求 給fastc...
mysql配置使用者許可權 mysql使用者許可權配置
mysql使用者許可權配置 有什麼不對的地方請各位大神多多指教!1,檢視使用者表 mysql select user,password,host from mysql.user user 使用者名稱 password 密碼 加密 host 連線ip 2,開放遠端連線 vim etc mysql ma...
Linux 使用者許可權,檔案許可權
chown user filename 改變 filename 的所有者為 user chown user group filename 改變 filename 的所有者為 user,組為 group chown r root folder 改變 folder 資料夾及其子檔案的所有者為 root ...