php-fpm 存在奇怪的权限问题,session_start 在某些版本上失败,但在其他版本上却可以运行

php-fpm 存在奇怪的权限问题,session_start 在某些版本上失败,但在其他版本上却可以运行

好的,我在 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 Pool 文件

    [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 权限错误!

有人能帮帮我吗?约翰

答案1

phpsite 用户只能更新现有会话 - 它不能创建新会话 - chmod u+x yoursessiondatadirectory - 看起来您已经在 Apache 中将 PHP 作为模块运行。

我真的想不出有什么好的理由来使用 Apache + php-fpm 来运行生产系统:将 mod_php(和 pre-fork MPM)与 Apache 一起使用。如果您正在运行 nginx、G-Wan、Lighttpd,请使用 php-fpm。

相关内容