У меня есть следующая настройка в той же сети:
192.168.1.23192.168.1.15900090019002Приложения работают в контейнерах 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 конфигурации.
Есть ли у вас какие-либо идеи, почему мои отдельные услуги не могут обслуживаться одновременно? И есть ли способ создать рабочую конфигурацию для обеспечения доступности всех трех служб в разных поддоменах локальной сети?


Значения server_name неверны в файлах конфигурации вашего сайта. У вас есть
но они должны быть
Если вы хотите, чтобы оба имени работали, вы можете указать оба в файле конфигурации следующим образом:
server_name homarr.localhost homarr.test.dev;
но чтобы это работало, server_name должно соответствовать тому, что находится в заголовке Host во входящем запросе.