PHP-FPMがセッションフォルダーに書き込めないため、いくつかのスクリプトを実行できません。
"2009/10/01 23:54:07 [エラー] 17830#0:* 24 FastCGIがstderrに送信されました:" PHP警告: 不明:open(/ var/lib/php/session/sess_cskfq4godj4ka2a637i5lq41o5、O_RDWR) failed:Permission denied(13)in Unknown on line 0 PHP Warning:Unknown:Failed to write session data(files)。 セッションの現在の設定が正しいことを確認してください。 (/ var/lib/php/session)が不明です。
明らかにこれは許可の問題です。セッションフォルダーの所有者/グループは、Webサーバーのユーザー、NGINXです。 PHP-FPMはnobody
として実行されるため、nginxグループに追加することはそれほど簡単ではありません。
一時的な解決策は、/var/lib/php/session
の権限を777
に設定することです。ただし、「ベストプラクティス」ではないような気がします。
デーモンの書き込みアクセスをフォルダーに割り当てる必要があるが、nobody
として実行されている場合のベストプラクティスは何ですか?
私たちの正しい権限
chown -R nobody:nogroup /var/lib/php/session
なので php-cgi
はnobody
として実行されますが、NGinxはユーザーnginx
として実行されます
nginxを使用すると、システムアップデートを実行するときにこれに遭遇する可能性があります。
システムを更新すると、/var/lib/php/session
のグループがApacheに変更されることがあります。
アクセス許可を777に設定する代わりにSudo chgrp nginx /var/lib/php/*
を実行してください。これは悪い習慣です。
それは少なくとも私にとってはうまくいった。
使用する /etc/php.ini
session.save_path ディレクティブ。
一時的な解決策は、/ var/lib/php/sessionのアクセス許可を777に設定することです。ただし、「ベストプラクティス」ではないような気がします。
「この設定を誰でも読み取り可能なディレクトリのままにしておくと、サーバー上の他のユーザーが、そのディレクトリ内のファイルのリストを取得してセッションをハイジャックできる可能性があります。」
各php-fpmプールの/ var/lib/php/sessionに0700権限のフォルダーを作成する必要がありました。
このフォルダーの所有者は、php-fpmプールのユーザーとグループです。
そして/ var/lib/php/sessionが0777になりました。
この方法が最も安全だと思います。このセッションは、php-fpmプールのユーザーにのみ表示されます。
私は同じ問題を抱えていて解決しました。私は/tmp
に行き(そこにses_ *ファイルがあります)、それらをすべて削除しました。その後、すべてがOKでした。
私が知る限り、システムが古いロックされたファイルに書き込もうとしていたことがわかります。
この問題は、php.ini
で遊んだ後に発生しました。私は人生から数年を失いましたが、最終的には解決策を見つけました。
正しい方法は、セッションフォルダーの所有権を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セッションパスの場所は、/etc/php.ini
の下のsession.save_path
にあります。 /var/lib/php/session
がデフォルトです。
PHPセッションフォルダーの所有権とグループを更新するコマンド
chown -R nginx:nginx /var/lib/php/session
そして、700
のchmodを使用しても問題ありません。
ディレクトリ/ var/lib/php/sessionsにはスティッキービットのパーミッションが必要です。
Sudo chmod 1773 /var/lib/php/sessions
ls -al /var/lib/php/
drwxr-xr-x 4 root root .
drwxr-xr-x 51 root root ..
drwxr-xr-x 3 root root modules
drwx-wx-wt 2 root root sessions
@ Judderの回答に基づいて、それを機能させるには、次のコマンドを追加してreadおよびwriteのアクセス許可をnobodyに付与する必要がありましたおよびnogroup:chown -R nobody:nogroup /var/lib/php/session
Sudo chmod -R ug+rw /var/lib/php/sessions
chmodは、指定されたフォルダのアクセス許可を変更します
-Rは、指定されたフォルダ内に作成されたフォルダとファイルに同じ権限を適用します
for user
gグループ用
r読み取り許可
w書き込み許可