Как стать автором
Обновить

WebDav и Nginx

Время на прочтение 2 мин
Количество просмотров 32K
Приветствую вас, господа.

Не так давно в одном из своих проектов мне понадобилось иметь возможность передачи файлов посредством метода 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; #права на файлы

limit_except GET {
allow all;
}
}
}


Хочу так же заметить что с настроенным модулем так же отрабатывают и остальные директивы 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));

curl_close($curl);
fclose($fp);


Итог


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

Надеюсь что написанный текст был вам интересен, за сим откланяюсь.
Теги:
Хабы:
Если эта публикация вас вдохновила и вы хотите поддержать автора — не стесняйтесь нажать на кнопку
+3
Комментарии 9
Комментарии Комментарии 9

Публикации

Истории

Ближайшие события

Московский туристический хакатон
Дата 23 марта – 7 апреля
Место
Москва Онлайн
Геймтон «DatsEdenSpace» от DatsTeam
Дата 5 – 6 апреля
Время 17:00 – 20:00
Место
Онлайн