我几乎总是只用一个Nginx代理来做这件事,不过更多的是为了简单,而不是与安全有关。
一个特别重要的模式是围绕浏览器前端的。 你的React或Angular代码在浏览器中运行,而不是在容器中,所以它不能使用Docker网络;但出于部署时间配置和CORS的原因,如果代码和后端应用程序从相同的主机和端口提供服务,则会好得多。 如果你能使用
作为后端URL,而不嵌入主机名或端口,它就能在任何可以部署服务的地方工作。/api/whatever
这将给你带来一个像这样的 “作曲 “设置。
version: '3.8' services: ingress: image: nginx volumes: - ./nginx.conf:/etc/nginx/nginx.conf:ro ports: - '8888:80' # <-- this is the only published port frontend: build: frontend # no ports:, volumes:, networks:, container_name:, _etc._ backend: build: backend environment: - PGHOST=db db: image: postgresql environment: { ... } volumes: - pgdata:/var/lib/postgresql/data volumes: pgdata:
在这个堆栈中,你能从Docker外部接触到的唯一东西是
容器;其他东西都没有ingress
。 这就是你想要的(生产)设置。 (我倾向于尽量减少开发和生产Docker设置之间的差异,但增加更多的ports:
,例如用ports:
直接访问数据库,而不需要psql
,这对非生产是很有帮助的。)docker exec
然后,Nginx配置有你需要的所有URL路由。
upstream backend { server backend:3000 } upstream frontend { server frontend:3000 } server { location / { proxy_pass http://frontend; } location /api { proxy_pass http://backend; } }
你可以在这个配置中做其他事情,比如提供(统一的)认证检查,隐藏
…路由,并将其他服务整合到你的API中。 如果你有许多独立的Nginx,所有这些都很难做到一致。.../admin/...
原文链接:https://www.qiniu.com/qfans/qnso-70140182
© 版权声明
声明📢本站内容均来自互联网,归原创作者所有,如有侵权必删除。
本站文章皆由CC-4.0协议发布,如无来源则为原创,转载请注明出处。
THE END