Как настроить NGINX для использования нескольких поддоменов в локальной сети для обслуживания более чем одного приложения?

У меня есть следующая настройка в той же сети:

  • компьютер Windows с локальным IP 192.168.1.23
  • арочный сервер с локальным IP 192.168.1.15
    • Приложение панели управления Homarr на порту 9000
    • Приложение nextcloud в порту 9001
    • Приложение gitea в порту 9002

Приложения работают в контейнерах Docker на сервере и доступны на компьютере с Windows по следующим URL-адресам http://192.168.1.15:9000/, http://192.168.1.15:9001/, http://192.168.1.15:9002/.

Теперь я хочу настроить обратный прокси-сервер NGINX для доступа к различным сервисам, набрав http://gitea.test.dev/, http://homarr.test.dev/, http://nextcloud.test.dev/.

Чтобы сделать это локально, я изменил файлы хоста на обеих платформах:

# windows
192.168.1.15 test.dev
192.168.1.15 gitea.test.dev
192.168.1.15 homarr.test.dev
192.168.1.15 nextcloud.test.dev

# linux
127.0.0.1 localhost
127.0.0.1 gitea.localhost
127.0.0.1 homarr.localhost
127.0.0.1 nextcloud.localhost

На сервере Archlinux я могу получить доступ к отдельным службам в этот момент, используя описанный выше метод. Однако я не могу получить доступ к этим службам с компьютера с Windows, используя URL-адреса, подобные http://<service name>.test.dev/, хотя на данный момент это ожидаемое поведение.

Затем я настроил и запустил службу NGINX, используя следующую конфигурацию:

# /etc/nginx/nginx.conf
user http;
worker_processes auto;
worker_cpu_affinity auto;

events {
    multi_accept on;
    worker_connections 1024;
}

http {
    charset utf-8;
    sendfile on;
    tcp_nopush on;
    tcp_nodelay on;
    server_tokens off;
    log_not_found off;
    types_hash_max_size 4096;
    client_max_body_size 16M;

    # MIME
    include mime.types;
    default_type application/octet-stream;

    # logging
    access_log /var/log/nginx/access.log;
    error_log /var/log/nginx/error.log debug;

    # load configs
    # include /etc/nginx/conf.d/*.conf;
    include /etc/nginx/sites-enabled/*;
}

А в каталоге /etc/nginx/sites-enabled/ есть ссылки на настройки отдельных сервисов.

# /etc/nginx/sites-enabled/homarr.localhost.conf
server {
        listen 80;
        server_name homarr.localhost;
        location / {
                proxy_pass http://localhost:9000;
        }
}
# /etc/nginx/sites-enabled/nextcloud.localhost.conf
server {
        listen 80;
        server_name nextcloud.localhost;
        location / {
                proxy_pass http://localhost:9001;
        }
}
# /etc/nginx/sites-enabled/gitea.localhost.conf
server {
        listen 80;
        server_name gitea.localhost;
        location / {
                proxy_pass http://localhost:9002;
        }
}

Я считаю, что это очень простые proxy_pass конфигурации. Но я ожидаю, что они будут работать так, как задумано. Моя проблема в том, что только одна из этих служб доступна на компьютере с Windows с помощью http://test.dev/ или http://<service>.test.dev/>. Мне кажется, что default_server — единственный, который доступен, потому что доступная служба всегда соответствует алфавитному порядку имен служб, и, конечно же, это тот порядок, в котором они загружаются оператором include конфигурации.

Есть ли у вас какие-либо идеи, почему мои отдельные услуги не могут обслуживаться одновременно? И есть ли способ создать рабочую конфигурацию для обеспечения доступности всех трех служб в разных поддоменах локальной сети?

Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Kubernetes - это портативная, расширяемая платформа с открытым исходным кодом для управления контейнерными рабочими нагрузками и сервисами, которая...
Как создать PHP Image с нуля
Как создать PHP Image с нуля
Сегодня мы создадим PHP Image from Scratch для того, чтобы легко развернуть базовые PHP-приложения. Пожалуйста, имейте в виду, что это разработка для...
0
0
55
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Значения server_name неверны в файлах конфигурации вашего сайта. У вас есть

  • хомарр.localhost
  • nextcloud.localhost
  • gitea.localhost

но они должны быть

  • homarr.test.dev
  • nextcloud.test.dev
  • gitea.test.dev

Если вы хотите, чтобы оба имени работали, вы можете указать оба в файле конфигурации следующим образом:

server_name homarr.localhost homarr.test.dev;

но чтобы это работало, server_name должно соответствовать тому, что находится в заголовке Host во входящем запросе.

Другие вопросы по теме