【发布时间】:2022-01-11 03:46:42
【问题描述】:
我在 Ubuntu Server 的 Docker 上安装了 Elastic Stack(Logstash、Elasticsearch 和 Kibana)。 所有容器都在一个桥接模式下的 docker 网络中。我在 Kibana 配置文件中强制使用 SSL,所以只能使用 HTTPS 打开。在本地 DNS 中,我添加了一个条目 kibana.home.com(home.com 只是示例),指向服务器的 IP 地址。通过在网络浏览器中输入https://kibana.home.com:5601,Kibana 页面打开,一切正常。
当我想保护服务器时,问题就开始了。 我需要端口 5601 不能从外部访问,并且所有网络流量都需要通过反向代理。 我尝试使用 Nginx 来实现,但我之前从未使用过 Nginx。可能我做错了什么。我将 Nginx 安装添加到 docker-compose 文件中,并创建了以下 Nginx 配置文件:
server {
listen 443 ssl http2;
ssl_certificate /etc/ssl/certs/nginx/certificate.crt;
ssl_certificate_key /etc/ssl/certs/nginx/privateKey.key;
location / {
proxy_pass https://kibana:5601;
proxy_redirect off;
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_set_header X-Forwarded-Host $server_name;
}
}
Docker 编写文件:
version: '3.2'
services:
nginx:
build:
context: nginx/
ports:
- "80:80"
- "443:443"
networks:
- elk
elasticsearch:
build:
context: elasticsearch/
args:
ELK_VERSION: $ELK_VERSION
HOST_DNS: $HOST_DNS
volumes:
- type: bind
source: ./elasticsearch/config/elasticsearch.yml
target: /usr/share/elasticsearch/config/elasticsearch.yml
read_only: true
- type: volume
source: elasticsearch
target: /usr/share/elasticsearch/data
- type: bind
source: ./elasticsearch/templates/
target: /usr/share/elasticsearch/templates/
read_only: true
- type: volume
source: certs
target: /usr/share/elasticsearch/config/certs
ports:
- "9200:9200"
- "9300:9300"
environment:
ES_JAVA_OPTS: "-Xms4g -Xmx4g"
ELASTIC_PASSWORD: Examplepass1
discovery.type: single-node
networks:
- elk
logstash:
build:
context: logstash/
args:
ELK_VERSION: $ELK_VERSION
volumes:
- type: bind
source: ./logstash/config/logstash.yml
target: /usr/share/logstash/config/logstash.yml
read_only: true
- type: bind
source: ./logstash/config/pipelines.yml
target: /usr/share/logstash/config/pipelines.yml
read_only: true
- type: bind
source: ./logstash/pipeline
target: /usr/share/logstash/pipeline
read_only: true
- type: bind
source: ./logstash/templates
target: /usr/share/logstash/templates
- type: volume
source: certs
target: /usr/share/logstash/config/certs
- type: bind
source: ./logstash/mib
target: /usr/share/logstash/mib
ports:
- "5000:5000"
- "5044:5044"
- "9600:9600"
- "5514:5514"
environment:
LS_JAVA_OPTS: "-Xmx512m -Xms512m"
networks:
- elk
depends_on:
- elasticsearch
kibana:
build:
context: kibana/
args:
ELK_VERSION: $ELK_VERSION
volumes:
- type: bind
source: ./kibana/config/kibana.yml
target: /usr/share/kibana/config/kibana.yml
read_only: true
- type: bind
source: ./kibana/index-pattern/
target: /usr/share/kibana/index-pattern/
read_only: true
- type: volume
source: certs
target: /usr/share/kibana/config/certs
ports:
- "5601:5601"
networks:
- elk
depends_on:
- elasticsearch
networks:
elk:
driver: bridge
volumes:
elasticsearch:
certs:
不幸的是,当我尝试连接(使用 DNS 和 IP 地址)时,我收到 501 Bad Gateway 消息。你能解释一下我做错了什么吗?我想像这样配置所有内容:
【问题讨论】:
-
kibana 不需要开启 SSL,nginx 会做 SSL 终止。显示您的
docker-compose.yml文件。 -
@IvanShatsky 当然。我在主线程中添加了 docker-compose 文件内容(评论太长了)。
-
您的问题在 StackOverflow 中是题外话。如果您将其移至Unix & Linux 或Superuser,您将更有机会得到答复。
标签: docker elasticsearch nginx kibana