Настройте сервер owncloud и сервер rocket.chat на одной машине / ip за маршрутизатором

830
connexo

У меня есть следующий сценарий:

У меня есть статический IP-адрес от моего интернет-провайдера. Я использовал это в течение многих лет на маленьком сервере Rasbian на Raspberry PI, работающем с owncloud.

Теперь я купил гораздо более мощный пакет zotac (четырехъядерный процессор, 8 ГБ ОЗУ, 256 ГБ SSD), и я пытаюсь получить как сервер owncloud, работающий по протоколу https, так и сервер rocket.chat (аналог Slack) который, конечно, также должен работать на https.

Блок Zotac работает под управлением Ubuntu Server 18.04 LTS и находится за маршрутизатором Airport Extreme. У меня есть 2 разных поддоменов в основном домене, указывающих на мой IP-адрес.

Я настроил маршрутизацию для портов 80, 443и 8443все перенаправлены на локальный IP-адрес моего zotac box 192.168.1.33. Пример:

enter image description here

Сервер owncloud (Apache 2 с PHP 7.2 и MySQL 5.7) работает, https://cloud.mydomain.exampleи теперь я хочу, чтобы rocket.chat работал https://chat.mydomain.example:8443или, что еще лучше, просто включался https://chat.mydomain.com.

Rocket.chat поставляется в быстрой установке, где rocket.chat работает на веб-сервере caddy localhost:3000. Я попытался выполнить настройку https, описанную в https://rocket.chat/docs/installation/manual-installation/ubuntu/snaps/autossl/, но не смог заставить его работать. Я также попытался настроить Apache, который запускает сервер owncloud, для работы в качестве обратного прокси-сервера, как описано в https://stackoverflow.com/questions/8541182/apache-redirect-to-another-port, но мне не удалось заставить его работать.

Затем я попытался настроить виртуальный хост для порта 8443 с помощью этого файла rocketchat.conf:

<VirtualHost *:8443> SSLEngine on SSLCertificateFile /etc/ssl/certs/apache-selfsigned.crt SSLCertificateKeyFile /etc/private/ssl/apache-selfsigned.key ServerAdmin admin@example.com ServerName localhost ProxyPreserveHost On  <Proxy *> Order allow,deny Allow from all </Proxy> ProxyPass / https://localhost:3000/ ProxyPassReverse / https://localhost:3000/ </VirtualHost> 

Я также не понимаю, почему я не могу просто заставить моего caddy прослушивать порт 8443 (и по-прежнему использовать https), в то время как Apache прослушивает 80 и 443.

Какая будет оптимальная настройка для моего сценария? Какие шаги необходимо предпринять?

1

1 ответ на вопрос

2
Craft

Я думаю, что официальная документация Rocket.Chat достаточно ясна:

Запуск за обратным прокси-сервером Apache SSL

Запустите это как root:

apt-get update apt-get install apache2 a2enmod proxy_http a2enmod proxy a2enmod ssl a2enmod proxy_wstunnel a2enmod rewrite 

Добавьте свой закрытый ключ к /etc/ssl/private/chat.domain.com.key

Блокировка разрешений: chmod 400 /etc/ssl/private/chat.domain.com.key

Добавьте свой сертификат в /etc/ssl/certs/chat.domain.com.crt

Добавьте ваше промежуточное к /etc/ssl/certs/intermediate.ca.pem

Отредактируйте /etc/apache2/sites-enabled/rocketchat.confи убедитесь, что вы используете свое действительное имя хоста вместо примера имени хоста «your_hostname.com» ниже.

<VirtualHost *:443>  ServerAdmin it@domain.com ServerName chat.domain.com ErrorLog /var/log/chat.domain.com_error.log TransferLog /var/log/chat.domain.com_access.log LogLevel info SSLEngine On SSLCertificateFile /etc/ssl/certs/chat.domain.com.crt SSLCertificateKeyFile /etc/ssl/private/chat.domain.com.key SSLCertificateChainFile /etc/ssl/certs/intermediate.ca.pem  <Location /> Order allow,deny Allow from all </Location>  RewriteEngine On RewriteCond % =websocket [NC] RewriteRule /(.*) ws://localhost:3000/$1 [P,L] RewriteCond % !=websocket [NC] RewriteRule /(.*) http://localhost:3000/$1 [P,L]  ProxyPassReverse / http://localhost:3000/ </VirtualHost> 

Перезапустите Apache: service apache2 restart

Когда это говорит

не забудьте использовать свое действительное имя хоста вместо примера имени хоста «your_hostname.com»

это вероятно означает

не забудьте использовать свой фактический внешний адрес https (например, https://www.example.com) вместоhttp://localhost:3000

Как я уже говорил, порт 443 уже используется на Apache для owncloud. Вот почему я даже не начал настраивать Apache2 в качестве обратного прокси с таким длинным объяснением. Мне нужно дифференцирование на основе фактического имени сервера, а не на порт. Вот почему я собирался использовать порт 8443. Или у вас могут быть два разных файла виртуального хоста, оба начинающиеся с ``? connexo 6 лет назад 0
Да ! Вы можете использовать *: 443 для нескольких vhost. Убедитесь, что вы используете другое имя сервера. Craft 6 лет назад 1
@connexo Для порта 443 механизм, который позволяет вам сделать это, - [Индикация имени сервера] (https://en.wikipedia.org/wiki/Server_Name_Indication). Anaksunaman 6 лет назад 0