Введение
Немного расскажу своими словами о том, как работает модуль ngx_http_proxy_module. Именно он реализует весь функционал, о котором пойдет речь. Допустим, у вас в локальной или виртуальной сети есть какие-то сервисы, не имеющие прямого доступа из интернета. А вы хотите таковой иметь. Можно пробрасывать нужные порты на шлюзе, можно что-то еще придумывать. А можно сделать проще всего — настроить единую точку входа на все свои сервисы в виде nginx сервера и с него проксировать различные запросы к нужным серверам.
Расскажу на конкретных примерах, где я это использую. Для наглядности и простоты буду прям по порядку перечислять эти варианты:
- Ранее я рассказывал о настройке чат серверов — matrix и mattermost. В этих статьях я как раз рассказывал о том, как проксировать запросы в чат с помощью nginx. Прошелся по теме вскользь, не останавливаясь подробно. Суть в том, что вы настраиваете на любом виртуальном сервере эти чаты, помещаете их в закрытые периметры сети без лишних доступов и просто проксируете запросы на эти сервера. Они идут через nginx, который у вас смотрит во внешний интернет и принимает все входящие соединения.
- Допустим, у вас есть большой сервер с множеством контейнеров, например докера. На нем работает множество различных сервисов. Вы устанавливаете еще один контейнер с чистым nginx, на нем настраиваете проксирование запросов на эти контейнеры. Сами контейнеры мапите только к локальному интерфейсу сервера. Таким образом, они будут полностью закрыты извне, и при этом вы можете гибко управлять доступом.
- Еще один популярный пример. Допустим, у вас есть сервер с гипервизором proxmox или любым другим. Вы настраиваете на одной из виртуальных машин шлюз, создаете локальную сеть только из виртуальных машин без доступа в нее извне. Делаете в этой локальной сети для всех виртуальных машин шлюз по-умолчанию в виде вашей виртуальной машины со шлюзом. На виртуальных серверах в локальной сети размещаете различные сервисы и не заморачиваетесь с настройками фаервола на них. Вся их сеть все равно не доступна из интернета. А доступ к сервисам проксируете с помощью nginx, установленным на шлюз или на отдельной виртуальной машине с проброшенными на нее портами.
- Мой личный пример. У меня дома есть сервер synology. Я хочу организовать к нему простой доступ по https из браузера по доменному имени. Нет ничего проще. Настраиваю на сервере nginx получение бесплатного сертификата , настраиваю проксирование запросов на мой домашний ip, там на шлюзе делаю проброс внутрь локалки на synology сервер. При этом я могу фаерволом ограничить доступ к серверу только одним ip, на котором работает nginx. В итоге на самом synology вообще ничего не надо делать. Он и знать не знает, что к нему заходят по https, по стандартному порту 443.
- Допустим, у вас большой проект, разбитый на составные части, которые живут на разных серверах. К примеру, на отдельном сервере живет форум, по пути /forum от основного домена. Вы просто берете и настраиваете проксирование всех запросов по адресу /forum на отдельный сервер. Точно так же можно без проблем все картинки перенести на другой сервер и проксировать к ним запросы. То есть вы можете создать любой location и переадресовывать запросы к нему на другие сервера.
Надеюсь в общем и целом понятно, о чем идет речь. Вариантов использования много. Я привел самые распространенные, которые пришли в голову и которые использую сам. Из плюсов, которые считаю наиболее полезными именно из своих кейсов, отмечу 2:
- Без проблем можете настроить https доступ к сервисам, при этом совершенно не трогая эти сервисы. Вы получаете и используете сертификаты на nginx сервере, используете https соединение с ним, а сам nginx уже передает информацию на сервера со службами, которые могут работать по обычному http и знать не знают о https.
- Вы очень легко можете менять адреса, куда проксируете запросы. Допустим у вас есть сайт, его запросы проксируются на отдельный сервер. Вы подготовили обновление или переезд сайта. Отладили все на новом сервере. Теперь вам достаточно на сервере nginx изменить адрес старого сервера на новый, куда будут перенаправляться запросы. И все. Если что-то пойдет не так, можете оперативно вернуть все обратно.
С теорией закончил. Перейдем теперь к примерам настройки. В своих примерах я буду использовать следующие обозначения:
blog.zeroxzed.ru | доменное имя тестового сайта |
nginx_srv | имя внешнего сервера с установленным nginx |
blog_srv | локальный сервер с сайтом, куда проксируем соединения |
94.142.141.246 | внешний ip nginx_srv |
192.168.13.31 | ip адрес blog_srv |
77.37.224.139 | ip адрес клиента, с которого я буду заходить на сайт |
http.c: http.sslcert и http.sslkey являются именами путей
Назад, когда была создана современная http_options() codepath для синтаксического анализа различные параметры http. * в 29508e1 ( «Изолировать общий HTTP-запрос функциональность», 2005-11-18, Git 0.99.9k), а затем была исправлена взаимодействие между несколькими конфигурационными файлами в 7059cd9( «: Fix config file parsing», 2009-03-09, Git 1.6.3-rc0), мы проанализировали параметры конфигурации, такие как , как простые ванильных струн, потому что , который понимает Префикс «» не существовал.
Позже мы использовали некоторые из них (а именно, и ) для использования функции и добавили переменные типа для использования функции с самого начала. Из-за этого эти переменные все понимают префикс «».
Сделайте оставшиеся две переменные, и , также осознавая конвенцию, поскольку они оба явно являются путями к файлы.
ТЛ; др
Ключи конфигурации, которые вы ищете:
http.sslverify — всегда верно. Смотри примечание выше.
Это для настройки сертификатов хоста, которым вы доверяете
Они предназначены для настройки ВАШЕГО сертификата для ответа на вызовы SSL.
Выборочно применить вышеуказанные настройки к конкретным хостам.
http..*
Глобальный для сертификации
Ради меня и моих коллег здесь показано, как нам удалось заставить работать самоподписанные сертификаты без отключения . Отредактируйте ваш для использования добавьте:
Рекомендации:
- Git Credentials
- Git Credential Store
- Использование Gnome Keyring в качестве хранилища учетных данных
Укажите config, когда -ing
Если вам нужно применить его для каждого репо, в документации сказано, что вы просто должны запустить в вашем каталоге репо. Ну, это бесполезно, если вы еще не клонировали репо локально, не так ли?
Вы можете сделать hokey-pokey, установив вашу глобальную конфигурацию, как указано выше, а затем скопировать эти настройки в вашу локальную конфигурацию репо, как только она клонируется…
ИЛИ что вы можете сделать, это которые будут применены к целевому репо после его клонирования.
Один лайнер
РЕДАКТИРОВАТЬ: См. VonC, который указывает на предостережение об абсолютных и относительных путях для определенных версий git от 2.14.x/2.15 до этого одного лайнера
CentOS
Если вы пытаетесь это сделать на CentOS, и ваш файл дает вам
Тогда вам понадобится о том, как использует NSS вместо Open SSL.
И вам захочется пересобрать из исходного кода:
перезагрузите компьютер, так как libcurl все еще находится в памяти как общая библиотека
tl;dr
Ключи конфигурации, которые вам нужны, это:
http.sslverify -всегда верно. См.Примечание выше.
Они предназначены для настройки сертификатов хоста, которым Вы доверяете
Они предназначены для настройки сертификата YOUR для ответа на вызовы SSL.
Выборочно применяйте вышеуказанные настройки к конкретным хостам.
http..*
Global для Самозаверяющих центров сертификации
Ради меня и моих коллег вот как нам удалось заставить самозаверяющие сертификаты работать без отключения . Измените свой на использование добавьте их:
Рекомендации:
-
Git учетные данные
-
Git Хранилище Учетных Данных
-
Использование брелка Gnome в качестве хранилища учетных данных
Укажите конфигурацию при -ing
Если вам нужно применить его на основе каждого РЕПО, документация говорит вам просто запустить в вашем каталоге РЕПО. Ну, это бесполезно, когда у вас еще нет локального клонирования РЕПО, не так ли?
Вы можете сделать hokey-pokey, установив свою глобальную конфигурацию, как указано выше, а затем скопировать эти настройки в локальную конфигурацию РЕПО, как только она клонируется…
OR что вы можете сделать, так это которые будут применены к целевому РЕПО после его клонирования.
Один Лайнер
EDIT см. ответ VonC, который указывает на предостережение об абсолютных и относительных путях для конкретных версий git от 2.14.x/2. 15 до этого лайнера
CentOS
Если вы пытаетесь сделать это на CentOS и ваш файл дает вам
Тогда вам понадобится этот ответ StackOverflow о том, как использует NSS вместо открытого SSL.
И Вам понравится перестроить из исходного кода :
перезагрузите компьютер, так как libcurl все еще находится в памяти как общая библиотека
Чтобы отключить проверку SSL для определенного репозитория
Если репозиторий полностью находится под вашим контролем, вы можете попробовать:
Есть довольно много вариантов конфигурации SSL в . Со страницы руководства :
Еще несколько полезных параметров конфигурации SSL:
- 44 ‘git config —global http.sslVerify false’ сделали свое дело. Спасибо!
- 123 Вам следует никогда не отключайте глобальную проверку сертификата TLS (/ SSL).
- 4 @Flow — полностью согласен. Я отредактировал этот (теперь довольно старый) ответ, чтобы он был более полемичным по поводу отключения проверки сертификата TLS / SSL.
- 8 для меня это решил мою проблему, спасибо …
- 2 @Flow Если мы находимся в рабочей среде, где нашим работодателем является MITM, какая альтернатива глобальному отключению TLS / SSL?
Вы можете установить к :
или, в качестве альтернативы, настройте Git, чтобы не проверять соединение в командной строке:
Обратите внимание: если вы не проверяете сертификаты SSL / TLS, тогда вы подвержены атакам MitM
2 Вы также можете использовать флаг на для изменения значения конфигурации для одной команды. Я думаю, что этот синтаксис чище. 1 Ааа, я не знала о в git. На самом деле я считаю, что это более чистое решение, а не загрязнение окружающей среды
1 @SkylarSaveland Обратите внимание, что также может работать через посредников. 1 Следует отметить, что это решение открывает возможности для атак «посредника»
2 Ответ описывает только наименее безопасный вариант.
Я не большой поклонник [РЕДАКТИРОВАТЬ: оригинальные версии] существующие ответы, потому что отключение проверок безопасности должно быть последним средством, а не первым предложенным решением. Даже если вы не можете доверять самозаверяющим сертификатам при первом получении без дополнительных методов проверки, использование сертификата для последующих операции, по крайней мере, значительно усложняют жизнь атакам, которые происходят только после вы скачали сертификат. Другими словами, если скачанный вами сертификат является подлинный, то с этого момента ты в порядке. Напротив, если вы просто отключите проверку, вы будете широко открыты для любого вида атак типа «злоумышленник посередине». в любой момент.
Приведу конкретный пример: знаменитые репозиторий предоставляет самозаверяющий сертификат. Я могу скачать этот файл, поместить его где-нибудь вроде , а затем выполните:
Обратите внимание, что использование локального здесь (т.е. без ) означает, что этот самозаверяющий сертификат является доверенным только для этого конкретного репозитория, что приятно
Это также лучше, чем использовать так как это устраняет риск выполнение проверки через другой центр сертификации, который потенциально может быть скомпрометирован.
- 3 По совпадению, http.sslCAPath использует логику ssl_capath библиотеки libcurl. Я думаю, вы действительно можете хранить любое количество сертификатов в каталог, и он эффективно отсортирует все, что вам нужно. Я не проверял это, заметьте, но это может позволить вам использовать с целой кучей сертификатов. Однако стоит проверить.
- 6 Учитывая риски полного отключения проверки SSL и тот факт, что вопрос был в том, «как я могу заставить git accept а самоподписанный сертификат? «, это должен быть принятый ответ.
- 5 В идеальном мире было бы что-то вроде
- 1 Единственный ответ в Интернете, который действительно работает для моего сценария. Это частная библиотека Composer VCS, размещенная на собственном хостинге Gitlab через SSL, что мне нужно в проекте с версией git.
- 3 Из свежего клона; это можно сделать в одной строке: (После этого не нужно вызывать команду git config).
tl;dr
Ключи конфигурации, которые вам нужны, являются:
http.sslverify — Всегда верно. См.примечание выше.
Они предназначены для настройки сертификатов хоста, которым вы доверяете
Они предназначены для настройки сертификата YOUR для ответа на вызовы SSL.
Выборочно применяйте вышеуказанные настройки к конкретным хостам.
http..*
Global для самозаверяющих центров сертификации
Для меня и моих коллег вот как нам удалось заставить самозаверяющие сертификаты работать, не отключая . Отредактируйте свой , чтобы использовать , добавьте эти:
Рекомендации:
-
Git Полномочия
-
Git Хранилище учетных данных
-
Использование связки ключей Gnome в качестве хранилища учетных данных
Укажите конфигурацию при -ing
Если вам нужно применить его для каждого репо, документация говорит вам просто запустить в каталоге репо. Ну, это бесполезно, когда вы еще не клонировали репо локально, не так ли?
Вы можете сделать hokey-pokey, установив глобальную конфигурацию, как указано выше, а затем скопировать эти настройки в локальную конфигурацию репо, как только она клонируется…
OR что вы можете сделать, так это которые будут применены к целевому репо после его клонирования.
Один Лайнер
EDIT: См . Ответ VonC, в котором указано предостережение об абсолютных и относительных путях для конкретных версий git от 2.14.x/2. 15 до этой строки
CentOS
Если вы пытаетесь сделать это на CentOS, и ваш файл дает вам
Тогда вам понадобится этот ответ StackOverflow о том, как использует NSS вместо открытого SSL.
И вам понравится перестроить из исходного кода :
перезагрузите компьютер, так как libcurl все еще находится в памяти как общая библиотека
11 ответов
Лучший ответ
Ты можешь сделать
В вашем конкретном репо, чтобы отключить проверку сертификата SSL только для этого репо.
643
Anton Krouglov
23 Июн 2020 в 14:14
Для Windows, если вам нужна глобальная конфигурация, запустите
-1
176coding
6 Апр 2016 в 08:20
В Linux, если вы вызываете это внутри папки репозитория git:
Это добавит в раздел файла в папке , что также может быть решением, если вы хотите добавить это вручную с помощью :
1
rubo77
14 Фев 2017 в 22:01
Это работает для меня:
4
Tadej
27 Окт 2018 в 19:07
Если вы работаете на компьютере с Windows и у вас установлен Git, вы можете попробовать следующие шаги:
- Перейдите в папку установки Git, например: C: \ Program Files (x86) \ Git \ etc
- Отредактируйте файл: gitconfig
-
В разделе добавьте строку: sslVerify = false .
13
rubo77
14 Фев 2017 в 21:55
В частности, если вам нужен рекурсивный клон
15
Jérémie B
21 Фев 2016 в 11:41
Как то, что сказал Тирумалай, но внутри клонированного репозитория и без . Т.е.,
111
mcepl
28 Янв 2014 в 13:40
Вы можете сделать следующее
На разовое репо
По всем репо
161
Community
24 Июн 2016 в 20:18
Этот вопрос продолжает возникать, и я пока не нашел удовлетворительного результата, поэтому вот что сработало для меня (на основе предыдущего ответа https: //stackoverflow.com/a/52706362/1806760, который не работает):
Мой сервер с самоподписанным сертификатом.
Сначала запустите (из командной строки с повышенными привилегиями измените на , если вы хотите сделать это только для своего пользователя), затем вставьте следующий фрагмент после любого предыдущего разделы:
Затем проверьте, все ли вы сделали правильно:
5
mrexodia
15 Июл 2019 в 10:09
Существует простой способ настроить GIT для правильной работы с вашим сервером. Просто добавьте специальный раздел http для своего сервера git и укажите, какому сертификату (в кодировке Base64) доверять:
~ / .gitconfig
Таким образом, у вас больше не будет ошибок SSL и вы проверите (обычно) самозаверяющий сертификат. Это лучший способ, поскольку он защищает вас от атак «злоумышленник посередине». Когда вы просто отключаете проверку ssl, вы становитесь уязвимы для таких атак.
7
Matthias B
13 Ноя 2017 в 17:09
Если вам нужно отключить проверки SSL для одного сервера git, на котором размещено несколько репозиториев, вы можете запустить:
Это добавит его в конфигурацию вашего пользователя.
Команда для проверки:
(Если вы все еще используете git git config —global http.https://my.bad.server.sslVerify false)
Пояснение из , где команда находится в конце, покажите Контент выглядит так:
Он будет игнорировать любые проверки сертификатов для этого сервера, независимо от репозитория.
У вас также есть объяснение в коде.
10
Mat M
23 Янв 2021 в 01:02
http.c: http.sslcert и http.sslkey — оба пути
Когда был создан современный кодовый путь http_options () для синтаксического анализа различные параметры http. * на странице 29508e1 («Изолировать общий HTTP-запрос функциональность », 18.11.2005, Git 0.99.9k), а затем были исправлены для взаимодействие между несколькими файлами конфигурации в 7059cd9 («: Fix config file parsing», 2009-03-09, Git 1.6.3-rc0), мы проанализировали переменные конфигурации, такие как , как простые ванильные строки, потому что понимает Префикса «» не существует.
Позже мы преобразовали некоторые из них (а именно, и ) для использования функции и добавили такие переменные, как , чтобы использовать функцию с самого начала. Из-за этого все эти переменные понимают префикс «».
http.c: http.sslcert а также http.sslkey оба пути
Когда был создан современный кодовый путь http_options () для анализа различных параметров http. * На 29508e1 («Изолировать общую функциональность HTTP-запроса», 2005-11-18, Git 0.99.9k), а затем был исправлен для взаимодействия между несколькими файлы конфигурации в 7059cd9 («: Fix config file parsing », 2009-03-09, Git 1.6.3-rc0), мы проанализировали такие переменные конфигурации, как , как простые ванильные струны, потому что что понимает «префикса «не существует».
Позже мы преобразовали некоторые из них (а именно, а также ), чтобы использовать функцию, и добавили такие переменные, как использовать функцию с самого начала. Из-за этого все эти переменные понимают «» префикс.
Сделайте оставшиеся две переменные, а также , также осведомлены о соглашении, поскольку оба они явно являются путями к файлам.
Как приготовить рагду паттице: гурманский муди; Дневник гурмана
Можно ли с помощью Git указать, чтобы он принимал самоподписанный сертификат?
Я использую https-сервер для размещения сервера git, но пока сертификат самоподписан.
Когда я впервые пытаюсь создать там репо:
Я получаю сообщение об ошибке:
- 4 Как узнать, что проблема в сертификате?
- 1 Вместо этого с ПК инструмент Git другого пользователя позволяет им игнорировать сертификат, и он работает. С Mac я не могу понять, как игнорировать.
- Ошибка, которую я получил, с git 2.1.1: «фатальный: невозможно получить доступ ‘https: //…/project.git/’: проблема с сертификатом SSL: самоподписанный сертификат в цепочке сертификатов»
- на OSX / macintosh это кажется как git не будет использовать вариант. если вы можете успешно использовать чтобы получить путь к репо, но git не работает, вам следует добавить сертификат в загадочную программу OSX Keychain. подробнее здесь superuser.com/questions/605900/…
- Я считаю, что этот документ полезен gist.github.com/evantoli/f8c23a37eb3558ab8765
6 ответов
Лучший ответ
Лучший вариант — добавить самоподписанный сертификат в хранилище сертификатов.
Получить дерево сертификатов сервера. Это можно сделать с помощью Chrome.
-
Перейдите к адресу сервера. Нажмите на значок замка и просмотрите сертификаты. Экспортируйте всю цепочку сертификатов в формате кодированных файлов base64 (PEM).
-
Добавьте сертификаты в цепочку доверия вашего конфигурационного файла доверия GIT В Git bash на компьютере, на котором выполняется задание, выполните следующее:
Найдите конфигурацию , которая показывает, где находится файл доверия сертификата. 3. Скопируйте все сертификаты в файл цепочки доверия, включая и . Убедитесь, что вы добавили цепочку сертификатов ROOT в файл сертификатов.
Это должно решить вашу проблему с самозаверяющими сертификатами и использованием GIT.
НЕ РЕКОМЕНДУЕТСЯ
Другой способ состоит в том, чтобы дистанционно подключиться к подчиненному устройству и запустить следующее:
Это сохранит в глобальной конфигурации, что этот экземпляр никогда не выполняет проверку SSL, это НЕ рекомендуется, его следует использовать только при тестировании, а затем снова отключить. Это должно быть сделано правильно, как указано выше.
20
JamesD
30 Янв 2017 в 14:09
В дополнение к этому, я застрял на этом в течение нескольких часов, вот что я нашел для SSL, связанных
Добавлять
В качестве параметра как команда java jnlp,
И установить GIT_SSL_NO_VERIFY = true в качестве переменной среды, чтобы команда запуска ведомого на ведомой стороне теперь выглядела так (не уверен, что некоторые параметры дублируются)
Вам может понадобиться то же самое
Пытаясь дозвониться до jenkins-cli.jar
(до https://blog.csdn.net/froghui/article/details/39641221 )
Так как каждый раз, когда раб jenkins запускал операцию git, это чистый env, который обрабатывается плагином jenkins git
2
Jack Wu
7 Дек 2018 в 10:38
Вы можете использовать JGit и исправить это, создав файл .gitconfig в JENKINS_HOME со следующими строками:
2
Hemã Vidal
31 Июл 2017 в 17:38
Установите переменную среды в Windows,
до папки bin вашей установки git, а затем добавьте ее в переменную path.
Abhishek Gurjar
30 Дек 2019 в 05:18
У меня такая же проблема. Сначала я использовал Git, используя Shell Script, который отключил проверку SSL перед клоном или извлечением.
Позже я переключился на использование JGit, который работает как положено (хотя его не рекомендуется использовать). Однако с JGit некоторые функции, такие как мелкие клоны, не поддерживаются.
На самом деле мне не нужно было ничего устанавливать, чтобы использовать JGit
Clayn
30 Янв 2017 в 08:27
Создайте проект Freestyle, добавьте «Windows Batch Command» и добавьте
Git config http.sslVerify false или git config —config http.sslVerify false
Как только это будет сделано, сохраните его и постройте работу
Теперь ваш Дженкин настроен так, чтобы не делать проверку SSL. После успешной сборки теперь вы можете удалить шаг сборки пакетной команды и отредактировать тот же проект для вашей конфигурации.
4
ravi creed
1 Янв 2019 в 06:19
http.c : http.sslcert и http.sslkey — оба пути
Когда современный http_options() протоколе была создана для разбора
различные http.* варианты на 29508e1 («изолировать общая запросу HTTP
функциональные возможности», 2005-11-18, Git 0.99.9k), а затем была исправлена на
взаимодействие между несколькими файлами конфигурации в 7059cd9
(» : исправить файл config разбор», 2009-03-09, Git 1.6.3-rc0), то анализируется
переменные конфигурации, как , как обычный
ванильные строки, потому что , что понимает
Префикса » » не существовало.
Позже мы преобразовали некоторые из них (а именно и ), чтобы использовать функцию, и добавили переменные, такие как , чтобы использовать функцию с самого начала. Из-за этого все эти переменные понимают префикс «».
Сделайте остальные две переменные, и , также
осведомленными о соглашении, поскольку они оба явно являются путями к
файлам.
ТЛ ; др
Ключи конфигурации, которые вам нужны:
http.sslverify — всегда верно. См. Примечание выше.
Они предназначены для настройки сертификатов хоста, которым вы доверяете.
Они предназначены для настройки ВАШЕГО сертификата для ответа на запросы SSL.
Выборочно примените указанные выше настройки к определенным хостам.
http..*
Глобальный для самозаверяющих центров сертификации
Ради меня и моих коллег вот как нам удалось заставить работать самозаверяющие сертификаты, не отключая . Измените свой , используя , добавьте следующее:
Ссылки:
- Учетные данные Git
- Git Credential Store
- Использование Gnome Keyring в качестве хранилища учетных данных
Укажите конфигурацию, когда — ing
Если вам нужно применить его для каждого репо, документация говорит вам просто запустить в вашем каталоге репо. Что ж, это бесполезно, если вы еще не клонировали репо локально, не так ли?
Вы можете сделать hokey-pokey, установив глобальную конфигурацию, как указано выше, а затем скопировать эти настройки в конфигурацию локального репозитория после ее клонирования …
ИЛИ вы можете , которые применяются к целевому репо после его клонирования.
Один лайнер
РЕДАКТИРОВАТЬ: см. VonC answer, который указывает на предостережение об абсолютных и относительных путях для конкретных версий git от 2.14.x / 2.15 до этого одного лайнера
CentOS
Если вы пытаетесь это сделать в CentOS, и ваш файл дает вам
Затем вам понадобится этот ответ StackOverflow о том, как использует NSS вместо Open SSL.
И вам захочется перестроить из исходного кода:
перезагрузите компьютер, поскольку libcurl все еще находится в памяти как общая библиотека