如何使用docker compose配置nginx?

如何使用docker compose配置nginx?,docker,nginx,docker-compose,nginx-config,Docker,Nginx,Docker Compose,Nginx Config,我有一个包含3个容器的简单应用程序,它们都运行在同一台AWS EC2服务器上。我想将Nginx配置为反向代理,但是我对Nginx非常陌生,不知道如何正确设置conf文件 这是我的docker compose: version: "3" services: nginx: container_name: nginx image: nginx:latest ports: - "80:80" volumes: - ./conf/nginx.c

我有一个包含3个容器的简单应用程序,它们都运行在同一台AWS EC2服务器上。我想将Nginx配置为反向代理,但是我对Nginx非常陌生,不知道如何正确设置conf文件

这是我的docker compose:

version: "3"
services:

  nginx:
    container_name: nginx
    image: nginx:latest
    ports:
      - "80:80"
    volumes:
      - ./conf/nginx.conf:/etc/nginx/nginx.conf

  frontend:
    container_name: frontend
    image: myfrontend:image
    ports:
      - "3000:3000"

  backend:
    container_name: backend
    depends_on:
      - db
    environment:
      DB_HOST: db
    image: mybackend:image
    ports:
      - "8400:8400"

  db:
    container_name: mongodb
    environment:
      MONGO_INITDB_DATABASE: myDB
    image: mongo:latest
    ports:
      - "27017:27017"
    volumes:
      - ./initialization/db:/docker-entrypoint-initdb.d
      - db-volume:/data/db

volumes:
  db-volume:
后端从数据库获取数据并发送给前端

这是我的nginx.conf文件:

events {
  worker_connections  4096;  
}

http {
 server {
   listen 80;
   listen [::]:80;

   server_name myDomainName.com;

   location / {
       proxy_pass http://frontend:3000/;
       proxy_set_header Host $host;
   }

   location / {
      proxy_pass http://backend:8400/;
      proxy_pass_request_headers on;
    }

 }
}

如何设置nginx以服务于前端和后端容器?

您可以使用以下nginx配置来解决您的问题

events {
  worker_connections  4096;  
}

http {

 server {
    listen       80 default_server;
    server_name  frontend.*;

    location / {
        resolver 127.0.0.11 ipv6=off;

        set $target http://frontend:3000;

        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_pass $target;
    }
  }

  server {
    listen       80;
    server_name  backend.*;

    location / {
        resolver 127.0.0.11 ipv6=off;

        set $target http://backend:8400;

        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_pass $target;
    }
  }
}
Nginx将在不同的域名上提供后端和前端服务,通过下面的etc主机,您将能够访问定义域名上的服务

127.0.0.1 backend.me frontend.me

我拥有一个域名,希望两个容器在一起工作时都使用它。这在nginx中是不可能的吗?您可以更详细地描述您到底想做什么?如果您有两个服务,通常需要有DNS记录。除非您计划在同一DNS记录上以不同的位置(即mydomain.com/app1和mydomain.com/app2)托管这两个应用程序,否则只有一个应用程序运行一个用户界面(前端)和一个后端从数据库获取数据。现在我想了想,我不确定这个场景是否需要反向代理。你肯定需要前端的反向代理,但是如果后端和db应用程序不应该被最终用户访问,你应该从docker compose中删除端口部分,不要将它们包括在nginx配置中