首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NGINX容器作为其他容器的代理

NGINX容器作为其他容器的代理
EN

Stack Overflow用户
提问于 2022-02-01 22:39:53
回答 1查看 302关注 0票数 1

我试图在我的UBUNTU服务器上运行容器,这些容器是:

  1. DNS服务器与bind9.
  2. NTP服务器与
  3. 进行反向代理=>反向代理和NTP

我把这些容器放在同一个yaml文件中:

代码语言:javascript
复制
version: '3'
services:
  reverse-proxy-engine:
    image: nginx
    container_name: reverse-proxy-engine
    volumes:
      - ~/core/reverse-proxy/:/usr/share/nginx/
    ports:
      - "80:80"
      - "443:443"
      - "53:53"
      - "123:123/udp"
    depends_on:
      - "DNS-SRV"
      - "ntp"
  DNS-SRV:
    container_name: DNS-SRV
    image: ubuntu/bind9
    user: root
    environment:
      - TZ=UTC
    volumes:
      - ~/core/bind9/:/etc/bind/
  ntp:
    image: cturra/ntp
    container_name: ntp
    restart: always
    read_only: true
    tmpfs:
      - /etc/chrony:rw,mode=1750
      - /run/chrony:rw,mode=1750
      - /var/lib/chrony:rw,mode=1750
    environment:
      - NTP_SERVERS=time.cloudflare.com
      - LOG_LEVEL=0

运行此yaml文件后,将创建容器,我看到正确映射的端口:

代码语言:javascript
复制
admin@main-srv:~/core/yamls$ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                            PORTS                                                                                NAMES
4720bae2a44c        nginx               "/docker-entrypoint.…"   5 seconds ago       Up 4 seconds                      0.0.0.0:53->53/tcp, 0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp, 0.0.0.0:123->123/udp   reverse-proxy-engine
1681814f651e        cturra/ntp          "/bin/sh /opt/startu…"   6 seconds ago       Up 5 seconds (health: starting)   123/udp                                                                              ntp
dde2f9094b45        ubuntu/bind9        "docker-entrypoint.sh"   6 seconds ago       Up 5 seconds                      53/tcp                                                                               DNS-SRV

我可以使用带有的端口80访问浏览器上的nginx网页,但我无法使用相同的IP解析同一网络上的DNS或NTP,但在容器网络中,它是工作的。

所以我认为NGINX端口是向UBUNTU服务器公开的,但是DNS和NTP端口没有公开给NGINX,对吗?我遗漏了什么?

下面是我的NginX配置文件:

代码语言:javascript
复制
events {
  worker_connections 1024;
}

stream {

    upstream dns_servers {
        server DNS-SRV:53;
    }

    upstream ntp_server {
      server ntp:123;
    }

    server {
        listen 53 udp;
        listen 53; #tcp
        proxy_pass dns_servers;
        error_log  /var/log/nginx/dns.log info;
        proxy_responses 1;
        proxy_timeout   1s;
    }

    server {
      listen 123 udp;
      listen 123; #tcp

      proxy_pass ntp_server;
      error_log  /var/log/nginx/ntp.log info;
      proxy_responses 1;
      proxy_timeout   1s;
    }
}

到目前为止,我觉得这是合乎逻辑的,有什么想法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-02-06 13:30:30

我认为这是因为您没有为bind和ntp容器设置主机名,我使用下面的配置并使其正常工作

代码语言:javascript
复制
version: '3'
services:
  reverse-proxy-engine:
    image: nginx
    container_name: reverse-proxy-engine
    volumes:
      - ~/core/reverse-proxy/:/usr/share/nginx/
      - $PWD/nginx.conf:/etc/nginx/nginx.conf
    ports:
      - "80:80"
      - "443:443"
      - "53:53"
      - "123:123/udp"
    depends_on:
      - "DNS-SRV"
      - "ntp"
  DNS-SRV:
    container_name: DNS-SRV
    hostname: DNS-SRV
    image: ubuntu/bind9
    user: root
    environment:
      - TZ=UTC
    volumes:
      - ~/core/bind9/:/etc/bind/
  ntp:
    image: cturra/ntp
    container_name: ntp
    hostname: ntp
    restart: always
    read_only: true
    tmpfs:
      - /etc/chrony:rw,mode=1750
      - /run/chrony:rw,mode=1750
      - /var/lib/chrony:rw,mode=1750
    environment:
      - NTP_SERVERS=time.cloudflare.com
      - LOG_LEVEL=0

在上面的配置中,我为bind和ntp容器添加了主机名,还安装了nginx配置并替换了默认配置。

下面的nginx.conf配置

代码语言:javascript
复制
user  nginx;
worker_processes  auto;

error_log  /var/log/nginx/error.log notice;
pid        /var/run/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;

    include /etc/nginx/conf.d/*.conf;
}

stream {

    upstream dns_servers {
        server DNS-SRV:53;
    }

    upstream ntp_server {
      server ntp:123;
    }

    server {
        listen 53 udp;
        listen 53; #tcp
        proxy_pass dns_servers;
        error_log  /var/log/nginx/dns.log info;
        proxy_responses 1;
        proxy_timeout   1s;
    }

    server {
      listen 123 udp;
      listen 123; #tcp

      proxy_pass ntp_server;
      error_log  /var/log/nginx/ntp.log info;
      proxy_responses 1;
      proxy_timeout   1s;
    }
}

注意:确保使用80、443、53、123的绑定端口不被其他应用程序使用。

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

https://stackoverflow.com/questions/70948482

复制
相关文章

相似问题

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