Я создал простой скрипт загрузки в php, который берет файл, отправленный из формы, и помещает его в нужный каталог. Проблема в том, что по какой-то причине, когда вы пытаетесь показать этот файл в браузере, сервер отвечает сообщением 403 – Forbidden. Фактически я модифицировал сценарий, чтобы он сначала сделал копию файла из папки tmp, а затем переместил его с другим именем:
copy($_FILES['photo']['tmp_name'],$new_file_name); move_uploaded_file($_FILES['photo']['tmp_name'], 'm_'.$new_file_name);
Так что, если я загружаю файл.jpg, он создает file.jpg (скопирован) и m_file.jpg (перемещен). На сервере оба файла находятся в одной и той же папке и выглядят одинаково с теми же правами пользователя и группы , за исключением того, что domain.com/file.jpg показывает изображение, а domain.com/m_file.jpg возвращает ошибку 403.
Если отключить nginx и заставить его работать с apache, все работает отлично. Я переработал файлы nginx conf, но нет ничего странного (на самом деле, используется конфигурация по умолчанию)
Обновление: как ни странно, кажется, что проблема возникает только в конфигурациях, где версия PHP больше 5.3 и выполняется как «приложение fpm, обслуживаемое nginx». Таким образом, он отлично работает с 5.3.3, но не работает с php 5.5 или 7, если вы не выполняете его как приложение FastCGI, обслуживаемое Apache,