Я прокси-независимые приложения Node Express через Nginx.
Таким образом, новые приложения могут быть легко смонтированы, и я также могу запускать другие компоненты на одном сервере в разных местах.
Развертывание нескольких приложений Node на одном веб-сервере в подпапках с Nginx
С 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 static middleware.
Затем все остальные запросы перезаписываются и передаются в приложение Pet Project Node , поэтому приложению Node не нужно знать, где оно на самом деле смонтировано, и, следовательно, его можно переместить куда угодно только с помощью конфигурации.
proxy_redirect является обязательным условием для правильной обработки заголовка Location. Это чрезвычайно важно, если вы используете res.redirect () в своем приложении Node.
Вы можете легко скопировать эту настройку для нескольких приложений Node, работающих на разных портах, и добавить дополнительные обработчики местоположения для других целей.