Настраиваем subdomain в Apache для нескольких node.js приложений

Сначала останавливаем все приложение которые запущены на порту :80 и запускаем приложение на другом порту. У меня запущено два приложения одно на порту :8080 и другое на порту :8081.

Затем устанавливаем Apache

sudo apt-get install apache2

Проверяем apache

sudo service apache2 status

Если сервер остановлен тогда запускаем его

sudo service apache2 start

Если приложение использует socket.io, не забудьте также включить несколько модов apache:

a2enmod proxy
a2enmod proxy_balancer
a2enmod proxy_express
a2enmod proxy_http

Перехожу в папку

cd /etc/apache2/sites-available

И редактирую файл

 nano 000-default.conf

<VirtualHost *:80>
    ServerName sub.{domain}.com

    <Location "/">
        ProxyPreserveHost On
        ProxyPass http://localhost:8080/
        ProxyPassReverse http://localhost:8080/
    </Location>
</VirtualHost>

<VirtualHost *:80>
    ServerName {domain}.com

    <Location "/">
        ProxyPreserveHost On
        ProxyPass http://localhost:8081/
        ProxyPassReverse http://localhost:8081/
    </Location>
</VirtualHost>

Сохраняем и перезапускаем apache2

service apache2 reload

Проверяем и оба сайта должны быть доступны.

Для сокетов

нужно выполнить следующее
sudo a2enmod rewrite
a2enmod proxy_wstunnel

И конфиг должен выглядит вот так

<VirtualHost *:80>
    ServerName sub.{domain}.com

    RewriteEngine on
    RewriteCond ${HTTP:Upgrade} websocket [NC]
    RewriteCond ${HTTP:Connection} upgrade [NC]
    RewriteRule .* "ws:/localhost:8080/$1" [P,L]

    <Location "/">
        ProxyPreserveHost On
        ProxyPass http://localhost:8080/
        ProxyPassReverse http://localhost:8080/
    </Location>
</VirtualHost>

В конфиг мы добавили только

RewriteEngine on
RewriteCond ${HTTP:Upgrade} websocket [NC]
RewriteCond ${HTTP:Connection} upgrade [NC]
RewriteRule .* "wss:/localhost:8080/$1" [P,L]