Добрый день уважаемые!
Выставляю на Ваш суд свою поделку. Просьба сильно не пинать:) Конечно ещё
сыровата... но я уже кушаю:)))
Просто не нашёл аналогичного... может плохо искал.... вот и пришлось
покодить немножко. Надеюсь полезная будет:)
Сервис "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
Вот тут
https://nginx.org/en/docs/http/ngx_http_ssl_module.html
написано:
For the OCSP stapling to work, the certificate of the server certificate
issuer should be known. If the ssl_certificate file does not contain
intermediate certificates, the certificate of the server certificate
issuer should be present in the ssl_trusted_certificate file.
For a resolution of the OCSP responder hostname, the resolver directive
should also be specified.
И ещё:
For verification to work, the certificate of the server certificate
issuer, the root certificate, and all intermediate certificates should
be configured as trusted using the ssl_trusted_certificate directive.
По-этому я взял и сделал всё ровно наоборот: не стал указывать ни
resolver ни ssl_trusted_certificate. Включил только лишь:
ssl_stapling on;
ssl_stapling_verify on;
И мои сертификаты не содержат цепочки доверия, только лишь сам сертификат.
1. Почему ocsp работает и это не отражено в документации?
(я вижу OCSP Response Data в openssl s_client -connect hostname:443
-tls1_2 -tlsextdebug -status)
2. Как вычисляются значения resolver и ssl_trusted_certificate, когда
они не указаны?
nginx 1.14.1-1~bpo9+1 stretch-backports
--
sergio.
Изменения в nginx 1.15.10 26.03.2019
*) Изменение: теперь при использовании имени хоста в директиве listen
nginx создаёт listen-сокеты для всех адресов, соответствующих этому
имени (ранее использовался только первый адрес).
*) Добавление: диапазоны портов в директиве listen.
*) Добавление: возможность загрузки SSL-сертификатов и секретных ключей
из переменных.
*) Изменение: переменная $ssl_server_name могла быть пустой при
использовании OpenSSL 1.1.1.
*) Исправление: nginx/Windows не собирался с Visual Studio 2015 и новее;
ошибка появилась в 1.15.9.
--
Maxim Dounin
http://nginx.org/
Привет!
Проблема — высокое число timewait коннекшнов между nginx-proxy и
бэкендами (до 30-40к), уровень трафика — десятки тысяч запросов в
секунду извне, в основном короткие сессии на несколько запросов. Стек
Centos 6 настроен на переиспользование tw sockets - tw_reuse=1,
tcp_fin_timeout низкий (2с).
nginx/1.14.0, ~ 25 fastcgi backends
upstream all {
hash $shard_key consistent;
server server10.local:9988 max_fails=0 fail_timeout=1s weight=100;
server server11.local:9988 max_fails=0 fail_timeout=1s weight=100;
..
..
..
server server33.local:9988 max_fails=0 fail_timeout=1s weight=100;
server server34.local:9988 max_fails=0 fail_timeout=1s weight=100;
keepalive 100;
}
fastcgi_pass all;
fastcgi_keep_conn on;
fastcgi_next_upstream off;
fastcgi_buffers 16 16k;
fastcgi_buffer_size 32k;
fastcgi_connect_timeout 20ms;
fastcgi_read_timeout 75ms;
fastcgi_intercept_errors on;
error_page 500 501 502 503 504 = $failover;
Вероятно, высокое количество TW соединений вызвано поведением-настройкой
Nginx, а именно необходимостью слать заглушку при достижении read
timeout до апстрима (75мс), в этом случае Nginx закрывает соединение с
апстримом принудительно (TCP RST), шлет фэиловер респонс клиенту и
переоткрывает его снова. Мы видим около 30-35 RST пакетов в секунду в
направлении бэкендов от Nginx, что соотвествует числу фейловеров в
секунду по тому же апстриму согласно access/error.log.
Вопрос — верны ли рассуждения о причинах высокого числа TW соединений
между прокси и бэкендами и как их можно уменьшить средствами нжинкс,
если это возможно?
Спасибо
--
С уважением, Олег
Добрый день коллеги.
А кто-нибудь уже использует в продакшене вот этот модуль
https://github.com/opentracing-contrib/nginx-opentracing?
Мы вот планируем его потестировать, но хотелось бы получить фидбек от тех
кто уже его шатал. Насколько оно рабочее-падучее?
Коллеги,
Если бы поставили задачу запустить под Linux/FreeBSD виндовое
приложение, реализованное как CGI-сценарий в виде .exe файла, как бы вы
подошли?
Данный виндовый exe-шник работает как cgi из-под виндового Apache, и
вроде как нормально запускается из Wine.
Может есть какой-нибудь FastCGI сервер, который работает под Wine, и
к нему уже ходить из nginx?
--
Victor Sudakov, VAS4-RIPE, VAS47-RIPN
2:5005/49@fidonet http://vas.tomsk.ru/
Здравствуйте!
Есть симлинк
/home/live -> /home/releases/live/1.2.9
при деплое он меняется на
/home/live -> /home/releases/live/1.2.10
а код продолжает работать версии 1.2.9 .
Преполагаю, что должен помочь такой патч к конфигу nginx
location /live/ {
+ root /home/live;
include fastcgi_params;
- fastcgi_param SCRIPT_FILENAME
/home/live/register_user_new.php;
+ fastcgi_param SCRIPT_FILENAME
$realpath_root/register_user_new.php;
}
Верно? Короче говоря, непосредственно указать путь в fastcgi_param
симлинки кешируются, а с realpath_root - всегда актуальны?
С уважением, Иван Прокудин.
Здравствуйте!
Помогите пожалуйста написать rewrite. Мне нужно все ссылки вида
http://some/url пробрасывать на http://some/url.html
Т.е. три условия: request_uri не пустой, в конце урл нет слэша и урл не
заканчивается на ".html"
Пока дошел вот до этого:
rewrite ^/(.+[^/])(?!.*\.html)$ $1.html permanent;
Но работает не так как надо.
Спасибо за помощь.
Posted at Nginx Forum: https://forum.nginx.org/read.php?21,283447,283447#msg-283447