nginx и несколько nodejs проектов

Когда я стал знакомиться с технологией серверного 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 порту.

vk.com facebook.com TwitterMail.ru