У меня на одном хосте запущено несколько приложений ruby:
~/app1
~/app2
~/app3
И я хочу, чтобы nginx прокси эти приложения, используя такие подкаталоги, как:
http://example.com/app1
http://example.com/app2
http://example.com/app3
Мне любопытно, поддерживает ли nginx возможность определять эти местоположения в нескольких файлах, чтобы я мог сохранить каждую конфигурацию с приложением вместо того, чтобы иметь один монолитный файл конфигурации для всех приложений:
~/app1/nginx.conf
~/app2/nginx.conf
~/app3/nginx.conf
Моя наивная попытка определить сервер с помощью одной директивы location в каждом из 3-х конфигурационных файлов привела к conflicting server name "example.com" on [::]:80, ignored
появлению конфигов, которые выглядят так:
upstream app1 { server 127.0.0.1:4567; }
server {
listen [::]:80;
listen 80;
servername example.com
location /app1 {
proxy_pass http://app1;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-Port $server_port;
proxy_set_header X-Request-Start $msec;
}
}
Есть ли способ организовать конфиги таким образом?
"location" directive is not allowed here
.include /etc/nginx/above_server.d/*
иinclude /etc/nginx/in_server.d/*
Я полагаю, вы можете использовать эту конфигурацию:
а затем в каталоге каждого приложения настройте перенаправление следующим образом:
источник
server
блока, но я думаю, что вариант использования OP хорошо подходит для этого ответа.