Возникла необходимость прикрутить приложение на Node.js к Django-проекту, над которым сейчас работаю. Сам проект работает через gunicorn + nginx. Открывать в мир порт, который будет слушать Node.js неохота, да и не хочу чтобы на любом виртуалхосте он был доступен, поэтому решил прикрутить его (Node.js) к nginx’у. Ну и создать для него (Node.js) юнит в systemd, чтоб запускть-перезапускать.
Сам юнит:
sudo nano /etc/systemd/system/node_имя_вхоста.service
[Unit] Description=node_имя_вхоста.js -- Node JS App for имя_вхоста After=network.target [Service] Environment=NODE_PORT=номер_порта Type=simple User=имя_пользователя ExecStart=/usr/bin/node /путь/к/nodejs/приложению/имя_приложения.js Restart=on-failure [Install] WantedBy=multi-user.target
Енаблим и запускаем:
sudo systemctl enable node_имя_вхоста sudo systemctl start node_имя_вхоста
Далее добавляем кусок в конфиг виртуалхоста nginx’а:
sudo nano /etc/nginx/conf.d/имя_вхоста.conf
... location /nodejs/ { proxy_pass http://localhost:номер_порта/; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_http_version 1.1; } ....
Перезапускаем nginx:
sudo systemctl restart nginx
И готово:
var http = require('http'); var server = http.createServer(function(req, res) { res.writeHead(200); res.end('<h1>Hello, node.js!</h1>'); }); server.listen(номер_порта);