Налаштовуємо 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]