Проблемы с личными папками в NGINX


Итак, я настраивал свою установку Drupal 8, и у меня возникли проблемы с настройкой личной папки.

Я перешел к settings.php и указал путь, который я хотел для своей личной папки, как sites/default/files/private. Какое-то время казалось, что это работает хорошо, но теперь это не так.

Я настроил Drupal на использование личной папки в качестве местоположения по умолчанию для загрузки файлов, и он показывает путь sites/default/files/private в качестве пути к личной папке.

Теперь моя проблема в том, что я создал пользовательский тип содержимого с полем загрузки файла личной папки. Это для ограниченной области, которая у меня есть на веб-сайте, к которой я хочу, чтобы только авторизованные (вошедшие в систему) пользователи могли получить доступ - как к этой области, так и к файлам, связанным с ней.

Область была успешно заблокирована с помощью разрешений роли и отлично работает. Файлы, прикрепленные к содержимому, даже если параметры типа содержимого явно и правильно настроены на использование личной папки для загрузки, приводят к следующему поведение:

  • файлы, обслуживаемые прямым HTTP в sites/default/files, доступны независимо от состояния входа в систему Drupal - по назначению
  • файлы, обслуживаемые прямым HTTP в sites/default/files/private, блокируются с помощью 403, запрещенного NGINX, независимо от состояния входа в систему Drupal - как и предполагалось
  • файлы с ограниченным доступом, обслуживаемые Drupal в зоне ограниченного доступа с URI, аналогичным system/files/YEAR-MONTH, не отображают страницу 403, доступ к которой запрещен Drupal ( предполагаемый эффект), НО ВМЕСТО ЭТОГО:
    • если это изображения, я получаю страницу с ошибкой NGINX 404 НЕ НАЙДЕНО
    • если это файлы других типов, они доступны без ограничений ( именно то, что я пытаюсь предотвратить).

Прямо сейчас я заблудился, так как искал ответы на эти вопросы, но, похоже, не могу их найти.

Я использую общую настройку веб-сервера, в которой у меня нет прямого доступа к файлам NGINX .conf. Я также использую файл IMCE Модуль менеджера. Я думаю, что проблема с изображениями связана с каким-то NGINX conf, и поэтому мне придется связаться с сопровождающим веб-сервера, чтобы исправить это, но я хотел бы поделиться с ними некоторыми соображениями по этому поводу. Кроме того, чем можно объяснить, что файлы, загружаемые в личную папку, доступны без каких-либо ограничений?

Любая помощь была бы очень кстати, спасибо!

 1
Author: Joum, 2016-07-04

1 answers

Прошло некоторое время с тех пор, как я создал этот вопрос, и поэтому я, возможно, упустил довольно много деталей, но в конце концов я нашел решение.

ТЛ;ДР это, вероятно, следует отнести к nginx, чтобы покрыть все основания, связанные с ним. официальном рецепт для nginx Друпал мне очень помогли, возможно, вы захотите проверить, что первый. Хотя, если вы используете Drupal 8, вам нужно будет обновить/изменить некоторые настройки для него. Возможно, вы найдете некоторые из них здесь.

Не могу вспомнить много о моем конкретном случае, но этот контрольный список, возможно, стоит проверить в вашей настройке:

  • settings.php будьте внимательны и помните о параметрах, которые вы настроили в файле настроек. IIRC, я думаю, что значение пути к личной папке - это все, что я изменил в связи с этой проблемой.
  • Конфигурация Drupal - в бэкэнде администратора Drupal перейдите к Configuration > Media > File System и убедитесь, что выбран правильный параметр для вашего использования дело, как публичное, так и частное. Это настроит ваше местоположение загрузки файла по умолчанию, но может быть переопределено в определении типа контента, если я не ошибаюсь.
  • Определение типа контента - убедитесь, что ваш тип контента, используемый в поле файл, настроен правильно, а также в соответствии с вашими потребностями. Я думаю, что в какой-то момент я даже воссоздал свои типы контента, просто чтобы убедиться, что в БД нет устаревшей информации.
  • Разрешения на роль Drupal - это, вероятно, было одним из моя самая большая головная боль в этой проблеме. Убедитесь, что они правильно настроены, и тщательно протестируйте их. В этом процессе я обнаружил модуль Маскарад, который с тех пор мне очень помог.
  • Права доступа к папкам - Папки, которые вы хотите использовать как для частных, так и для общедоступных загрузок, должны быть доступны для записи Drupal/NGINX, но NGINX не должен разрешать доступ к ним по протоколу HTTP.
  • NGINX - это, безусловно, самая важная часть. Что вам в основном нужно, чтобы абсолютно убедитесь в том, что Drupal обрабатывает свои собственные URL-адреса, а все остальное обрабатывается NGINX соответственно. Это может очень быстро сбить с толку, поэтому вот еще несколько советов:
    • У Drupal будет собственный URL-адрес файла, который будет сгенерирован внутри и сохранен в БД. Это должно заставить Drupal отвечать и принимать HTTP-запросы на URL-адрес типа system/files/YEAR-MONTH.
    • NGINX, с другой стороны, должен позволить Drupal обрабатывать эти запросы, перехватывая и предотвращая прямой доступ к sites/default/files/private, или какую бы папку вы ни настроили для личных файлов.
    • Это следует исправить, установив правильную директиву NGINX относительно пути, который вы хотите/должны обрабатывать. Это может помочь. Кроме того, прочитайте о настройке NGINX Перузио , так как там много ценных крупиц информации (настройка D8 эквивалентна D7).
    • Я думаю, что некоторые конкретные директивы NGINX могут по-разному ориентироваться на определенные типы файлов (возможно, что-то связанное с типами MIME, не уверен). Этот мог бы объяснить, если ваша проблема возникает, например, с JPG, но не с PDF или наоборот. Однако не смог найти информацию об этом.

@Gokulnk Мне жаль, если этого недостаточно, но я действительно не могу вспомнить, что я сделал, чтобы это исправить. Надеюсь, это укажет вам правильное направление.

РЕДАКТИРОВАТЬ: Я нашел старое электронное письмо с сопровождающим веб-сервера, в котором обсуждаются некоторые директивы NGINX, содержащие некоторую информацию, которая может быть актуальной:

# handled by NGINX
location ~ ^/sites/default/files/private/ {
    return 403;
}  

# Handle private files through Drupal.
location ~ ^/system/files/ { # For Drupal >= 7
    try_files $uri /index.php?$query_string;
}
 5
Author: Joum, 2017-02-22 16:33:59