3.5.14.2 Настройка прокси-сервера nginx для веб-приложений на Node.js
Скачать документ Предварительная настройка
Установка пакетов и запуск служб
Настройка Node.js
Настройка nginx
Настройка автозапуска systemd
Окружение
- Версия РЕД ОС: 8
- Конфигурация: Сервер графический
- Версия ПО: nginx-1:1.26.2-1, nodejs-1:20.15.1-1
Nginx — высокопроизводительный веб-сервер и почтовый прокси-сервер с открытым исходным кодом, обслуживающий большое количество высоконагруженных сайтов по всему миру. Nginx завоевал широкую популярность благодаря своей лёгкости, надёжности, масштабируемости и простоте настройки.
Предварительная настройка
Для настройки веб-сервера nginx перейдите в сеанс пользователя root:
su -
Здесь и далее настройка будет производиться с правами суперпользователя root, если не указано иное.
Внесите DNS-запись с наименованием веб-сервера в файл /etc/hosts:
echo <IP-адрес> <название_сайта> > /etc/hosts
Например:
echo 127.0.0.1 testsite.ru > /etc/hosts
Установка пакетов и запуск служб
Установите nginx и node.js с помощью команды:
dnf install nginx nodejs
Запустите и добавьте в автозагрузку службу nginx:
systemctl enable nginx --now
Проверьте статус службы nginx:
systemctl status nginx
nginx.service - The nginx HTTP and reverse proxy server
Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; preset: disabled)
Active: active (running) since Mon 2024-04-01 13:55:33 MSK; 2s ago
Process: 637943 ExecStartPre=/usr/bin/rm -f /run/nginx.pid (code=exited, status=0/SUCCESS)
Process: 637950 ExecStartPre=/usr/sbin/nginx -t (code=exited, status=0/SUCCESS)
Process: 637951 ExecStart=/usr/sbin/nginx (code=exited, status=0/SUCCESS)
Main PID: 637952 (nginx)
Tasks: 13 (limit: 18964)
Memory: 11.3M
CPU: 66ms
CGroup: /system.slice/nginx.service
Для проверки работы в адресной строке браузера введите http://testsite.ru
.
Настройка Node.js
Создайте каталог, в котором будут хранится файлы веб-приложения Node.js:
mkdir -p /var/www/testsite.ru
Создайте файл запуска приложения:
nano /var/www/testsite.ru/server.js
В файл server.js добавьте следующее содержимое:
const http = require('http');
const server = http.createServer((req, res) => {
res.writeHead(200, {
'Content-Type': 'text/plain; charset=UTF-8'
});
res.end('Hello, world!');
});
server.listen(3000, () => {
console.log('Start NodeJS Server on port 3000');
});
Запустите приложение:
node /var/www/testsite.ru/server.js
Для проверки работы в адресной строке браузера введите http://testsite.ru:3000
.
Далее назначьте необходимые права для файлов, указав следующие параметры:
chown -R $USER:$USER /var/www/testsite.ru/server.js chmod -R 755 /var/www/testsite.ru
Настройка nginx
Создайте каталог vhosts в папке nginx:
mkdir -p /etc/nginx/vhosts/
Далее необходимо создать конфигурационный файл, отвечающий за перенаправление (проксирование) запросв nginx к файлам сайта:
nano /etc/nginx/vhosts/testsite.conf
В файле укажите следующую настройку:
server{
listen 80;
server_name testsite.ru;
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
location / {
proxy_pass http://127.0.0.1:3000;
proxy_set_header Host $host;
}
}
Затем укажите запуск сервера в /etc/nginx/nginx.conf:
include /etc/nginx/vhosts/*.conf;
Данную строку необходимо указывать перед общей настройкой секции server
!
Проверьте конфигурацию nginx на наличие ошибок:
nginx -tnginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful
Добавьте правило SELinux для разрешения перенаправления запросов (проксирования):
setsebool -P httpd_can_network_connect 1
Для применения внесенных изменений перезапустите службу nginx:
systemctl restart nginx
Настройка автозапуска systemd
Для настройки автозапуска веб-приложения Node.js создайте файл node@.service:
nano /etc/systemd/system/node@.service
В файле укажите следующую настройку:
[Unit]
Description=NodeJS Service
After=network.target
[Service]
Type=simple
ExecStart=/usr/bin/node ./server.js
ExecReload=/bin/kill -HUP $MAINPID
Restart=on-failure
WorkingDirectory=/var/www/%i
[Install]
WantedBy=multi-user.target
Обратите внимание, что %i — это переменная, которой передается имя настраиваемого веб-приложения. Имя соответствует названию каталога, в котором хранится веб-приложение.
Для применения внесенных изменений перезапустите конфигурацию systemd:
systemctl daemon-reload
Запустите и добавьте в автозагрузку настраиваемое веб-приложение:
systemctl enable node@testsite.ru --now
Проверьте статус службы:
systemctl status node@testsite.ru
В статусе должно отображаться active (running).
Для проверки работы перейдите в браузере по адресу настроенного сайта http://testsite.ru
.
Дата последнего изменения: 13.11.2024
Если вы нашли ошибку, пожалуйста, выделите текст и нажмите Ctrl+Enter.