Добрый день уважаемые!
Выставляю на Ваш суд свою поделку. Просьба сильно не пинать:) Конечно ещё
сыровата... но я уже кушаю:)))
Просто не нашёл аналогичного... может плохо искал.... вот и пришлось
покодить немножко. Надеюсь полезная будет:)
Сервис "ITCOD-DISK" Облачное хранилище.
-- Copyright (c) 2015 by Yura Vdovytchenko (max(a)itcod.com)
-- Copyright (c)itcod 2010-2015
-- version: 15.06.27
-- license: MIT
Назначение: Сетевой диск(хранилище) файлов по технологии WEBDAV.
С публикацией по http/https и индексный файл с контрольными суммами
md5/etc.
Предназначен для хранения и публикации NoSQL информационных массивов.
Принцип: Сервис-ориентированная архитектура построения. Nginx обеспечивает
стандартный протокол WEBDAV over HTTP/HTTPS. Lua-модули itcod обеспечивают
расширение функций и сетевые сервисы управления ITCOD-DISK'ом.
ITCOD UI WWII обеспечивает WEB-интерфейс между пользователем и сервисами.
ОТЛИЧИЕ ОТ АНАЛОГОВ
NoLAMP NoLEMP NoSQL SOA
На сервере только Nginx + Lua и никаких PHP SQL и т.д.
БАЗОВЫЕ КОМПОНЕНТЫ ITCOD-DISK
LINUX - операционная система
NGINX - http daemod (with WebDAV and Lua)
LUA - язык программирования
Resty - библиотека Lua
add - дополнительные библиотеки (см. require в *.lua)
ITCOD Lua Modules & Services - модули SOA ITCOD для операций с хранилищем
ITCOD WWII - web-интерфейс для ITCOD-DISK (в разработке)
БАЗОВЫЕ КОМПОНЕНТЫ ITCOD Lua Modules & Services
auth-dav.lua - авторизатор для HTTP/HTTPS/WEBDAV
md5index.lua - расширитель функций autoindex NGINX
itcod-user.lua - создание пользовательских юзербоксов на диске WEBDAV
itcod-exchange.lua - сервис транспорта файлов между пользователями и
дисками
itcod-search.lua - REST-сервис авторизованного поиска информации в закрытых
пользовательских массивах
libs/ - библиотека иконок типов файлов для md5index
Подробнее о компанентах см. https://ihome.itcod.com/max/project/
КОНФИГУРАЦИЯ NGINX
nginx version: nginx/1.7.11
built by gcc 4.4.4 20100630 (Red Hat 4.4.4-10) (GCC)
TLS SNI support enabled
configure arguments:
--prefix=/usr/share/nginx
--sbin-path=/usr/sbin/nginx
--conf-path=/etc/nginx/nginx.conf
--error-log-path=/var/log/nginx/error.log
--http-log-path=/var/log/nginx/access.log
--http-client-body-temp-path=/var/lib/nginx/tmp/client_body
--http-proxy-temp-path=/var/lib/nginx/tmp/proxy
--http-fastcgi-temp-path=/var/lib/nginx/tmp/fastcgi
--http-uwsgi-temp-path=/var/lib/nginx/tmp/uwsgi
--http-scgi-temp-path=/var/lib/nginx/tmp/scgi
--pid-path=/run/nginx.pid
--lock-path=/run/lock/subsys/nginx
--user=nginx
--group=nginx
--with-pcre-jit
--with-debug
--with-file-aio
--with-ipv6
--with-http_ssl_module
--with-http_realip_module
--with-http_addition_module
--with-http_xslt_module
--with-http_image_filter_module
--with-http_geoip_module
--with-http_sub_module
--with-http_dav_module
--add-module=/usr/src/nginx-dav-ext-module-master
--with-http_flv_module
--add-module=/usr/src/f4f-hds-master
--with-http_mp4_module
--with-http_gzip_static_module
--with-http_random_index_module
--with-http_secure_link_module
--with-http_degradation_module
--with-http_stub_status_module
--with-http_perl_module --with-mail
--with-mail_ssl_module
--with-http_auth_request_module
--add-module=/usr/src/echo-nginx-module-master
--add-module=/usr/src/nginx_md5_filter-master
--add-module=/usr/src/ngx_devel_kit-master
--add-module=/usr/src/lua-nginx-module-master
--with-cc-opt='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions
-fstack-protector
--param=ssp-buffer-size=4 -m64 -mtune=generic'
--with-ld-opt=' -Wl,-E,-rpath,/usr/local/lib'
КОНФИГУРАЦИЯ ВИРТУАЛЬНОГО WEB-СЕРВЕРА (WEBDAV)
Приведена конфигурация nginx работающего на виртуальной машине
за проксирующим первичным nginx. Для работы на первичном вам необходимо
изменить listen на 80 и 443. А так же не забудьте поправить основные
настройки на ваши собственные (имена сервера и т.д.)
Файл ihome.conf
server {
listen 7070;
server_name "~^ihome\d+\.itcod\.com$"
ihome.virtual.ko
ihome.itcod.com
;
server_name_in_redirect off;
expires epoch;
ssl off;
#default_type application/octet-stream;
set_real_ip_from 10.255.255.7;
real_ip_header X-Forwarded-For;
real_ip_recursive on;
access_log /var/log/nginx/ihome.itcod.com-access.log main;
resolver 10.255.255.1 [::1]:5353;
charset utf-8;
set $dir /opt/home;
set $testdir $dir$uri;
set $uri_type none;
if (-d $testdir) { # такая папка есть
set $uri_type dir;
rewrite ^(.*)$ $1/;
rewrite ^(.*)/+$ $1/;
}
if (-f $testdir) { # такой файл есть
set $uri_type file;
}
if ($request_method = "MKCOL") {
rewrite ^(.*)$ $1/;
rewrite ^(.*)/+$ $1/;
set $uri_type dir; #клиент webdav создает папку
}
if ($request_method = "PUT") {
set $uri_type file; #передаем только файлы
}
if ($request_method = "POST") {
set $uri_type file; #постим только файлы
}
set $sadm_passwd .uhtpsw;
set $user_passwd .htpasswd; #user:password[crypt(3)/md5/sha1]
set $user_permit .htpermit; #user:GET,PUT,....OPTIONS
set $user_permit_default GET,PROPFIND,OPTIONS; # Allow
merge_slashes on;
location / {
limit_req zone=itcod burst=200 nodelay;
limit_rate 2048k;
access_by_lua_file /etc/nginx/lua/auth-dav.lua;
dav_methods PUT DELETE MKCOL COPY MOVE;
dav_ext_methods PROPFIND OPTIONS;
create_full_put_path on;
dav_access user:rw group:rw;
client_body_temp_path /opt/itcod-dav.tmp/;
client_max_body_size 0;
autoindex on;
root $dir;
header_filter_by_lua_file /etc/nginx/lua/itcod-exchange.lua;
set $md5index on; #on/off nil=off # вкл/выкл обработчик
set $md5index_hash md5; #none/md5/md4/sha1/sha/ripemd160 nil=none # тип
выводых хэшей
set $md5index_size 50000; #kb nil=unlimit # не считать для файлов более N
kb
set $md5index_path on; #on/off nil=off # заменять относительный путь
ссылок на полный URI
set $md5index_nonblank on; #on/off nil=off # заменить множественные пробелы
одним
set $md5index_type on; #on/off nil=off # добавит в строки описание типа
file/directory/etc...
set $md5index_ico http://ihome.itcod.com/max/projects/libs/icons16ext/; #
путь к библиотека иконок
set $md5index_icopref icon-; # префикс имени файла иконки
#set $md5index_icosuf -icon; # суфикс имени файла иконки
set $md5index_icoext .gif; # расширение файла иконки
set $md5index_win _blank; # target window for !winext! files
set $md5index_winext htm.html.txt; # file extension for target windows
body_filter_by_lua_file /etc/nginx/lua/md5index.lua; # addon
обработчик
}
location ~/\.uht {
deny all;
}
location /search/ {
content_by_lua_file /etc/nginx/lua/itcod-search.lua;
}
location /user/ {
content_by_lua_file /etc/nginx/lua/itcod-user.lua;
}
}
ПРИМЕЧАНИЕ
Для программистов адекватных perl, проблем определить и загрузить
недостающие
модули require не составит труда. В случае если у вас, что то не получается
пишите тут или на max(a)itcod.com обязательно помогу.
ТЕКУЩИЕ РАБОТЫ
Формирование WebUI ITCOD-DISK
Posted at Nginx Forum: http://forum.nginx.org/read.php?21,259941,259941#msg-259941
Здравствуйте!
У меня наверное быстро решимая
проблема, но я просто решение вопроса
не вижу.
Работает у меня nginx 1.0.8
--------
nginx: nginx version: nginx/1.0.8
nginx: configure arguments: --with-http_gzip_static_module
--with-openssl=/usr/include --with-http_stub_status_module
--http-proxy-temp-path=/dev/shm/nginx/proxy_temp
--http-fastcgi-temp-path=/dev/shm/nginx/fastcgi_temp
--http-uwsgi-temp-path=/dev/shm/nginx/uwsgi_temp
--http-scgi-temp-path=/dev/shm/nginx/scgi_temp
--http-client-body-temp-path=/dev/shm/nginx/client_body_temp
--http-log-path=/var/log/nginx/access.log
--error-log-path=/var/log/nginx/error.log
--conf-path=/etc/nginx/nginx.conf --user=www-data --group=www-data
--------
и в соответствующем файле у меня стоит
в секции Server:
--------
location /status {
stub_status on;
access_log off;
allow 127.0.0.1;
deny all;
}
------
всё такие я получаю ошибку 404, когда я на
сервере наберу "GET domain/status"
В чем может состоить проблема?
Спасибо вам большое.
Андрей
Posted at Nginx Forum: http://forum.nginx.org/read.php?21,216178,216178#msg-216178
При включенном keepalive в upstream к FastCGI бекенду на PHP, появляются
ошибки 502, проблему нашли и воспроизводится она таким образом.
РНР скрипт, медленные операции выполняет в фон режиме после вызова функции
fastcgi_finish_request(), тестовый скрипт
<?php
ignore_user_abort();
fastcgi_finish_request();
sleep(10);
?>
конфигурация Nginx
upstream fpm
{
server 127.0.0.1:9000;
keepalive 8;
}
server
{
......
fastcgi_keep_conn on;
fastcgi_param SCRIPT_NAME /index.php;
fastcgi_pass fpm;
......
}
Лог ошибки Nginx
[error] 7945#0: *5 upstream sent unexpected FastCGI record: 3 while reading
response header from upstream ...
Лог ошибок PHP-FPM пустой.
В upstreem кеше 8 конектов, ошибка появляется когда Nginx ждет от PHP-FPM
ответа в конекте который ещё не освободился, по моей логике PHP-FPM должен
ответить Nginx когда скрипт завершит работу (sleep(10)) но этого не
происходит и Nginx отдает 502 ошибку, судя по всему PHP-FPM после
освобождения конекта не смог обработать следующий запрос от Nginx в этом
конекте, подозреваю что функции fastcgi_finish_request() не рассчитана на
повторное использования конекта.
Или я что-то делаю не правильно?
Posted at Nginx Forum: http://forum.nginx.org/read.php?21,247596,247596#msg-247596
Здравствуйте!
Проблема такая: после изменения
конфига и reload-a Nginx эти изменения не
работают. Если сделать restart - все
работает.
Проблема появилась с ростом кол-ва
виртуальных хостов (сейчас 520 шт) и
соответствующим ростом размера
конфигов, т.к. раньше все было Ок.
Структура конфигов такая: 1 общий nginx.conf,
в который включаются конфиги
виртуальных хостов: include hosts/*.conf
Соответственно изменения внутри этих
hosts/*.conf не работают если не сделать restart
Nginx.
Версия сейчас 0.8.54, была 0.7.67.
Проявлялось на обоих.
Есть-ли какие-то варианты на что нужно
посмотреть ?
Posted at Nginx Forum: http://forum.nginx.org/read.php?21,179057,179057#msg-179057
Здравствуйте, Nginx-ru.
Подскажите, где почитать как работают вложенные локейшны
(последовательность проверки, как определяется результат) ?
Спасибо.
--
С уважением,
Pavel mailto:pavel2000@ngs.ru
Привет!
Подскажите, пожалуйста, есть ли сейчас в nginx поддержка PROXY-протокола
для апстрим серверов (через proxy_pass, или в рамках upstream-секции). В
документации нашел только про поддержку приема PROXY-соединений, но вот про
бекенды ни слова.
--
С уважением,
Максим Куприянов
Всем добрый вечер.
Использую на сайте кеширование fast-cgi запросов отдельных страниц.
Страницы, которые нужно кешировать отдают X-accel-expires. Также для
некоторых страниц нужен был другой fastcgi_cache_key в зависимости от
$request_uri.
До версии 1.11 конфиг выглядел примерно так:
location ~ \.php$ {
set $fastcgi_cache_key
$request_method|$host|$uri|$request_uri|$cookie_currency|$cookie_show_mode;
if ($request_uri ~ ^/objekti/.+){
set $fastcgi_cache_key
$request_method|$host|$uri|$request_uri|$cookie_currency|$http_x_requested_with;
}
if ($request_uri ~ ^/xml/yml.php){
set $fastcgi_cache_key
$request_method|$host|$uri|$arg_type|$arg_nosim;
}
.........
fastcgi_cache_key $fastcgi_cache_key;
.........
fastcgi_pass php-fpm;
}
И это работает.
С версии 1.11 map начал понимать несколько переменных в качестве результата.
Т.о. сделал такую секцию:
map $request_uri $fastcgi_cache_key {
default
$request_method|$host|$uri|$request_uri|$cookie_currency|$cookie_show_mode;
~^/objekti/.+
$request_method|$host|$uri|$request_uri|$cookie_currency|$http_x_requested_with;
~^/xml/yml.php $request_method|$host|$uri|$arg_type|$arg_nosim;
}
Убрал set и if из php-локейшена и получил "subrequests cycle while
processing" в логах везде, где использую ssi. Вывел обе переменные - они
равны. Заранее благодарен
Posted at Nginx Forum: https://forum.nginx.org/read.php?21,267467,267467#msg-267467
nginx/0.7.65
имеем в логах такого рода ошибки.
sendfile() failed (9: Bad file descriptor) while sending request to
upstream, client: x.x.x.x, server: foo.ru, request: "POST
/edit/19067.php HTTP/1.1", subrequest: "/service/cache.php", upstream:
"http://10.0.1.42:8200/service/cache.php?method=ssi&cacheid=4409", host:
"foo.ru", referrer: "http://foo.ru/edit/19067.php"
к сожалению воспроизвести
неполучилось, но есть предположение,
что перед отправкой суб-запроса
переданный в форме файл уже почищен. в
связи с этим вот такая вот ситуация
складывается.
локейшин, который обрабатывает сси
следующий:
location ^~ /service/ {
default_type text/html;
error_page 404 502 504 = @dynamic;
if ( $request_method = POST ) {
return 404;
}
if ( $arg_cacheid = "" ) {
return 404;
}
set $memcached_key "cache|$arg_cacheid";
memcached_connect_timeout 2;
memcached_read_timeout 5;
memcached_send_timeout 5;
memcached_pass @cache;
}
баг?
Posted at Nginx Forum: http://forum.nginx.org/read.php?21,118976,118976#msg-118976