Я новичок в Docker и настраиваю новое приложение, в котором у меня есть 2 службы для моего файла docker-compose:
# Contains all my API servers
api_load_balancer:
build: ./microservices/load_balancer
restart: always
ports:
- "8080:80"
# Contains all my client servers
server_client:
build: ./microservices/client
ports:
- "80:80"
....
Мой microservices / load_balancer nginx.conf выглядит так:
events { worker_connections 1024; }
http{
include /etc/nginx/mime.types;
default_type application/octet-stream;
upstream api_nodes {
server api_1:9000;
}
upstream socket_nodes {
ip_hash;
server socketio_1:5000;
}
# SERVER API
server {
location /socket.io/ {
proxy_set_header Access-Control-Allow-Origin *;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
proxy_pass http://socket_nodes;
# enable WebSockets
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
location /api/ {
proxy_set_header Access-Control-Allow-Origin *;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
proxy_pass http://api_nodes;
}
}
}
Мой load_balancer / Dockerfile выглядит следующим образом:
FROM nginx:alpine
COPY ./nginx.conf /etc/nginx/nginx.conf
COPY ./ssl ./etc/nginx/ssl
EXPOSE 80
Когда я пытаюсь подключиться с моего клиента, я могу сделать это с сервера моего клиента (используя соединение api_load_balancerстрока, поскольку они находятся в одной и той же сети докеров), но когда я пытаюсь сделать вызов из браузера, мне нужно изменить строку подключения на что-то вроде localhost: 8080 или some.ip.in.public.server: 8080.
Мне не нравится идея выставлять ни мой порт, ни мою конфигурацию API таким образом, так есть ли способ реализовать более прозрачное соединение между этими микросервисами?Я не знаю, возможно ли это сделать.