Docker环境,nginx反向代理,本地或全球

我几乎总是只用一个Nginx代理来做这件事,不过更多的是为了简单,而不是与安全有关。

一个特别重要的模式是围绕浏览器前端的。 你的React或Angular代码在浏览器中运行,而不是在容器中,所以它不能使用Docker网络;但出于部署时间配置和CORS的原因,如果代码和后端应用程序从相同的主机和端口提供服务,则会好得多。 如果你能使用/api/whatever作为后端URL,而不嵌入主机名或端口,它就能在任何可以部署服务的地方工作。

这将给你带来一个像这样的 “作曲 “设置。

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容器;其他东西都没有ports:。 这就是你想要的(生产)设置。 (我倾向于尽量减少开发和生产Docker设置之间的差异,但增加更多的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; } } 

你可以在这个配置中做其他事情,比如提供(统一的)认证检查,隐藏.../admin/...…路由,并将其他服务整合到你的API中。 如果你有许多独立的Nginx,所有这些都很难做到一致。

原文链接:https://www.qiniu.com/qfans/qnso-70140182

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享