Nginx работает как сервер переднего плана, который в этом случае передает запросы на сервер node.js. Поэтому вам нужно настроить конфигурационный файл nginx для узла.
Это то, что я сделал в своей коробке Ubuntu:
Создайте файл по yourdomain.com
адресу /etc/nginx/sites-available/
:
vim /etc/nginx/sites-available/yourdomain.com
В нем должно быть что-то вроде:
# the IP(s) on which your node server is running. I chose port 3000.
upstream app_yourdomain {
server 127.0.0.1:3000;
keepalive 8;
}
# the nginx server instance
server {
listen 80;
listen [::]:80;
server_name yourdomain.com www.yourdomain.com;
access_log /var/log/nginx/yourdomain.com.log;
# pass the request to the node.js server with the correct headers
# and much more can be added, see nginx config options
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-NginX-Proxy true;
proxy_pass http://app_yourdomain/;
proxy_redirect off;
}
}
Если вы хотите, чтобы nginx (> = 1.3.13) также обрабатывал запросы веб-сокетов, добавьте следующие строки в location /
раздел:
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
Как только у вас есть эта настройка, вы должны включить сайт, определенный в конфигурационном файле выше:
cd /etc/nginx/sites-enabled/
ln -s /etc/nginx/sites-available/yourdomain.com yourdomain.com
Создайте свое приложение сервера узла на /var/www/yourdomain/app.js
и запустите его наlocalhost:3000
var http = require('http');
http.createServer(function (req, res) {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end('Hello World\n');
}).listen(3000, "127.0.0.1");
console.log('Server running at http://127.0.0.1:3000/');
Тест на синтаксические ошибки:
nginx -t
Перезапустите nginx:
sudo /etc/init.d/nginx restart
Наконец запустите сервер узла:
cd /var/www/yourdomain/ && node app.js
Теперь вы должны увидеть «Hello World» на yourdomain.com
Последнее замечание относительно запуска сервера узлов: вы должны использовать какую-то систему мониторинга для демона узла. На узле есть удивительное руководство с upstart и monit .
location / { proxy_pass http://127.0.0.1:3000; }
? Зачем вам нужен весьupstream
бит конфигурации?sites-enabled
иsites-available
каталогов внутри/etc/nginx
. Если ваша версия поставляется без этих двух каталогов, скорее всего,conf.d
вместо нее есть один каталог. В этом случае, следование этим инструкциям не будет иметь никакого эффекта, ЕСЛИ ВЫ не изменитеinclude
оператор внутри файла,nginx.conf
чтобы он указывалsites-enabled
вместо значения по умолчаниюconf.d
. Надеюсь, что это имеет смысл. Это должно стать самоочевидным, как только вы увидите указанноеinclude
утверждение внутриnginx.conf
.Вы также можете настроить несколько доменов с помощью nginx, перенаправив их на несколько процессов node.js.
Например, чтобы достичь этого:
Эти порты (4000 и 5000) должны использоваться для прослушивания запросов приложения в коде вашего приложения.
/ И т.д. / Nginx / сайты с поддержкой / domain1
В / etc / nginx / sites-enabled / domain2
источник
http://example.com
становится автоматически302
«цифроhttp://www.example.com
. Это почему?proxy_set_header Host $host
чтобы избежать перенаправления HTTP 302.Вы также можете иметь разные URL для приложений в одной конфигурации сервера:
В / etc / nginx / sites-enabled / yourdomain :
Перезапустите nginx:
Запуск приложений.
узел app1.js
узел app2.js
источник
Я прокси-независимые приложения Node Express через Nginx.
Таким образом, новые приложения легко монтируются, и я также могу запускать другие компоненты на одном сервере в разных местах.
Вот более подробная информация о моей настройке с примером конфигурации Nginx:
От: http://skovalyov.blogspot.dk/2012/07/deploy-multiple-node-applications-on.html
источник
Node.js с конфигурацией Nginx.
добавьте следующую конфигурацию, чтобы Nginx выступал в качестве прокси-сервера перенаправления на порт 3000 трафика с сервера, когда мы пришли с «subdomain.your_domain.com»
источник
отвечая на ваш вопрос 2:
Я бы использовал вариант
b
просто потому, что она потребляет гораздо меньше ресурсов. с опцией 'a' каждый клиент будет заставлять сервер потреблять много памяти, загружая все нужные вам файлы (хотя мне нравится php, это одна из проблем с ним). С опцией 'b' вы можете загружать свои библиотеки (повторно используемый код) и делиться ими между всеми клиентскими запросами.Но имейте в виду, что если у вас несколько ядер, вам нужно настроить node.js, чтобы использовать их все.
источник
Я сделал репозиторий в Github, который вы можете клонировать, vagrant-node-nginx-шаблон
в основном node.js приложения на
/var/www/nodeapp
ISи конфиг nginx в
/etc/nginx/sites-available/
этоисточник
Вы также можете использовать node.js для генерации статических файлов в каталог, обслуживаемый nginx. Конечно, некоторые динамические части вашего сайта могут обслуживаться узлами, а некоторые - nginx (статическими).
Если некоторые из них обслуживаются nginx, это повышает вашу производительность.
источник
Мы можем легко настроить приложение Nodejs с помощью Nginx, действующего в качестве обратного прокси.
В следующей конфигурации предполагается, что приложение NodeJS работает на 127.0.0.1:8080,
в приведенной выше настройке ваше приложение Nodejs будет,
HTTP_HOST
заголовок, в котором вы можете применить доменную логику для ответа. 'Ваше приложение должно управляться менеджером процессов, таким как pm2 или супервизором, для обработки ситуаций / повторного использования сокетов или ресурсов и т. Д.
Настройка службы отчетов об ошибках для получения производственных ошибок, таких как сторожевой или роликовый
ПРИМЕЧАНИЕ: вы можете настроить логику для обработки маршрутов запросов к конкретному домену, создать промежуточное программное обеспечение для приложения expressjs
источник
Nginx может действовать как обратный прокси-сервер, который работает так же, как менеджер проекта. Когда он получает запрос, он анализирует его и направляет запрос в апстрим (участники проекта) или обрабатывает сам. У Nginx есть два способа обработки запроса в зависимости от его конфигурации.
переслать запрос на другой сервер
}
Сервер запрос
переслать запрос на другой сервер
Когда вы запускаете сервер node.js на порт 8000, nginx перенаправляет запрос на node.js. Напишите логику node.js и обработайте запрос. Вот и все, у вас есть сервер nodejs, работающий за сервером nginx.
Если вы хотите запускать любые другие сервисы, кроме nodejs, просто запустите другой сервис, такой как Django, flask, php, на разных портах и настройте его в nginx.
источник
Вы можете запустить nodejs, используя pm2, если вы хотите управлять каждым средством микросервиса и запускать его. Узел будет работать в правом порту, просто настройте этот порт в nginx (/etc/nginx/sites-enabled/domain.com)
Проверьте, работает ли localhost или нет с помощью ping.
А также
Это лучше, и, как вы сказали, тоже проще
источник
Лучшая и более простая установка с Nginx и Nodejs - это использовать Nginx в качестве балансировщика нагрузки HTTP и TCP с включенным proxy_protocol. В этом контексте Nginx сможет проксировать входящие запросы к nodejs, а также разорвать SSL-соединения с внутренним сервером (ами) Nginx, а не с самим прокси-сервером. (SSL-Сквозной)
По моему мнению, нет смысла приводить примеры, не относящиеся к SSL, поскольку все веб-приложения (или должны) использовать безопасные среды.
Пример конфигурации для прокси-сервера в /etc/nginx/nginx.conf
Теперь давайте разберемся с внутренним веб-сервером. /etc/nginx/nginx.conf :
Теперь давайте настроим виртуальный хост с этой конфигурацией с поддержкой SSL и proxy_protocol в /etc/nginx/sites-available/example.com-https.conf :
И, наконец, пример 2 веб- серверов nodejs : Первый сервер:
Второй сервер:
Теперь все должно быть идеально работающим и сбалансированным по нагрузке.
Некоторое время назад я писал о том, как настроить Nginx в качестве балансировщика нагрузки TCP в Docker . Проверьте это, если вы используете Docker.
источник