Я прокси-независимые приложения Node Express через Nginx.
Таким образом, новые приложения легко монтируются, и я также могу запускать другие компоненты на одном сервере в разных местах.
Разверните несколько приложений Node на одном веб-сервере в подпапках с помощью Nginx
С Node все усложняется, когда вам нужно переместить ваше приложение с локального хоста в Интернет.
Не существует общего подхода для развертывания Node.
Google может найти тонны статей на эту тему, но я изо всех сил пытался найти правильное решение для нужной мне установки.
По сути, у меня есть веб-сервер, и я хочу, чтобы приложения Node монтировались во вложенные папки (т . Е. Http: // myhost / demo / pet-project / ) без какой-либо зависимости конфигурации от кода приложения.
В то же время я хочу, чтобы другие вещи, такие как блог, работали на том же веб-сервере.
Звучит просто, а? Очевидно нет.
Во многих примерах на веб-узлах приложения либо запускаются через порт 80, либо через Nginx проксируются в корень.
Несмотря на то, что оба подхода действительны для определенных вариантов использования, они не соответствуют моим простым, но немного экзотическим критериям.
Вот почему я создал свою собственную конфигурацию Nginx и вот выдержка:
upstream pet_project {
server localhost:3000;
}
server {
listen 80;
listen [::]:80;
server_name frontend;
location /demo/pet-project {
alias /opt/demo/pet-project/public/;
try_files $uri $uri/ @pet-project;
}
location @pet-project {
rewrite /demo/pet-project(.*) $1 break;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $proxy_host;
proxy_set_header X-NginX-Proxy true;
proxy_pass http://pet_project;
proxy_redirect http://pet_project/ /demo/pet-project/;
}
}
Из этого примера вы можете заметить, что я подключаю свое приложение Pet Project Node, работающее на порту 3000, к http: // myhost / demo / pet-project .
Сначала Nginx проверяет, является ли запрошенный ресурс статическим файлом, доступным по адресу / opt / demo / pet-project / public /, и в этом случае он работает очень эффективно, поэтому нам не нужен избыточный слой, такой как Connect. статическое промежуточное ПО.
Затем все другие запросы перезаписываются и передаются в приложение Pet Project Node , поэтому приложению Node не нужно знать, где оно фактически смонтировано, и, таким образом, его можно переместить куда угодно только посредством конфигурации.
proxy_redirect необходим для правильной обработки заголовка Location. Это чрезвычайно важно, если вы используете res.redirect () в своем приложении Node.
Вы можете легко скопировать эту настройку для нескольких приложений Node, работающих на разных портах, и добавить дополнительные обработчики местоположения для других целей.