フォームから送信されたファイルを受け取り、それを目的のディレクトリに配置する単純なアップロード スクリプトを php で作成しました。問題は、何らかの理由で、このファイルをブラウザで表示しようとすると、サーバーが 403 - Forbidden メッセージで応答することです。実際、スクリプトを変更して、最初に tmp フォルダーからファイルのコピーを作成し、次に別の名前で移動します。
copy($_FILES['photo']['tmp_name'],$new_file_name);
move_uploaded_file($_FILES['photo']['tmp_name'], 'm_'.$new_file_name);
つまり、file.jpg をアップロードすると、file.jpg (コピー) と m_file.jpg (移動) が作成されます。サーバー上では、両方のファイルが同じフォルダーにあり、同一のように見えます。ただし、 domain.com/file.jpg が画像を表示し、 domain.com/m_file.jpg が 403 エラーを返すことを除いて、 user と group という同じ権限を持ちます。
ただし、nginx を無効にして apache で動作させると、すべて正常に動作します。nginx conf ファイルを修正しましたが、奇妙なことは何もありません (実際にはデフォルトの構成を使用しています)
更新: 奇妙なことに、PHP のバージョンが 5.3 よりも大きく、「nginx が提供する fpm アプリケーション」として実行される構成でのみ問題が発生するようです。したがって、5.3.3 では問題なく動作しますが、「Apache が提供する fastCGI アプリ」として実行しない限り、php 5.5 または 7 では動作しません。