Перейти к содержимому

Nginx как файловый сервер

  • автор:

nginx

Модуль ngx_http_dav_module предназначен для автоматизации задач управления файлами на сервере по протоколу WebDAV. Модуль обрабатывает HTTP- и WebDAV-методы PUT, DELETE, MKCOL, COPY и MOVE.

По умолчанию этот модуль не собирается, его сборку необходимо разрешить с помощью конфигурационного параметра —with-http_dav_module .

Пример конфигурации
Директивы
Синтаксис: create_full_put_path on | off ;
Умолчание:
Контекст: http , server , location

По спецификации WebDAV-метод PUT может создавать файл только в уже существующем каталоге. Данная директива разрешает создавать все необходимые промежуточные каталоги.

Синтаксис: dav_access пользователи : права . ;
Умолчание:
Контекст: http , server , location

Задаёт права доступа для создаваемых файлов и каталогов, например,

Если заданы какие-либо права для group или all , то права для user указывать необязательно:

Синтаксис: dav_methods off | метод . ;
Умолчание:
Контекст: http , server , location

Разрешает указанные HTTP- и WebDAV-методы. Параметр off запрещает все методы, обрабатываемые данным модулем. Поддерживаются следующие методы: PUT , DELETE , MKCOL , COPY и MOVE .

Файл, загружаемый методом PUT, записывается во временный файл, а потом этот файл переименовывается. Начиная с версии 0.8.9 временный файл и его постоянное место хранения могут располагаться на разных файловых системах. Однако нужно учитывать, что в этом случае вместо дешёвой операции переименовывания в пределах одной файловой системы файл копируется с одной файловой системы на другую. Поэтому лучше, если сохраняемые файлы будут находиться на той же файловой системе, что и каталог с временными файлами, задаваемый директивой client_body_temp_path для данного location.

При создании файла с помощью метода PUT можно задать дату модификации, передав её в поле заголовка “Date”.

Синтаксис: min_delete_depth число ;
Умолчание:
Контекст: http , server , location

Разрешает методу DELETE удалять файлы при условии, что число элементов в пути запроса не меньше заданного. Например, директива

Русские Блоги

В наших программных приложениях часто есть некоторые файлы конфигурации или файлы версий, которые необходимо загрузить. В настоящее время, если эти файлы загрузки помещены в контейнер программы, время загрузки может быть слишком большим или может быть выполнено большое количество одновременных загрузок. влияет на программу, если размер файла слишком велик. Обычный доступ. Таким образом, мы можем отделить файловый сервер от программного сервера. Убедитесь, что количество загрузок не влияет на доступность программы.

Предпосылки:

На сервере установлен сервис nginx

Новый файл конфигурации файлового сервера:

Создайте файл file-18080.conf в каталоге /etc/nginx/conf.d. Ссылка на команду:

Затем добавьте в файл следующий контент

Примечание: 1. Если каталог не существует, вам необходимо создать его вручную 2. Правило именования файла конфигурации лучше всего показывает порт; он понятен с первого взгляда, чтобы предотвратить последующие конфликты 3. Каталог для хранения файл (/ home / mm / version-file) необходимо создать вручную, иГарантированный авторитет; В то же время необходимо убедиться, что файловое пространство каталога относительно велико. 4. По умолчанию nginx записывает доступ к файлу журнала по умолчанию. log в каталог с большим пространством. Следовательно, вам необходимо настроить путь к access_log в соответствии с реальной ситуацией.Если вам не нужен этот журнал, вы можете отключить функцию журнала.

access_log off;

Включите пользовательский файл конфигурации в nginx.conf

Добавьте ссылки в файл конфигурации nginx.conf

Примечание. Команда изменения импортирует все файлы конфигурации, заканчивающиеся на .conf, в каталог /etc/nginx/conf.d. Фактическая операция зависит от реальной ситуации.

После добавления эффекта:

Добавьте собственный файл конфигурации в nginx.conf

Ввести индивидуальную конфигурацию

Настройка завершена, перезапустите nginx

Войдите в каталог sbin nginx, перезапустите nginx,

После запуска проверьте журнал nginx и убедитесь, что с конфигурацией нет проблем. Введите в браузере

В соответствии с текущей конфигурацией введите http://10.0.1.228:18080

Файловая структура пути конфигурации местоположения в настраиваемом файле конфигурации

Отобразить файловую структуру пути в локации

Конфигурация и версия, показанные на рисунке, являются двумя каталогами в каталоге местоположения в файле конфигурации.

WebDav и Nginx

Не так давно в одном из своих проектов мне понадобилось иметь возможность передачи файлов посредством метода PUT, без скрипта-обработчика на принимающей стороне, принять и обработать файл должен был сам сервер. Так же была задача реализовать это не на Apache, а на его собрате — Nginx.

В итоге своих изысканий у меня получилась такая схема — скрипт на PHP получает адрес файла и делает запрос к серверу, а он в свою очередь получает файл и складывает в требуемую папочку.

Приводить дальнейшие примеры по установке, настройке и отработке взаимодействий я буду отталкиваясь от debian-based ОС.

Сторона сервера, Nginx

Скачиваем, компилируем и устанавливаем сервер с требуемым модулем:

wget nginx.org/download/nginx-1.1.1.tar.gz
tar -xvf nginx-1.1.1.tar.gz
cd nginx-1.1.1

./configure —sbin-path=/usr/sbin —conf-path=/etc/nginx/nginx.conf \
—error-log-path=/var/log/nginx/error.log \
—pid-path=/var/run/nginx.pid \
—lock-path=/var/lock/nginx.lock \
—http-log-path=/var/log/nginx/access.log \
—http-client-body-temp-path=/var/lib/nginx/body \
—http-proxy-temp-path=/var/lib/nginx/proxy \
—http-fastcgi-temp-path=/var/lib/nginx/fastcgi \
—with-http_stub_status_module \
—with-http_ssl_module \
—with-http_dav_module

make && make install

Настраиваем конфигурацию:
При компиляции мы указали что конфигурационный файл будет лежать в /etc/nginx/nginx.conf

Прописываем новую секцию server, так как надо чтобы webdav работал на другом порту — так, и безопасней, и удобней.

server <
listen 7500; #порт на котором будет слушать nginx
server_name ip-адрес-сервера;
charset utf-8;

location / <
expires max;
root /путь/до/требуемой/папки; #по этому пути будут складываться полученный PUT’ом файлы
client_max_body_size 20m;
client_body_temp_path /usr/local/nginx/html/;
dav_methods PUT; #разрешенные методы, нам требуется только PUT

create_full_put_path on; #при отсутствии вложенных папок, при включенной директиве, nginx автоматически создаст иерархию
dav_access user:rw group:r all:r; #права на файлы

Хочу так же заметить что с настроенным модулем так же отрабатывают и остальные директивы WebDav указанные в конфигурационном файле Nginx: DELETE, MKCOL, COPY, MOVE.

Сторона «клиента», второго сервера, PHP-скрипт

Оговорим что в переменной $namefile уже содержится имя файла вида file.zip полученное тем или иным способом.

$url = «ip-адрес-сервера:7500/$namefile»;
$file = «/files/$namefile»;

$fp = fopen($file, «r»);
$curl = curl_init();

curl_setopt($curl, CURLOPT_VERBOSE, 1);
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_PUT, 1);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_INFILE, $fp);
curl_setopt($curl, CURLOPT_INFILESIZE, filesize($file));

Теперь, когда все установлено и настроено, мы можем обратиться к скрипту, передать путь до файла и скрипт передаст наш файл серверу, который в свою очередь без PHP, Perl или написанного на другом языке обработчика сможет принять и разместить файл на другом сервере.

Name already in use

If nothing happens, download GitHub Desktop and try again.

Launching GitHub Desktop

If nothing happens, download GitHub Desktop and try again.

Launching Xcode

If nothing happens, download Xcode and try again.

Launching Visual Studio Code

Your codespace will open once ready.

There was a problem preparing your codespace, please try again.

Latest commit

Git stats

Files

Failed to load latest commit information.

README.md

Nginx as file server

If you need to quickly share a file on a remote server, using a link, you can run nginx as file server.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

https://alkogolizm.vyvod-iz-zapoya-v-stacionare-samara11.ru/