poloniumv's

Прикручиваем Node.js к nginx в Arch Linux

16 января 2018 г. 14:52

Возникла необходимость прикрутить приложение на 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(номер_порта);