首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用“允许”指令将对nginx服务器位置的访问限制在特定的Docker容器中

使用“允许”指令将对nginx服务器位置的访问限制在特定的Docker容器中
EN

Stack Overflow用户
提问于 2017-07-27 18:13:17
回答 3查看 7.8K关注 0票数 8

编辑:塔伦的回答完全符合我的要求。尤金的回答也是一个很好的解决办法。我最终接受了Tarun的答案是正确的,但使用Eugen的。如果您有类似的问题,并且担心其他容器访问nginx状态服务器,请使用Tarun的答案。如果你想要坚持码头的正常主机名计划,使用尤根的。

+++原始问题+++

我有一个应用程序,我构建与对接-撰写。我正在尝试通过DataDog集成监控。我正在使用DataDog的代理容器,到目前为止,一切都正常。我正在尝试通过适应本教程来启动和运行nginx监控。

我的应用程序是在如下所示的坞-撰写文件中定义的:

代码语言:javascript
复制
version: '2'
services:
  flask:
    restart: always
    image: me/flask-app
    command: /home/app/flask/start_app.sh
    expose:
      - "8080"

  nginx:
    restart: always
    build: ./nginx
    command: /runtime/start_nginx.sh
    ports:
      - "80:80"
      - "443:443"
    expose:
      - "81"
    volumes:
      - app-static:/app-static:ro
    links:
      - flask:flask

  datadog-agent:
    image: me/datadog-agent
    env_file: ./datadog-agent/dev.env
    links:
        - flask
        - nginx
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - /proc/mounts:/host/proc/mounts:ro
      - /sys/fs/cgroup:/host/sys/fs/cgroup:ro

根据本教程,我向nginx添加了一个服务器块,如下所示:

代码语言:javascript
复制
server {
  listen 81;

  location /nginx_status {
    stub_status on;
    access_log off;
    allow 127.0.0.1;
    deny all;
  }
}

使用此配置,我可以从nginx容器中检查nginx状态。到现在为止还好。现在,我想更改位置块中的“允许”指令,以便只允许访问datadog服务。但是,我不知道数据代理的IP。在配置对Flask uwsgi服务器的访问时,我能够使用如下指令:

代码语言:javascript
复制
location / {
    uwsgi_pass: flask:8080;
}

但是,这似乎不适用于允许指令;如果我尝试:

代码语言:javascript
复制
location /nginx_status {
    ...
    allow datadog-agent;
    ...
}

我得到以下错误:

代码语言:javascript
复制
nginx: [emerg] invalid parameter "datadog-agent" in /etc/nginx/sites-enabled/nginx-status:8

如何向监视容器安全地公开nginx状态?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-07-27 19:38:08

因为我们是通过docker-compose运行服务的,我们的问题是我们不知道代理的IP。因此,简单的解决方案是在启动之前了解IP。这意味着给我们的代理分配一个特定的IP。

下面是一个更新的docker-compose来实现这一点

代码语言:javascript
复制
version: '2'
services:
  flask:
    restart: always
    image: me/flask-app
    command: /home/app/flask/start_app.sh
    expose:
      - "8080"

  nginx:
    restart: always
    build: ./nginx
    command: /runtime/start_nginx.sh
    ports:
      - "80:80"
      - "443:443"
    expose:
      - "81"
    volumes:
      - app-static:/app-static:ro
    links:
      - flask:flask
    networks:
      agent:
        ipv4_address: 172.25.0.101
      default:

  datadog-agent:
    image: me/datadog-agent
    env_file: ./datadog-agent/dev.env
    links:
        - flask
        - nginx
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - /proc/mounts:/host/proc/mounts:ro
      - /sys/fs/cgroup:/host/sys/fs/cgroup:ro
    networks:
      agent:
        ipv4_address: 172.25.0.100
networks:
  agent:
    driver: bridge
    ipam:
      config:
      - subnet: 172.25.0.0/24

现在你可以做两件事

代码语言:javascript
复制
server {
  listen 172.25.0.101:81;

  location /nginx_status {
    stub_status on;
    access_log off;
    allow 127.0.0.1;
    allow 172.25.0.100;
    deny all;
  }
}

您只能在172.25.0.101上侦听,因为它只能访问在代理网络上运行的容器。此外,还可以添加allow 172.25.0.100,以便只允许代理容器访问该容器。

票数 6
EN

Stack Overflow用户

发布于 2017-07-27 19:20:09

)不同的想法:)

在端口10080 上绑定一个nginx (vhost),另外还绑定-该服务器确实提供了状态位置和所需的内容。

80/443上的服务器也在那里,只有该服务器被绑定/暴露于主机(暴露于外部世界)。

由于datadog是您的坞-网络/服务网络的一部分,它仍然可以访问内部网络中的10080,但没有其他来自外部网络的访问。

防弹,容易-没有附加条件。

票数 10
EN

Stack Overflow用户

发布于 2020-04-17 17:27:04

有两种(更容易)的方法来解决这个问题。

第一个是docker-compose,但由于我已经运行了两年,不使用对接-撰写,我去了第二条路。

第二种方法是带有一系列is的Allow指令。

例:

代码语言:javascript
复制
    location /stub_status {
        stub_status;

        allow 172.18.0.0/16;   # This is my local docker IP range
        allow 192.168.0.0/16;  $ This is my production server IP range
        deny all;              # deny all other hosts   
 }

我不是安全专家,但大多数情况下,192.168.* IP范围是针对本地网络的,但不确定172.18.*的范围。

要了解更多关于IP范围和CIDR内容的信息,请参阅下面的链接module.html

https://www.ripe.net/about-us/press-centre/understanding-ip-addressing

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

https://stackoverflow.com/questions/45358188

复制
相关文章

相似问题

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