在nginx代理背后提供多个docker微服务

我想弄清楚如何通过dockerdynamic代理一个nginx代理后面的几个微服务。 我已经能够使用一个应用程序,但我想dynamic地添加微服务。 我想这样做,而不重新启动nginx和中断用户。

这是可能的,或者我应该为每个微服务创build一个configuration文件? 我已经包含下面的示例:

本地主机=简单的欢迎页面
localhost / service1 = microservice
localhost / service2 = microservice
localhost / serviceN =微服务

泊坞窗,compose.yml

 ---版本:“2”服务:应用程序:构build:应用程序microservice1:图像:registry.local:4567 / microservice1:最新microservice2:图像:registry.local:4567 / microservice2:最新的代理:构build:代理端口: 80:80" 

proxy.conf

server { listen 80; resolver 127.0.0.11 valid=5s ipv6=off; set $upstream "http://app"; location / { proxy_pass $upstream$request_uri; } } 

/etc/nginx/sites-enabled/的符号链接在/etc/nginx/sites-enabled/ /etc/nginx/sites-available/为每个微服务configuration文件。

在app / microservice1 / microservice2中放入$ MICRO_SERVICE,

 upstream REPLACEME_SERVICENAME { server $MICRO_SERVICE:PORT fail_timeout=0; } server { listen 80; server_name REPLACEME_SITENAME.REPLACEME_DOMAIN; proxy_pass http://REPLACEME_SERVICENAME; } 

强制SSL:

 upstream REPLACEME_SITENAME.REPLACEME_DOMAIN { server $MICRO_SERVICE fail_timeout=0; } server { # We only redirect from port 80 to 443 # to enforce encryption listen 80; server_name REPLACEME_SITENAME.REPLACEME_DOMAIN; return 301 https://REPLACEME_SITENAME.REPLACEME_DOMAIN$request_uri; } server { listen 443 ssl http2; server_name REPLACEME_SITENAME.REPLACEME_DOMAIN; # If you require basic auth you can use these lines as an example #auth_basic "Restricted!"; #auth_basic_user_file /etc/nginx/private/httplock; # SSL ssl_certificate /etc/letsencrypt/live/REPLACEME_SITENAME.REPLACEME_DOMAIN/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/REPLACEME_SITENAME.REPLACEME_DOMAIN/privkey.pem; proxy_connect_timeout 75s; proxy_send_timeout 75s; proxy_read_timeout 75s; proxy_http_version 1.1; send_timeout 75s; ssl_ciphers "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH"; ssl_prefer_server_ciphers on; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; location / { proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-Proto https; proxy_set_header X-Forwarded-For $remote_addr; proxy_set_header X-Forwarded-Host $remote_addr; proxy_pass http://REPLACEME_SITENAME.REPLACEME_DOMAIN; } } 

我也有一个回购站,在我的衣柜里为树莓派build立一个微小的nginx服务,为我的房子里的所有东西提供服务:

https://github.com/joshuacox/local-nginx/

还有一个Makefile来帮助创build新的服务。