Проблемы с личными папками в 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 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 или наоборот. Однако не смог найти информацию об этом.
- У Drupal будет собственный URL-адрес файла, который будет сгенерирован внутри и сохранен в БД. Это должно заставить Drupal отвечать и принимать HTTP-запросы на URL-адрес типа
@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;
}