Поиск по сайту:

Как настроить Nginx в качестве обратного прокси для приложения Nodejs


Nodejs — это бесплатная, легкая, масштабируемая и эффективная платформа JavaScript с открытым исходным кодом, созданная на базе JavaScript-движка Chrome V8 и использующая управляемую событиями неблокирующую модель ввода-вывода. Nodejs теперь повсюду и стал очень популярен для разработки программного обеспечения: от веб-сайтов, веб-приложений до сетевых приложений и многого другого.

Nginx — это высокопроизводительный HTTP-сервер с открытым исходным кодом, балансировщик нагрузки и программное обеспечение обратного прокси. Он имеет простой язык конфигурации, что упрощает настройку. В этой статье мы покажем, как настроить Nginx в качестве обратного прокси-сервера для приложений Nodejs.

Читайте также: полное руководство по защите, усилению защиты и повышению производительности веб-сервера Nginx

Примечание. Если ваша система уже работает с Nodejs и NPM и ваше приложение работает на определенном порту , перейдите сразу к Шагу 4.

Шаг 1. Установка Nodejs и NPM в Linux

Последнюю версию Node.js и NPM можно установить из официального репозитория бинарных дистрибутивов NodeSource Enterprise Linux, Fedora, Debian и Ubuntu, который поддерживается веб-сайтом Nodejs. и вам нужно будет добавить его в свою систему, чтобы иметь возможность установить последние версии пакетов Nodejs и NPM, как показано.

В Debian/Ubuntu

---------- Install Node.js v11.x ---------- 
curl -sL https://deb.nodesource.com/setup_11.x | sudo -E bash -
sudo apt-get install -y nodejs

---------- Install Node.js v10.x ----------
curl -sL https://deb.nodesource.com/setup_10.x | sudo -E bash -
sudo apt-get install -y nodejs

В CentOS/RHEL и Fedora

---------- Install Node.js v11.x ---------- 
curl -sL https://rpm.nodesource.com/setup_11.x | bash -

---------- Install Node.js v10.x ----------
curl -sL https://rpm.nodesource.com/setup_10.x | bash -

Шаг 2. Создание приложения Nodejs

В демонстрационных целях мы создадим пример приложения под названием "sysmon", которое будет работать на порту 5000, как показано.

sudo mkdir -p /var/www/html/sysmon
sudo vim /var/www/html/sysmon/server.js

Скопируйте и вставьте следующий код в файл server.js (замените 192.168.43.31 на IP-адрес вашего сервера).

const http = require('http');

const hostname = '192.168.43.31';
const port = 5000;

const server = http.createServer((req, res) => {
	res.statusCode = 200;
  	res.setHeader('Content-Type', 'text/plain');
  	res.end('Sysmon App is Up and Running!\n');
});

server.listen(port, hostname, () => {
  	console.log(`Server running at http://${hostname}:${port}/`);
});

Сохраните файл и выйдите.

Теперь запустите приложение узла с помощью следующей команды (нажмите Ctrl+x, чтобы завершить его).

sudo node /var/www/html/sysmon/server.js
OR
sudo node /var/www/html/sysmon/server.js &   #start it in the background to free up your terminal

Теперь откройте браузер и получите доступ к своему приложению по URL-адресу http://198.168.43.31:5000.

Шаг 3. Установите обратный прокси-сервер Nginx в Linux

Мы установим последнюю версию Nginx из официального репозитория, как показано ниже.

В Debian/Ubuntu

Создайте файл с именем /etc/apt/sources.list.d/nginx.list и добавьте в него следующие строки.

deb http://nginx.org/packages/ubuntu/ bionic nginx
deb-src http://nginx.org/packages/ubuntu/  bionic nginx

Затем добавьте ключ подписи репозитория, обновите индекс системного пакета и установите пакет nginx следующим образом.

wget --quiet http://nginx.org/keys/nginx_signing.key && sudo apt-key add nginx_signing.key
sudo apt update
sudo apt install nginx

В CentOS/RHEL и Fedora

Создайте файл с именем /etc/yum.repos.d/nginx.repo и вставьте одну из приведенных ниже конфигураций.

ЦентОС
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/ gpgcheck=0 enabled=1
РЭЛ
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/rhel/$releasever/$basearch/ gpgcheck=0 enabled=1

Примечание. Из-за различий между CentOS и RHEL необходимо заменить $releasever на 6. (для 6.x) или 7 (для 7.x), в зависимости от версии вашей ОС.

Затем добавьте ключ подписи репозитория и установите пакет nginx, как показано.

wget --quiet http://nginx.org/keys/nginx_signing.key && rpm --import nginx_signing.key
yum install nginx

После успешной установки Nginx запустите его, включите автоматический запуск при загрузке системы и проверьте, работает ли он.

---------- On Debian/Ubuntu ---------- 
sudo systemctl status nginx
sudo systemctl enable nginx
sudo systemctl status nginx

---------- On CentOS/RHEL ---------- 
systemctl status nginx
systemctl enable nginx
systemctl status nginx

Если вы используете системный брандмауэр, вам необходимо открыть порты 80 (HTTP), 443 (HTTPS) и 5000 (приложение Node), который веб-сервер прослушивает запросы на подключение клиентов.

---------- On Debian/Ubuntu ---------- 
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw allow 5000/tcp
sudo ufw reload

---------- On CentOS/RHEL ---------- 
firewall-cmd --permanent --add-port=80/tcp
firewall-cmd --permanent --add-port=443/tcp
firewall-cmd --permanent --add-port=5000/tcp
firewall-cmd --reload 

Шаг 4. Настройте Nginx в качестве обратного прокси для приложения Nodejs

Теперь создайте файл конфигурации блока сервера для вашего приложения Node в /etc/nginx/conf.d/, как показано.

sudo vim /etc/nginx/conf.d/sysmon.conf 

Скопируйте и вставьте следующую конфигурацию (замените 192.168.43.31 на IP-адрес вашего сервера и tecmint.lan на имя вашего домена).

server {
    listen 80;
    server_name sysmon.tecmint.lan;

    location / {
        proxy_set_header   X-Forwarded-For $remote_addr;
        proxy_set_header   Host $http_host;
        proxy_pass         http://192.168.43.31:5000;
    }
}

Сохраните изменения и выйдите из файла.

Наконец, перезапустите службу Nginx, чтобы применить последние изменения.

sudo systemctl restart nginx
OR
systemctl restart nginx

Шаг 5. Доступ к приложению Nodejs через веб-браузер

Теперь вы сможете получить доступ к своему приложению Node, не указывая в URL-адресе порт, который оно прослушивает: это очень удобный способ доступа к нему для пользователей.

http://sysmon.tecmint.lan 

Чтобы ваше тестовое доменное имя работало, вам необходимо настроить локальный DNS с помощью файла /etc/hosts, открыть его и добавить в него строку ниже (не забудьте изменить 192.168.43.31 ). с IP-адресом вашего сервера и tecmint.lan с вашим доменным именем, как и раньше).

192.168.43.31 sysmon.tecmint.lan

Вот и все! В этой статье мы показали, как настроить Nginx в качестве обратного прокси-сервера для приложений Nodejs. Используйте форму обратной связи ниже, чтобы задать любые вопросы или поделиться своими мыслями об этой статье.