Permissions

php-fpm 的奇怪權限問題,session_start 在某些上失敗,但在其他上有效

  • August 29, 2013

好的,我在 ubuntu 12.04 上安裝了 php-fpm/apache/apc,並有一個執行 php 購物車的網站。

我被權限錯誤淹沒了,例如“無法寫入會話數據(文件)。請驗證 session.save_path 的目前設置是否正確”或“PHP 警告:session_start() …..失敗:權限被拒絕(13 ) 在 …”

我注意到 sessiondata 文件夾上有一個有趣的問題,它可能是正在發生的事情的線索。這是 sessiondata 文件夾的 ls -la

   -rw-rw-r--   1 www-data phpsite     816 Aug 29 16:32 sess_r9tfvubu6stg6v918qp4b7tcg0
   -rw-rw-r--   1 phpsite  phpsite     816 Aug 29 16:32 sess_t99844p7rk6ldk548lplupv485
   -rw-rw-r--   1 www-data phpsite     864 Aug 29 16:30 sess_tdh221j4p6o3pvupc965h6pl56
   -rw-rw-r--   1 www-data phpsite     816 Aug 29 16:31 sess_tdtpp6he2quk7651tsekrhulr5

現在在我的 apache /etc/apache2/conf.d/php5-fpm 文件上,我有

   <FilesMatch ".+\.ph(p[345]?|t|tml)$">
       SetHandler application/x-httpd-php
   </FilesMatch>

   <FilesMatch ".+\.phps$">
       SetHandler application/x-httpd-php-source
       Order Deny,Allow
       Deny from all
   </FilesMatch>


   <FilesMatch "^\.ph(p[345]?|t|tml|ps)$">
       Order Deny,Allow
       Deny from all
   </FilesMatch>

   Action application/x-httpd-php /fcgi-bin/php5-fpm virtual
   Alias /fcgi-bin/php5-fpm /fcgi-bin-php5-fpm

   <Location /fcgi-bin/php5-fpm>
     Order Deny,Allow
     Deny from All
     Allow from env=REDIRECT_STATUS
   </Location>

   FastCgiExternalServer /fcgi-bin-php5-fpm  -appConnTimeout 10 -idle-timeout 300 -socket /tmp/php5-fpm.sock -pass-header Authorization

在我的虛擬主機文件上,我有

   <IfModule mod_fastcgi.c>
   Alias /fcgi-bin/php5-fpm /fcgi-bin-php5-fpm-phpsite
   FastCgiExternalServer /fcgi-bin-php5-fpm-phpsite -appConnTimeout 10 -idle-timeout 300 -socket /tmp/php5-fpm-phpsite.sock -pass-header Authorization
   </IfModule>

最後是我的 phpsite 池文件

   [phpsite]
   user = phpsite
   group = phpsite
   listen.owner = phpsite
   listen.group = phpsite
   listen = /tmp/php5-fpm-phpsite.sock

sessiondata 文件夾的權限是

   drw-rwSr--+  2 phpsite  phpsite 2514944 Aug 29 16:46 .

我不明白為什麼有些會話是用 www-data:phpsite 所有權編寫的,而另一些是 phpsite:phpsite 所有權…

我知道我的權限以某種方式搞砸了,但我看不出它們有什麼不正確的地方。我也在網站上收到 fopen 權限錯誤!

有人可以幫幫我嗎?約翰

phpsite 使用者只能更新現有會話 - 它不能創建新會話 - chmod u+x yoursessiondatadirectory - 看起來你已經讓 PHP 作為 Apache 中的一個模組執行了。

我真的沒有充分的理由想用 Apache + php-fpm 執行生產系統:在 Apache 中使用 mod_php(和 pre-fork MPM)。如果您正在執行 nginx、G-Wan、Lighttpd,則使用 php-fpm。

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