質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
NFS

NFS (Network File System) とは、ネットワークを介して外部ストレージにアクセスするための分散ファイルシステムです。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

セッション

Sessionはクライアントがサーバに送ったすべてのリクエストのことを指します。

Q&A

解決済

2回答

6496閲覧

NFSで共有している領域にPHPセッション情報を書き込めない

Yama-one

総合スコア11

NFS

NFS (Network File System) とは、ネットワークを介して外部ストレージにアクセスするための分散ファイルシステムです。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

セッション

Sessionはクライアントがサーバに送ったすべてのリクエストのことを指します。

0グッド

1クリップ

投稿2015/08/25 14:04

初めて質問致します!

現在、複数のWEBサーバでセッション情報を共有するために
PHPのセッション保存領域をNFSでマウントした領域を指定しております。

CentOS 6.5 , apache 2.2.3 , php 5.3.3 の組み合わせの場合は、
php のセッション保存先をNFSでマウントした領域を指定しても
問題なくセッションデータが保存できておりましたが、新しく

CentOS 6.7, apache 2.2.15, php 5.6.12 で構築しなおしたところ、
全く同じようにセッション保存先をNFSでマウントした領域にすると
セッションファイルは作成されますが、書き込みができない状態となり
セッションが利用できません。

セッションの保存先(php.ini の session.save_path)を、NFSでマウントした
領域以外のローカルの領域を指定すると正常にセッションファイルが書き込まれます。

また、NFSでマウントした領域にPHP側で、ファイルを作成して書き込みをし
保存する処理を作成し、ブラウザからアクセスして apache 権限でファイルを
作成させても、正常にファイルが作成され、書き込みもされています。

セッションのファイルを作成するときだけ書き込めません。
その際のエラーログは以下になります。

PHP Warning: Unknown: Failed to write session data (files). Please verify that the current setting of session.save_path is correct (設定したセッションのパス) in Unknown on line 0.

上記は、書き込み権限が無いというエラーかと思います。
そのため、セッション保存領域のパーミッションを 777 にいたしましたが、それでも
同じエラーとなってしまいました。

こちら、PHP が 5.6 となったことで、NFSのマウント領域にセッションの書き込み制限が
追加されたとか、そのようなことはございますでしょうか。

全く書き込めなくて困っております。
どうか、よろしくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

pi-chan

2015/08/25 15:01

念のための確認ですが、php.ini に実際に記載されいている session.save_path の値に間違いはありませんか?(目視ではなく、コピペした値を実際にlsしてみるなど再確認を) それと、php.ini の更新後、サーバーを再起動するなどして、最新の設定値が実際に反映されていますか?
Yama-one

2015/08/25 15:22

ご確認ありがとうございます! はい。おっしゃるように別のテキストファイルにパスをコピペして、それをphp.iniのsession.save_pathに貼り付けてパスの間違いが無いように致しました。 その後はApacheの再起動を行い動作確認を致しておりますが、やはり空のファイルは作成されるのですが、書き込みがされない状態です。
eripong

2015/08/25 15:22

エラーメッセージは、他には出ていませんか?それと、セッションファイルは作成されるが空のファイルであるという認識であっていますか?
Yama-one

2015/08/25 15:28

ご確認ありがとうございます!エラーメッセージはそれ以外はありませんでした。セッションファイルはおっしゃる通りで、ファイルは作成されますが、空のファイルとなっております。
eripong

2015/08/25 15:52

作成されたセッションファイルの所有者、グループはどうなっていますか?
Yama-one

2015/08/25 16:18

ご確認ありがとうございます!作成されたセッションファイルの所有者、グループは、NFSでのマウント領域のため所有者、グループ共に「nfsnobody」となっております。パーミッションは600で rw------- となっております。
guest

回答2

0

ベストアンサー

この現象のようですね。

Stack Overflow では5.5.12のchangelogにあると記述されていますが、
ここを見ると5.4.28で対応されたようです。

セッションのファイルのオープン後に、PHPのプロセスのuidと、
ファイルの所有者を比較して、一致していないとエラーになります。

NFSの設定で、apacheユーザとして書き込めるようにできれば、
セッションのファイルに書き込めるようになるはずです。
設定できない場合は、残念ながら対応できなそうです。

投稿2015/08/25 16:30

編集2015/08/25 16:35
eripong

総合スコア1546

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Yama-one

2015/08/25 16:48

ご回答ありがとうございます! まさにこれですね!!セキュリティ強化?のためなのかもしれませんが、これではNFSでセッションを共有することはちょっとむずかしそうです。。。 NFSの設定でapacheユーザでも書き込めるようにもできますが、ちょっと変更が大きいのと、apacheユーザのuidをNFSクライアントとサーバ側で合わせる必要がありそうなのでちょっと厳しいですね。 これは、別の方法でセッションを管理することを検討します。 ありがとうございました!
guest

0

この情報が参考になりませんか?
どうやら、NFS で共有されている共有領域では flock が効かないことが不具合の原因のようです。
それで、session.save_handler = files とすれば一応セッション情報を書き出せるようになるらしいですが、やはり「予期しない動作」はある程度覚悟する必要があるらしいです。
少しでもご参考になれば幸いです。

投稿2015/08/25 15:31

pi-chan

総合スコア5936

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Yama-one

2015/08/25 16:36

ご回答ありがとうございます! 共有領域ではflockが効かないためにセッション情報がうまく保存できないんですね。。 それでしたら、session.save_handler を files ではなくて、redis や memcached などにして、特定のサーバに接続するようにしてセッションを共有したほうが確実そうですね! ちょっとそちらも試してみたいと思います。 ご回答ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問