Когда я стал знакомиться с технологией серверного JavaScript — NodeJS. То столкнулся с тем, что я не могу запустить 2 приложения на 80 порту. Однако я привык использовать сервера на полную катушку, и запускать на одном по десятку проектов. Вот и решил я поделиться как множество nodeJS решений запустить на сервере.
Конечно нам нужен будет маршрутизатор web трафика т.е. проксирующий сервер nginx. Тем более, что я поставил задачу запускать nodeJS программки совместно с apache+php.
Итак ставим ngix
sudo apt-get install nginx -y
Apache2 у меня уже трудился на сервере. Но его однако надо выключить, а после перенастроить. Выключаем apache2
sudo service apache2 stop;
Теперь запускаем наши node web приложения скажем одно на порту 8081 второе 8082. Они откликаются на запросы по порту http://127.0.0.1:8081 и http://127.0.0.1:8082. Но наша задача стоит в том чтобы они работали оба на 80 порту и главное чтобы у каждого было своё доменное имя. Ок для этого в настройках домена или в файле /etc/hosts(если вы экспериментируете в локалке) указываем ip для домена. Ну скажем давайте для примера сделаем в /etc/hosts записи привязки виртуального домена.
sudo vim /etc/hosts
И вставляем
127.0.0.1 nodejs1.app
127.0.0.1 nodejs2.app
Пингуем 2 домена. И получаем пинг на localhost.
Теперь надо подружить эти два приложения с их доменами и подружить обязательно на 80 порту. Для этого открываем файл конфигурации относящийся к сайтам nginx
sudo vim /etc/nginx/sites-enabled/default
И добавляем сервер который будет слушать 80 порт но проксировать 8081 по определённому домену:
server {
listen 80;
server_name nodejs1.app;
location / {
proxy_pass http://127.0.0.1:8081;
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;
}
}
Добавляем ещё ниже
server {
listen 80;
server_name nodejs2.app;
location / {
proxy_pass http://127.0.0.1:8082;
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;
}
}
Теперь запускаем nginx
sudo service nginx start;
Если в браузере набрать http://nodejs1.app или http://nodejs2.app то увидите что они работают в паре на 80 порту, хотя каждый весит на своём собственном 8081 и 8082.
Теперь вернёмся к apache, первое что мы должны это указать что не стоит использовать 80 порт для этого в файле конфига апача vim /etc/apache2/ports.conf укажите Listen 8090 в место 80 порта.
Далее в файле конфига сайтов vim /etc/apache2/sites-enabled/000-default.conf измените настройки VirtualHost *:80 на VirtualHost *:8090. И все виртуальные хосты теперь открывайте по портам 8091, 8092, 8093… После запускаем apache2. Ну и уже понятно что добавляя сервера в nginx вы сможете также их все подружить на 80 порту.