首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Docker环境,nginx反向代理,本地或全局

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

Stack Overflow用户
提问于 2021-11-28 02:19:58
回答 1查看 314关注 0票数 0

一些对接-合成解决方案,使用nginx作为反向代理的安全原因,当服务暴露在互联网上。用自己的nginx (反向代理)安装多个docker服务,还是创建一个专用容器,保存nginx服务,并将其重定向到所有“本地”容器,会更正确吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-11-28 12:33:36

我几乎总是只使用一个Nginx代理就能做到这一点,尽管这更多的是为了简单,而不是任何与安全相关的事情。

一个特别重要的模式是围绕浏览器前端.您的反应性或角度代码在浏览器中运行,而不是在容器中运行,因此它不能使用Docker网络;但是,对于部署时配置和CORS来说,如果代码和后端应用程序是从同一个主机和端口服务的,那么情况要好得多。如果您可以使用/api/whatever作为后端URL,而不嵌入主机名或端口,那么它将在可以部署服务的任何地方工作。

这将给您带来一个如下所示的组合设置:

代码语言:javascript
复制
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:。这就是你想要的(生产)设置。(我倾向于尽量减少开发人员和prod设置之间的差异,但是添加更多的ports: (例如,使用psql直接访问数据库,而不使用docker exec )对非prod非常有帮助。

然后,Nginx配置拥有所需的所有URL路由。

代码语言:javascript
复制
upstream backend { server backend:3000 }
upstream frontend { server frontend:3000 }

server {
  location / {
    proxy_pass http://frontend;
  }
  location /api {
    proxy_pass http://backend;
  }
}

您可以在此配置中执行其他操作,如提供(统一)身份验证检查、隐藏.../admin/...路由以及将其他服务集成到API中。如果你有很多独立的尼克斯,那么所有这一切都很难做到。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70140182

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档