У меня есть следующая настройка в той же сети:
192.168.1.23
192.168.1.15
9000
9001
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
конфигурации.
Есть ли у вас какие-либо идеи, почему мои отдельные услуги не могут обслуживаться одновременно? И есть ли способ создать рабочую конфигурацию для обеспечения доступности всех трех служб в разных поддоменах локальной сети?
Значения server_name
неверны в файлах конфигурации вашего сайта. У вас есть
но они должны быть
Если вы хотите, чтобы оба имени работали, вы можете указать оба в файле конфигурации следующим образом:
server_name homarr.localhost homarr.test.dev;
но чтобы это работало, server_name
должно соответствовать тому, что находится в заголовке Host
во входящем запросе.