gpt4 book ai didi

nginx - 使用 "allow"指令限制对 nginx 服务器位置的访问到特定的 Docker 容器

转载 作者:行者123 更新时间:2023-12-01 09:15:45 25 4
gpt4 key购买 nike

编辑:Tarun 的回答完全符合我的要求。 Eugen的回答也是一个很好的解决方案。我最终接受了 Tarun 的答案是正确的,但使用了 Eugen 的答案。如果您有类似的问题并且担心其他容器访问 nginx 状态服务器,请使用 Tarun 的答案。如果您宁愿坚持使用 Docker 的正常主机名方案,请使用 Eugen 的。

+++ 原始问题+++

我有一个使用 docker-compose 构建的应用程序。我正在尝试通过 DataDog 集成监控。我正在使用 DataDog 的代理容器,到目前为止一切正常。我正在尝试通过调整 this tutorial 来启动和运行 nginx 监控.

我的应用程序在 docker-compose 文件中定义,如下所示:

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 添加了一个服务器 block ,如下所示:
server {
listen 81;

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

使用此配置,我可以从 nginx 容器中检查 nginx 状态。到现在为止还挺好。现在我想更改位置 block 中的“允许”指令以仅允许访问 datadog-agent 服务。但是,我不知道 datadog-agent 的 IP。在配置对 Flask uwsgi 服务器的访问时,我可以使用如下指令:
location / {
uwsgi_pass: flask:8080;
}

但这似乎不适用于允许指令;如果我尝试:
location /nginx_status {
...
allow datadog-agent;
...
}

我收到以下错误:
nginx: [emerg] invalid parameter "datadog-agent" in /etc/nginx/sites-enabled/nginx-status:8

如何安全地将 nginx 状态暴露给我的监控容器?

最佳答案

换个思路:)

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

80/443 上的服务器也在那里,并且只有一个绑定(bind)/暴露给主机(暴露给外部世界)。

由于 datadog 是你的 docker-network/service 网络的一部分,它仍然可以访问内部网络中的 10080,但不能访问外部网络中的其他人。

防弹,简单 - 没有附加条件。

关于nginx - 使用 "allow"指令限制对 nginx 服务器位置的访问到特定的 Docker 容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45358188/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com