Максим, а почему такое значение по-умолчанию у директивы ssl_protocols?
В частности, протокол TLSv1.3 выключен, но вместо него включены
протоколы TLSv1 и TLSv1.1 - сейчас ведь наоборот рекомендуют делать.
Даже RFC вышел соответствующий еще в мае 2015 года,
https://tools.ietf.org/html/rfc7525#section-3.1.1
И такие же настройки рекомендуются https://ssl-config.mozilla.org/
Почему бы не сделать ssl_protocols TLSv1.2 TLSv1.3; значением
по-умолчанию в nginx?
--
Best regards,
Gena
Добрый день уважаемые!
Выставляю на Ваш суд свою поделку. Просьба сильно не пинать:) Конечно ещё
сыровата... но я уже кушаю:)))
Просто не нашёл аналогичного... может плохо искал.... вот и пришлось
покодить немножко. Надеюсь полезная будет:)
Сервис "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
Приветствую уважаемых знатоков Nginx! :)
Вы мне прошлый раз очень помогли, подарив конфиг Nginx для реверсного прокси, который понимает сокеты, за что вам еще раз огромное спасибо!
И теперь прошу вас еще разочек подсказать, как зашифровать трафик с помощью двух Nginx прокси.
Для читабельности я выложил свой вопрос на openennet:
https://www.opennet.ru/openforum/vsluhforumID8/8227.html
хотя был уверен, что там никто не осилит эту задачу, зато - наглядно.
Друзья, помогите, пожалуйста, с конфигами для этих прокси, очень нужно!
--
Shilov <shilov(a)extmail.info>
Всем привет, поднял на nginx rtmp-сервер, задача которого брать с OBS
видео-поток и рестримить его сразу на несколько сервисов (ютуб, твич и
т.д.)
-------
worker_processes 1;
error_log logs/error.log info;
events {
worker_connections 1024;
}
rtmp {
server {
listen 1935;
chunk_size 4096;
application live {
live on;
record off;
push rtmp://youtube/live38uphbx7;
push rtmp://twich/live/l2xgvdwi;
--------
Всё отлично работает, но одновременно на этом же ПК запущено два OBS с
разным контентом, который нужно рестримить на разные сервисы.
Вопрос, можно ли поднять на одном ПК два nginx сервера, для этой задачи. Или
на одном nginx запустить два rtmp-сервера. Или может есть мысли как
по-другому сделать такой рестрим.
Буду благодарен за любые идеи. Спасибо ;)
Posted at Nginx Forum: https://forum.nginx.org/read.php?21,288508,288508#msg-288508
привет всем
случилось странное, переехали на сервера по параметрам в разы большие, чем сейчас (с нескромными 256 Гб RAM+ 100 Гб swap (из всех параметров влияния на штатные параметры sysctl осталось отключение ipv6 и swapness выставленный в 10%))
через 5 минут после старта nginx ест всю память и весь swap! (см. https://prnt.sc/u8nia0 <https://prnt.sc/u8nia0>)
в итоге сервер умирает, никогда такого не видели, это же кэширующий прокси, а не БД!…
пускаем на Ubuntu 20.04 Server LTS (5.4.0-42-generic #46-Ubuntu SMP Fri Jul 10 00:24:02 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux)
нагруженный nginx 1.18 (пробовали из официальных репок ставить на хост nginx/stable 1.18.0-1~focal amd64 и в контейнер из официального докера nginx:1.18.0)
из особенностей используются ngx_http_js_module.so — для исторического escape/unescape URI и ngx_http_image_filter_module.so — для подрезки изображений
исключили уже всё — и zfs, который переформатировали в ext4 с отключенным atime
и из docker вынесли nginx в хост
и внутренние системы исключили…
меняли конфиги, отключали sendfile, кэши open-файлов, включали aio…
упорно кончается вся память через 5 минут, все 256 Гб и своп
идей практически не осталось, куда можно ещё копать?
Всем привет. В nginx не силен, но нужно сделать исключение из редиректа.
Есть сайт, там настроено http перенаправлять на https. Вот кусок конфига:
server {
listen 80;
server_name site.comwww.site.com;
location /.well-known/acme-challenge/ { alias
/var/lib/dehydrated/acme-challenges/; }
location / {
rewrite ^ https://site.com$request_uri? permanent;
}
}
server {
listen 443;
server_name www.site.com;
ssl on;
ssl_certificate /etc/letsencrypt/live/site.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/site.com/privkey.pem;
location / {
rewrite ^ https://site.com$request_uri? permanent;
}
}
Нужно вот такой адрес убрать из редиректа, чтобы он работал по http и https
отдельно - http://site.com/my_api/set/ – my_api/set - это не дирректория на
веб сервере. По сути мне кажется /my_api/set/ это не location. Это просто
POST запрос в таком виде http(s)://site.com/my_api/set, который
обрабатывается index.php. На сайте есть Kohana Controller_Locations_Api
который интерпретируется как /my_api/set. Там настроена Кохановская система
роутинга, которая считывает URL реквеста и распределяет на нужный
контроллер.
Глобально нужно, чтобы код был сразу 200, а сечас HTTP/1.1 301 Moved
Permanently и потом HTTP/1.1 200 OK.
Пробовал вот так, но это не работает:
server {
listen 80;
server_name site.comwww.site.com;
location /.well-known/acme-challenge/ { alias
/var/lib/dehydrated/acme-challenges/; }
location / {
if ($request_uri !~ /my_api/set) {
rewrite ^ https://site.com$request_uri? permanent;
}
}
}
Подскажите плииз как быть.
Posted at Nginx Forum: https://forum.nginx.org/read.php?21,289197,289197#msg-289197
Добрый день! Подскажите, пожалуйста, как правильно настроить проксирование с
кэшем из CDN. Задача такая: есть CDN, с него нужно скачивать достаточной
большой объем информации, но это достаточно дорого обходится, поэтому
появилась такая мысль - поднять прокси на nginx, который будет проксировать
запросы на CDN и кэшировать их. Файлы там статика, меняются крайне редко и
размер файла может быть 200Гб и выше. Хотелось бы чтобы с CDN закачка через
прокси шла только один раз, т.е. чтобы скачивал сам nginx и потом раздавал.
Я тут промучился, сначала с rh-nginx114 - с ним толком не работало. Файлы в
несколько ГБ вроде работали, 50ГБ - постоянные обрывы и т.д. Поставил 1.18
из оригинального репозитория - вроде дело пошло лучше, но хотелось бы
убедиться, что все сделал правильно. Обычное кэширование мне не подходило,
т.к. хосты начинают качать одновременно и получалось, что т.к. файлы большие
все равно почти все уходило на CDN. Решил сделать через слайсы. Кэш вроде
наполняется.
http {
log_format main '$remote_addr - $remote_user [$time_local] "$request"
'
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
....
proxy_cache_path /data/nginx/cache keys_zone=mycache:100m levels=1:2
max_size=1500g inactive=7d use_temp_path=off;
proxy_buffering on;
proxy_buffer_size 4k;
proxy_buffers 256 4k;
....
log_format cache_status '[$time_local] $remote_addr "$request"
$upstream_cache_status';
access_log /var/log/nginx/cache_access.log cache_status;
....
gzip on;
gzip_disable "msie6";
....
gzip_proxied any;
....
include /etc/nginx/mime.types;
default_type application/octet-stream;
....
include /etc/nginx/conf.d/*.conf;
}
server {
listen 81;
resolver 172.17.19.10;
location / {
limit_rate 30m;
proxy_read_timeout 3600;
proxy_cache mycache;
proxy_pass http://cdnhost.tld$request_uri;
slice 30m;
proxy_cache_key $host$uri$is_args$args$slice_range;
proxy_set_header Range $slice_range;
proxy_http_version 1.1;
proxy_hide_header ETag;
proxy_cache_valid 200 206 301 302 7d;
proxy_cache_valid 404 1m;
proxy_set_header Host cdnhost.tld
proxy_ignore_headers "Set-Cookie";
proxy_ignore_headers Cache-Control;
proxy_temp_path /data/nginx/temp;
}
}
Подскажите, все ли правильно сделал? Будет ли работать так, как нужно?
Posted at Nginx Forum: https://forum.nginx.org/read.php?21,288966,288966#msg-288966
Здравствуйте, All!
Есть такая конфигурация:
client <=> nginx-frontend <=> nginx-backend <=> php-fpm
Есть задача от SEO'шников/клиентов сделать так, чтобы несколько слешей,
идущих подряд в uri, превращались в один слеш с помощью 301 редиректа,
и чтобы точка в конце домена также убиралась с помощью 301 редиректа.
Сейчас эту задачу можно решить только на стороне nginx-frontend
с помощью такого программирования на конфигах nginx для каждого
виртуального сервера:
# remove multiple sequences of forward slashes
# The $uri variable with have duplicate slashes removed by default
via [merge_slashes on] - just need to rewrite back to $uri
# note: use of the "^[^?]*?" pattern avoids any matches in the
querystring section of URI - which would cause an infinite redirect loop
if ($request_uri ~ "^[^?]*?//") {
rewrite "^" $scheme://$host$uri permanent;
}
if ($http_host ~ "\.$") {
rewrite "^" $scheme://$host$uri permanent;
}
Хотелось бы избежать программирования на конфигах nginx-frontend
и перенести всю логику нормализации урлов на сторону php-fpm,
если это вообще теоретически возможно без дополнительного
программирования и дополнительного оверхеда на стороне nginx-frontend,
или обойтись всего одной директивой в конфиге на уровне http {},
например, merge_slashes redirect; или normalize_uri on;
На одном физическом сервере несколько сотен виртуальных хостов,
программирование на конфигах nginx делает конфиги трудночитаемыми,
и есть стойкое ощущение, что это не самый оптимальный solution.
Насколько высока вероятность того, что патч, реализующий
дополнительную функциональность merge_slashes redirect;
или normalize_uri on; будет принят в основную ветку nginx?
Какой есть самый правильный и самый оптимальный с точки зрения
экономии человеческих и машинных ресурсов способ решения этой задачи?
--
Best regards,
Gena