我在运行一些脚本时遇到了问题,因为PHP-FPM无法写入我的会话文件夹:
“2009/10/01 23:54:07 [error] 17830#0:* 24在stderr中发送FastCGI:”PHP警告:
未知:打开(/ var / lib / php / session / sess_cskfq4godj4ka2a637i5lq41o5,O_RDWR)
失败:Permission denied(13)in Unknown on line 0
PHP警告:未知:写入会话数据(文件)失败。 请确认
session.save_path的当前设置是正确的
(/ var / lib / php / session)在第0行的“未知”上传“
显然这是一个许可问题; 我的会话文件夹的所有者/组是networking服务器的用户NGINX。 PHP-FPM虽然nobody运行,因此将它添加到nginx组并不是那么简单。
临时解决scheme是将/var/lib/php/session的权限设置为777 – 我觉得这不是“最佳实践”。
什么是最好的做法,当你需要分配一个守护进程写入权限的文件夹,但它运行时nobody ?
对我们来说正确的权限在哪里
chown -R nobody:nogroup /var/lib/php/session
因为php-cgi像nobody一样运行,即使NGinx以用户nginx运行
使用/etc/php.ini session.save_path指令。
临时解决scheme是将/ var / lib / php / session的权限设置为777 – 我觉得这不是“最佳实践”。
“如果您将此设置保留为世界可读的目录,则服务器上的其他用户可以通过获取该目录中的文件列表来劫持会话。”
我必须为每个php-fpm池在/ var / lib / php / session中创build具有0700权限的文件夹。
此文件夹的所有者是来自php-fpm池的用户和组。
和/ var / lib / php / session现在是0777。
我认为这种方法是最安全的。 只有php-fpm池用户才会看到这个会话。
有时,当你更新系统时, /var/lib/php/session的组更改为apache。
尝试执行sudo chgrp nginx /var/lib/php/*而不是将权限设置为777,这是一个不好的做法。
这对我来说至less工作。
我有同样的问题,我解决了。 我去了/tmp (这是我的ses_ *文件所在的位置),并将它们全部删除。 之后,一切都很好。
就像我可以告诉系统试图写入旧的locking文件一样。
我在玩php.ini后出现问题。 我从我的生活中失去了几年,但最终我find了解决办法。
正确的方法应该是将会话文件夹的所有权更改为nginx。 但是,默认情况下,PHP-FPM不会使用nginx用户。 它默认使用apache。
这就是说,您必须通过编辑/etc/php-fpm.d/www.conf来更改PHP-FPM所使用的用户。
; Unix user/group of processes ; Note: The user is mandatory. If the group is not set, the default user's group ; will be used. ; RPM: apache Choosed to be able to access some dir as httpd user = nginx ; RPM: Keep a group allowed to write in log dir. group = nginx
重新启动PHP-FPM,你应该很好去。
service php-fpm restart
PHP会话path位置可以在session.save_path下的/etc/php.inifind。 /var/lib/php/session是默认的。
更新所有权和php会话文件夹组的命令
chown -R nginx:nginx /var/lib/php/session
而且,即使使用700 chmod也应该很好。
基于@Judder的答案,使其工作,我不得不添加以下命令给读写权限给nobody和nogroup :
chown -R nobody:nogroup /var/lib/php/session
sudo chmod -R ug+rw /var/lib/php/sessions
chmod将改变给定文件夹的权限
-R将对给定文件夹内创build的文件夹和文件应用相同的权限
你为用户
g为组
r为读取权限
写入权限