如何使用Docker隐藏微服务之间的API连接?
我是Docker的新手,我正在设置一个新的应用程序,其中Docker compose文件中有两个服务:如何使用Docker隐藏微服务之间的API连接?,docker,nginx,docker-compose,microservices,Docker,Nginx,Docker Compose,Microservices,我是Docker的新手,我正在设置一个新的应用程序,其中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: buil
# 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;
}
}
}
FROM nginx:alpine
COPY ./nginx.conf /etc/nginx/nginx.conf
COPY ./ssl ./etc/nginx/ssl
EXPOSE 80
我的负载均衡器/Dockerfile如下所示:
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;
}
}
}
FROM nginx:alpine
COPY ./nginx.conf /etc/nginx/nginx.conf
COPY ./ssl ./etc/nginx/ssl
EXPOSE 80
当我尝试从客户端进行连接时,我可以从客户端的服务器进行连接(使用api_load_balancer连接字符串,因为它们位于同一docker网络中),但是,当我尝试从浏览器进行调用时,我需要将连接字符串更改为localhost:8080或某个.ip.in.public.server:8080
我不喜欢这样既不公开我的端口也不公开我的API配置的想法,那么有什么方法可以在这些微服务之间实现更透明的连接呢?我不知道是否可以这样做。您是否可以在同一主机上显示您的dockerfile./microservices/load\u balancer?容器,其中包含浏览器,并且您希望在浏览器上访问该容器。是吗?@onder,是的,这个想法是有两个主要的微服务,一个负责前端连接,另一个负责我的API操作。我可以在不同的主机上做,但我想知道是否有可能在我还在开发的主机上做phase@Albeis,我已将其添加到问题描述中。您发布的是de nginxconf,而不是dockerfile。如何制作dokcer映像?能否在同一主机上显示dockerfile./microservices/load\u balancer?容器,其中包含浏览器,并且您希望在浏览器上访问该容器。是吗?@onder,是的,这个想法是有两个主要的微服务,一个负责前端连接,另一个负责我的API操作。我可以在不同的主机上做,但我想知道是否有可能在我还在开发的主机上做phase@Albeis,我已将其添加到问题描述中。您发布的是de nginxconf,而不是dockerfile。如何塑造你的dokcer形象?