Здесь вы можете задать любые вопросы по MyChat, по работе программы, её настройке, лицензированию и т.д.
Аватара пользователя
danser-by
Добрый день.
Хотел бы реализовать связку mychat и телеграм, для этого необходим валидный SSL-сертификат.
Организация уже использует ряд сервисов, запросы к которым проксируются через nginx с получением сертификатов от let's encrypt. Хотелось бы добавить конфигурацию для mychat, если это возможно.

Не было ли ни у кого подобного опыта?
В таком случае, интеграция с телеграм была бы бесплатной и не меняла бы существующие схемы взаимодействия корпоративных сервисов.
Аватара пользователя
Андрей Раков
Добрый день.

А в чем проблема добавить полученные вами сертификаты на сервере чата?
Аватара пользователя
danser-by
Сдаётся мне несколько костыльным решением.
На данный момент все сертификаты хранятся и обновляются на сервере nginx.
Копировать/монтировать директории/настраивать rsync на сторонний виндовый сервер с чатом не кажется самой стабильной затеей.
Хотя возможно я не до конца понял Вашу идею.
Аватара пользователя
Андрей Раков
Наш сервер берет файлы сертификатов из своей папки в профиле C:\ProgramData\MyChat Server\cert\.

Как вариант, вы можете первый раз добавить сертификаты на сервере вручную, а далее их обновлять напрямую в этой папке и перезапускать веб-сервер хотя бы раз в 2 месяца, чтобы всегда попадать в период 90 дней.
Аватара пользователя
danser-by
Ок, похоже, что без костылей никак.

Как вообще пользователи активируют интеграцию с телеграм? Неужели действительно покупают для этого отдельные сертификаты и только? Меня в принципе удивляет тот факт, что нет какой-либо изкоробочной интеграции с let's encrypt.
Да и проксирование nginx, как пользователи mychat разруливают запросы к внутрикорпоративным ресурсам?
Аватара пользователя
Андрей Раков
Конечно, мы стремимся к максимальной автоматизации, но мы не всесильны.
Как вообще пользователи активируют интеграцию с телеграм?

Вот так: https://nsoft-s.com/mychatarticles/1158 ... egram.html
удивляет тот факт, что нет какой-либо изкоробочной интеграции с let's encrypt

Самостоятельно генерировать ключи Let's Encrypt мы не умеем, а для этого используем стороннее решение.

Если вы готовы заказать приоритетную доработку по автоматизации этого процесса — вэлкам, мы готовы это сделать, почему на платной основе — сейчас уже есть много задач, которые "очень нужны".

Также поясните:
Да и проксирование nginx, как пользователи mychat разруливают запросы к внутрикорпоративным ресурсам?

Что конкретно вы хотите "разрулить"?
Аватара пользователя
danser-by
Да, ветку по ссылке я уже читал.
Но в любом случае, реальный пример - у меня внутри сети есть гуакамоль, астериск, почта, хранилка паролей, сайт и ещё одна страшная муть. Каждая имеет свой домен, внешний статический адрес один.
80 и 443 проброшен на сервер nginx, он обновляет и подсовывает сертификаты let's encrypt. хочу я обеспечить доступ и к серверу mychat - придётся проксировать запросы через nginx.

В ваших же инструкциях подразумевается, что 80-ый и 443-тий порт напрямую проброшены на сервер чата и никаких промежуточных звеньев в этой цепи нет. Отсюда и сомнения, касательно использования подобной схемы.

Но похоже, выбирать не приходится. Попробуем прозрачно проксировать все запросы по 80 и 443 для домена mychat на сервер чата, где развернём дополнительно схему с zerossl. Конечно, это кажется избыточным, но что поделать.

Параллельно попробую обойтись средствами nginx, если что-нибудь домучаю - отпишусь.
Аватара пользователя
Алексей Пикуров
Как nginx догадается, какой запрос надо отправлять, к примеру, на апач с вашим сайтом, а какой — на сервер MyChat, если TCP порт один и тот же?

Он такое умеет делать? Если да, то как?
Аватара пользователя
danser-by
Эм...
Ну наверняка же он смотрит на http-заголовки, ищет соответствие в server_name параметрах и в соответствии с этим применяет соответствующие proxy_pass.
Я не знаю как местный форум относится к ссылкам на сторонние ресурсы, но Вы всегда можете загуглить что такое nginx reverse roxy.

Да и не ngixn-ом единым, есть же caddy, есть traefik, да много чего есть.
Аватара пользователя
Андрей Раков
К ссылкам мы относимся положительно (кроме спама и т.д), форум не только для нас, но и для наших пользователей, которые ищут решения различных задач.

А можно вместо RTFM привести пример — как сервер Nginx поймет, что внешний запрос, проходящий через него предназначен для MyChat?
Аватара пользователя
danser-by
Хм, или я что-то не так понимаю..
Просто довольно странно, что такой банальный момент вызывает вопросы, возможно я просто что-то не учёл? Это же простой http/https трафик, его нужно разделить по доменам, верно? Тогда тема стара как мир, и я не понимаю, почему это в принципе вызывает какие-то сомнения или вопросы. А как апач с виртуалхост разруливал запросы по доменным именам? Тоже ведь старая тема.

Для nginx, банальный пример конфига:


Код: Выделить всё
server {
    listen 80 default_server;
    root /var/www/html;

    location / {
        try_files $uri /index.html;
    }
}

server {
    listen 80;
    server_name mail.companyname.com;

    location / {
        proxy_pass http://mail.companyname.local/;
    }
}

server {
    listen 80;
    server_name mychat.companyname.com

    location / {
        proxy_pass http://mychat.companyname.local:8080/;
    }
}


Т.е. смотрим в содержимое http-запросов, отлавливаем домен, отправляем запрос по .local-домену, на сервер в локальной сети.
Аватара пользователя
Андрей Раков
Далеко не все используют Nginx, как используете его вы (если вообще используют).

Вы первый, кому понадобилась настроить проброску трафика к серверу чата через него, либо это настраивали без нашей помощи.

Как мне посоветовал гуголъ:
https://www.sitepoint.com/configuring-n ... l-node-js/
https://blog.theodo.fr/2015/09/protect- ... tificates/

Необходимо внести некоторые модификации в конфиг Nginx, пример:
Код: Выделить всё
server {
  listen       80;
  listen       443 ssl;
  server_name  mychat.example.com;

  ssl_certificate  /etc/nginx/ssl/server.crt
  ssl_certificate_key /etc/nginx/ssl/server.key

location / {
    proxy_pass http://mychat_ip:8080;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection 'upgrade';
    proxy_set_header Host $host;
    proxy_cache_bypass $http_upgrade;
  }
}

Я так понимаю, что на самом сервер чата веб-шифрование включать не обязательно, так как трафик уже внутренний, хотя есть другие варианты, когда внутренний сервис тоже использует шифрование, этот вариант пока пропустим.

Попробуйте — будет ли работать?
Аватара пользователя
ErDmitry
Здравствуйте!
Вижу вопрос остался без ответа. У меня точно такая я же ситуация и хочется продолжить этот разговор.
Я не особо знаток nginx, но у меня на нём успешно работают несколько ресурсов и мне надо MyChat завести так же через него.
Очень удобно, когда несколько ресурсов обрабатывается одним nginx. Экономит наличие белых адресов, нет нужды покупать выделенный сервер, т.к. всё работает на одном.
В общем попробовал я предложенный конфиг и работает только https://mychat.домен/lobby/ переход например на https://mychat.домен/chat безуспешно, по всей видимости надо сам MyChat переводить в https режим. В принципе, ситуация очень схожа с Wordpress, он тоже не особо хочет работать в таком режиме и я так и не решил проблему с ним, просто не стал им пользоваться.
Я конечно ещё буду пытаться и если получится отпишусь, но хотелось бы что бы и тех поддержка обратила внимание на эту проблему, т.к. я уверен много у кого возникает этот вопрос.
Вот мой пример конфига nginx. По сути тоже самое, только включена принудительная переадресация на https.
Код: Выделить всё
server {
    listen 80;
    server_name mychat.домен;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl;
    server_name mychat.домен;

    access_log /var/log/nginx/mychat.домен.443.accept.log;
    error_log /var/log/nginx/mychat.домен.443.error.log;

    include ssl.conf;
    ssl_certificate /etc/letsencrypt/live/mychat.домен/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/mychat.домен/privkey.pem;

    location / {
        proxy_pass http://192.168.5.25:8080;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
    }
}
Аватара пользователя
ErDmitry
Попробовал обычный http, такая же ситуация.
Аватара пользователя
Алексей Пикуров
Дмитрий, это не проблема, MyChat и web-сайт — это не одно и то же. Любой кеширующий сервер тут вообще не применим, это как самолёт и подводная лодка, совершенно несовместимые и работающие по разным принципам вещи.
Аватара пользователя
ErDmitry
Ну matrix работает и сейчас, перед этим Rocket.Chat работал, как заставить MyChat через nginx работать?
Аватара пользователя
Андрей Раков
При настройке nginx учтите, что порты, которые установлены на сервере, должны совпадать с теми, что вы пробрасываете.
Аватара пользователя
ErDmitry
Я же написал, что :8080/lobby/ работает как http так и https, а всё остальное нет.
Аватара пользователя
ErDmitry
ftp я выключил, 2004 кинул через другой маршрут, хотя изначально пробовал так же через nginx. Другие порты пока не пробрасывал.
Аватара пользователя
ErDmitry
Хмм, 2004 закрыт, поправлю, а он обязателен для браузера?
Аватара пользователя
Андрей Раков
Посмотрите логи нгеникса когда переходите в вебчат, это он чудит.
Аватара пользователя
ErDmitry
Видимо логирование надо включить подробное, нет в логах ни чего по этому поводу.
Аватара пользователя
Андрей Раков
Вам нужно выяснить, какой запрос формирует шлюз при переходе по ссылке чата
Аватара пользователя
ErDmitry
Код: Выделить всё
2021/02/27 17:31:09 [info] 1644#1644: *5147 client canceled stream 3 while sending request to upstream, client: 213.87.123.255, server: mychat.ingashcrb.ru, request: "GET /chat/ HTTP/2.0", upstream: "http://10.110.5.25:8080/chat/", host: "mychat.ingashcrb.ru", referrer: "https://mychat.ingashcrb.ru/lobby/"

2021/02/27 17:31:28 [info] 1644#1644: *5147 client canceled stream 59 while sending request to upstream, client: 213.87.123.255, server: mychat.ingashcrb.ru, request: "GET /chat/ HTTP/2.0", upstream: "http://10.110.5.25:8080/chat/", host: "mychat.ingashcrb.ru", referrer: "https://mychat.ingashcrb.ru/lobby/"


Два запроса
Аватара пользователя
Андрей Раков
Пожалуйста обрамляйте логи тегом code, он есть в линейке форматирования.
Аватара пользователя
Андрей Раков
Ну вот, вы имеете логи шлюза, теперь можете разобраться в чем причина . К сожалению, мы не являемся спецами во всех системах, мы можем подсказать, где искать в таких случаях.
Аватара пользователя
ErDmitry
Неужели вы ни где не используете nginx? попробуйте, удивитесь насколько он хорош).
У меня есть конечно ещё вариант без nginx, но это всё же не хорошо, хотел приберечь белый адрес на всякий случай, похоже случай наступил.
Аватара пользователя
Алексей Пикуров
Мы — нет. Не нужно просто.
Аватара пользователя
Алексей Пикуров
Я поясню. Мы не используем nginx не потому, что он хороший или плохой, а потому что он нам не нужен для задачи создания MyChat.

Если придумаем, как его эффективно использовать — тогда, конечно, да. Но пока нам кеширующий web-сервер не нужен, мы со своими задачами эффективно справляемся.
Аватара пользователя
ErDmitry
Думал, хотя бы клиент на тел. будет работать но нет, пробросы обычные без nginx.
Подумаю ещё, но очень не нравится мне эта ситуация.
Вложения
photo_2021-02-27_17-58-05.jpg
photo_2021-02-27_17-58-05.jpg (65.26 КБ) Просмотров: 3129
Аватара пользователя
ErDmitry
Дело не в том что он вам не нужен, а нужен он вашим некоторым клиентам. Продукт у вас платный и некоторые хотели бы использовать платный продукт так как им хочется.
Не спорю, у вас в одной коробке много чего есть, но это всё можно заменить бесплатными отдельными продуктами, которые будут работать через тот же nginx.
И вам пора бы уже перейти на Linux, я узнал что ваш сервер работает на Windows уже перед установкой, я был в шоке. А если корпоративная сеть вся на Linux?
В России пока только в задумках законопроект запретить использовать зарубежные технологии для бюджетных учреждений, но это точно будет, серверы и ПК за бюджетные средства уже нельзя покупать и без всяких там лазеек в законе.
Аватара пользователя
Алексей Пикуров
Сервер на Linux мы переносить не планируем. Что есть — то есть.
Аватара пользователя
Алексей Пикуров
Не сочтите за стёб, конечно, но в России нет отечественных операционных систем. От слова совсем.

Разного пошиба сборки линуксов есть только потому, что они бесплатны и открыты. Но не потому что они лучше или хуже того же Windows.
Аватара пользователя
ErDmitry
))) стёб не удался, я не фанат Российских разработок), разве что дома сижу на Calculate Linux и он мне очень нравится).
А в обще в России приказом заставят работать на Астра Linux и деваться уже некуда, будем работать на чём заставят.
Аватара пользователя
ErDmitry
У меня и matrix сейчас крутится в LXC контейнере на Calculate Linux и очень даже круто работает включая видео конференции.
Аватара пользователя
Алексей Пикуров
Я вас понимаю. Клиентские приложения для разных линуксов у нас есть. Но сервер слишком сложная штука, чтобы просто взять и переделать его под Linux. Без каких-либо гарантий профита от этой затеи :) Уверен, вы понимаете это.
У меня и matrix сейчас крутится в LXC контейнере

Тогда в чём проблема? Используйте его, если он вам подходит и решает все ваши задачи.
Аватара пользователя
ErDmitry
Тогда в чём проблема? Используйте его, если он вам подходит и решает все ваши задачи.

Используем, но в других больницах сманили меня на MyChat), вот и решил попробовать.
Аватара пользователя
ErDmitry
Ох ребят, пока мы с вами тут спорили, сервер-то не работал как надо). Я локально потом тоже не смог подключиться, пришлось перезапустить службу через скрипты и он заработал. Правда клиент с тел. так и не пашет, но в браузере норм.
Почему тогда на тел. не работает?
Аватара пользователя
Алексей Пикуров
Я не знаю. Логи хотя бы покажите или сообщения, что пишет клиент.
Аватара пользователя
ErDmitry
Скрин с тел. выше, точно такая же ошибка.
Аватара пользователя
ErDmitry
Могу в личку кинуть учётку, что бы сами посмотрели?
Аватара пользователя
ErDmitry
Очень похожая запись
Код: Выделить всё
[18:44:36:682 5]: Ошибка #0102: попытка подключения неизвестного приложения, IP: "213.87.123.255", Data: ""
Аватара пользователя
Алексей Пикуров
Позвоните мне любым мессенджером и запустите AnyDesk.
Аватара пользователя
Алексей Пикуров
Если написать в консоли telnet mychat.ingashcrb.ru 443, то я вижу такое:
nginx.png
nginx.png (6.31 КБ) Просмотров: 3123

Но меня должен отключить сервер MyChat (nodejs), а не ваш nginx.
Аватара пользователя
ErDmitry
Позвоните мне любым мессенджером и запустите AnyDesk.

Что-то не могу найти контакта с вами через тот же телеграмм например.
Аватара пользователя
ErDmitry
В итоге поступил так.
Поменял порт и пробросил его снаружи, подсунул сертификаты которые уже были для nginx и всё успешно работает.
Спасибо тех. поддержке, подключились и поговорили в телефонном режиме по телеграмм, обсудили некоторые моменты).
Аватара пользователя
MousE
Добрый день.
Вот решение проблемы выше.
Конфиг нгинкса
Код: Выделить всё
server {
   listen 80;
   listen [::]:80;
   server_name chat.*********.by;
   access_log /var/log/nginx/chat-access.log;
   error_log /var/log/nginx/chat-error.log debug;
   return 301 https://$server_name$request_uri;
 }

server {
    listen 443 ssl http2;
    server_name chat.***********.by;
    access_log /var/log/nginx/chat-access.log;
    error_log /var/log/nginx/chat-error.log debug;

    ssl on;
    ssl_certificate /etc/letsencrypt/live/**********/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/**********/privkey.pem;
    ssl_session_timeout 5m;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers 'EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH';
    ssl_prefer_server_ciphers on;
    ssl_session_cache shared:SSL:10m;


 location / {
     proxy_pass http://локальный адрес сервера:8081;
     proxy_read_timeout 300s;
     proxy_connect_timeout 75s;
     proxy_http_version 1.1;
     proxy_set_header Upgrade $http_upgrade;
     proxy_set_header Connection "upgrade";
     proxy_set_header Host      $host:$server_port;
     proxy_set_header X-Real-IP $remote_addr;
     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
 }


В админке сайта отключить использование шифрование трафика, в приложении указывать 443 порт
Аватара пользователя
ErDmitry
Спасибо большое, но мы отказались от mychat в пользу matrix. Уверен ваш ответ поможет в других ситуациях, ну и тем кому это потребуется.
Как я уже писал в этом посте, в России помаленьку государственные организации будут переводить на Linux, так и оказалось. Силовиков уже перевели на Linux, больницы до 2024-го года перевести, хотят они этого или нет. Да и я уверен что такие вещи как чат, сайт да и в обще подобные дела, просто обязаны сделаны на Linux. Германия для медицины выбрали matrix не просто так https://www.linux.org.ru/news/opensource/16435610 думаю и мы будем на него переходить рано или поздно, а я свою больницу уже перевёл).