Сначала останавливаем все приложение которые запущены на порту :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]