Добрый день уважаемые!
Выставляю на Ваш суд свою поделку. Просьба сильно не пинать:) Конечно ещё
сыровата... но я уже кушаю:)))
Просто не нашёл аналогичного... может плохо искал.... вот и пришлось
покодить немножко. Надеюсь полезная будет:)
Сервис "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
В конфигурации балансировщика настроен кэш
proxy_cache_methods не указан явно, вследствии чего методы “GET” и “HEAD”
всегда кэшируются.
Каким образом реализовать кэширование только по заголовку s-maxage
Posted at Nginx Forum: https://forum.nginx.org/read.php?21,282512,282512#msg-282512
Из чего получается request_time? Прочитав данную доку:
https://www.nginx.com/blog/using-nginx-logging-for-application-performance-…,
сделал для себя вывод что :
$request_time = $upstream_connect_time + $upstream_header_time +
$upstream_response_time+$вермя_передачи_до_клиента
При увеличении трафика в логах балансера вижу следующее:
request_time = 5.009
upstream_connect_time=0.000
upstream_header_time=0.008
upstream_response_time=0.009
Кейс воспроизводится на разных проектах при увеличении нагрузки (50-100ps в
зависимости от проекта). Что происходит 5 секунд?
Posted at Nginx Forum: https://forum.nginx.org/read.php?21,282485,282485#msg-282485
Изменения в nginx 1.15.8 25.12.2018
*) Добавление: переменная $upstream_bytes_sent.
Спасибо Piotr Sikora.
*) Добавление: новые директивы в скриптах подсветки синтаксиса для vim.
Спасибо Геннадию Махомеду.
*) Исправление: в директиве proxy_cache_background_update.
*) Исправление: в директиве geo при использовании unix domain
listen-сокетов.
*) Изменение: при использовании директивы ssl_early_data с OpenSSL в
логах могли появляться сообщения "ignoring stale global SSL error ...
bad length".
*) Исправление: в nginx/Windows.
*) Исправление: в модуле ngx_http_autoindex_module на 32-битных
платформах.
--
Maxim Dounin
http://nginx.org/
Есть конфигурация
http {
...
# The map is bot browsers
map $http_user_agent $bot {
default 0;
"~Chrome" 1;
}
...
}
server {
...
# Logging access to the site
access_log /var/log/nginx/recipes.log main if=!$bot;
access_log /var/log/nginx/recipes.bot.log main if=$bot;
...
}
смысл задумки разделить лог на два файла, но почему-то пишется сразу в два
файла если браузер
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like
Gecko) Chrome/71.0.3578.98 Safari/537.36
хотя по идеи должно писаться только в файл recipes.bot.log
Может кто-нибудь сталкивался с подобной проблемой?
Posted at Nginx Forum: https://forum.nginx.org/read.php?21,282446,282446#msg-282446
Добрый день
Время от времени в логах Nginx наблюдаю такие записи
2018/12/20 14:53:05 [error] 67589#0: *26303544 upstream timed out (60:
Operation timed out) while reading response header from upstream, client:
10.1.110.74, server: site.loc, request: "POST /transactions/credit/
HTTP/1.1", upstream: "http://10.62.145.96:33084/transactions/credit/", host:
"site.loc"
В момент таких ошибок, я проверял бэк, он работает, до порта досткуиваюсь.
Есть предположения что апстри становитс не рабочим из-за ошибок. Мол Nginx
вывел его сам.
Как можно это залогировать что бы точно знать причину таких ошибок?
Posted at Nginx Forum: https://forum.nginx.org/read.php?21,282422,282422#msg-282422
Здравствуйте.
Рад сообщить о выпуске новой версии NGINX Unit.
Это корректирующий выпуск, который нацелен на повышение стабильности Node.js
модуля. Нам удалось добиться существенных результатов и теперь поддержка
Node.js в лучшем состоянии.
Изменения в Unit 1.7 20.12.2018
*) Изменение: теперь rpath задается в модуле Ruby, только если библиотека
не найдена в путях по умолчанию; это позволяет соблюсти требования к
пакетированию в некоторых системах.
*) Исправление: не работали опции PHP "disable_functions" и
"disable_classes", заданные через управляющий API.
*) Исправление: не срабатывали Promises для данных из запросов в Node.js.
*) Исправление: различные проблемы совместимости с приложениями Node.js.
*) Исправление: в модуле Node.js происходила ошибка сегментации, если
приложение читало тело запроса после вызова request.end().
*) Исправление: в модуле Node.js происходила ошибка сегментации, если
приложение пыталось дважды отправить заголовок.
*) Исправление: при манипуляциях с полями заголовка ответа в модуле Node.js
не принималось во внимание, что регистр их имен не должен учитываться.
*) Исправление: неперехваченные исключения в Node.js не записывались в лог.
*) Исправление: глобальная установка модуля Node.js из исходников не
работала в некоторых окружениях; ошибка появилась в версии 1.6.
*) Исправление: обратная трассировка исключений при инициализации приложений
на Python не записывалась в лог.
*) Исправление: модуль PHP не собирался, если интерпретатор PHP был собран
с включенной потокобезопасностью.
Хайли лайкли, данный релиз станет последним в 2018 году.
И от всей нашей команды Unit-а я поздравляю вас с наступающим Новым Годом.
2018 год получился очень насыщенным с точки зрения развития проекта Unit.
Множество важных нововведений удалось реализовать, включая:
- Расширенное управление процессами, что позволяет динамически масштабировать
приложение в зависимости от нагрузки. Спасибо Максиму Романову, который
преимущественно работал над этой возможностью.
Документация: https://unit.nginx.org/configuration/#process-management
- Поддержка приложений на Perl, Ruby и Node.js. Спасибо Александру Борисову,
который занимался разработкой этих языковых модулей.
- TLS и интерфейс для управления хранилищем сертификатов, который позволяет
динамически загружать и перенастраивать сертификаты. Спасибо Игорю Сысоеву,
который работал вместе со мной над этой возможностью.
Документация: https://unit.nginx.org/configuration/#ssl-tls-and-certificates
- C API для языковых модулей был вынесен в отдельную библиотеку, что сильно
облегчило интеграцию с Node.js и помогло с предстоящим внедрением поддержки
Java приложений. Ещё раз спасибо Максиму Романову за эту работу.
- Начальная поддержка логирования доступа.
Документация: https://unit.nginx.org/configuration/#access-log
- Расширенные настройки приложений, включая переменные окружения, аргументы
запуска, опции PHP и путей к php.ini.
Не могу вообразить выпуск всей этой функциональности без кропотливой работы
нашего инженера по качеству Андрея Зеленкова. Он беспрестанно повышал покрытие
кода Unit-а функциональными тестами, проводил различное фаззинг-тестирование и
оповещал разработчиков о любом подозрительном поведении сервера.
Также одним из ключевых достижений этого года стало существенное улучшение
полноты и качества документации. Сайт unit.nginx.org теперь полностью
актуализирован и содержит информацию обо всех появившихся возможностях,
как в самых последних, так и во всех более ранних версиях Unit-а.
С этой задачей успешно справился наш технический писатель Артем Конев.
Кроме того, он продолжает перерабатывать документацию и планирует серию Howto
по настройке Unit-а в различных ситуациях и для запуска разных приложений.
Если у вас есть пожелания по конкретным приложениям, которые вы хотели бы
запускать в Unit-е, то, пожалуйста, создайте запрос по документации на GitHub:
- https://github.com/nginx/unit-docs/issues
Спасибо нашим системным инженерам: Андрею Белову и Константину Павлову,
которые обеспечивали свежими пакетами репозитории для различных дистрибутивов
и подготавливали образы для Docker-а.
Спасибо нашему продуктовому менеджеру Николаю Шадрину, который помогал со
стратегией развития и блестяще выступал на конференциях по всему миру.
Вы можете увидеть его в записи с недавней конференции NGINX Conf 2018,
где он демонстрировал последние возможности Unit-а:
- https://www.youtube.com/watch?v=JQZKbIG3uro
Безусловно всё, что я упомянул, было бы невозможно без нашего замечательного
сообщества пользователей. Они по достоинству оценили перспективы Unit-а и
начали постепенно переносить на него свои проекты. Благодарю всех, кто сообщал
о найденных ошибках и предлагал различные интересные идеи к реализации, оставлял
ценные пожелания по дальнейшему развитию проекта, которые безусловно будут
учтены по мере возможности. Мы приглашаем каждого принять участие через список
рассылки:
- http://mailman.nginx.org/mailman/listinfo/unit
или в GitHub:
- https://github.com/nginx/unit
Особенно хочется отметить 洪志道 (Hong Zhi Dao), как одного из самых активных
участников сообщества, который не только сообщает об ошибках, но и регулярно
вычитывает код, задает наводящие вопросы и присылает различные патчи с
улучшениями. Спасибо ему огромное за вклад в проект.
Отдельное спасибо ответственным за пакеты Unit-а в различных системах, среди
которых: Сергей Осокин (FreeBSD), Ralph Seichter (Gentoo), André Klitzing
(Alpine Linux) и Julian Brost (Arch Linux). Извините, если кто-то поддерживает
репозиторий с пакетами Unit-а в одном из дистрибутивов и не был упомянут.
Вы можете открыть запрос на GitHub для внесения вашего репозитория в секцию
Installation сайта unit.nginx.org:
- https://github.com/nginx/unit-docs/issues
К сожалению, нам не удалось достигнуть всех наших грандиозных целей на этот год.
Разработку некоторой функциональности пришлось перенести на будущий год.
Сейчас продолжается работа над поддержкой WebSocket, модулем Java,
маршрутизацией запросов и раздачей статики.
Мы уже достигли неплохого прогресса в поддержке Java. Эта разработка ведется
в отдельном публичном репозитории на GitHub:
- https://github.com/mar0x/unit
Таким образом, если вы заинтересованы в запуске приложений на Java, то уже
можете принять участие и пробовать.
Множество других интересных возможностей и анонсов ждет Unit в 2019 году.
Спасибо всем, кто следит за проектом, и желаю всего наилучшего.
--
Валентин Бартенев