如何通过Docker配置Nginx转发流量至本地Elasticsearch与Kibana
用Docker Compose配置Nginx反向代理方案
核心思路
通过Docker Compose部署Nginx容器,挂载自定义代理配置文件,实现端口映射与请求转发:将外部https://<my_public_ip>:9220转发至本地ES服务,http://<my_public_ip>:5611转发至本地Kibana服务。
步骤1:准备Nginx配置文件
创建目录结构:
mkdir -p nginx/conf.d nginx/certs
在nginx/conf.d/proxy.conf中写入代理规则:
# 转发Elasticsearch的HTTPS请求 server { listen 9220 ssl; server_name _; # 配置SSL证书路径(对应容器内挂载路径) ssl_certificate /etc/nginx/certs/server.crt; ssl_certificate_key /etc/nginx/certs/server.key; location / { proxy_pass https://host.docker.internal:9200; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 若ES用自签证书,关闭SSL验证;正式环境建议配置可信CA proxy_ssl_verify off; } } # 转发Kibana的HTTP请求 server { listen 5611; server_name _; location / { proxy_pass http://host.docker.internal:5601; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } }
步骤2:生成自签SSL证书(测试用)
若没有正式SSL证书,可在nginx/certs目录下生成自签证书:
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout ./nginx/certs/server.key -out ./nginx/certs/server.crt
按提示填写信息即可,测试场景下可随意输入。
步骤3:编写Docker Compose文件
创建docker-compose.yml:
version: '3.8' services: nginx-proxy: image: nginx:alpine ports: - "9220:9220" # 外部HTTPS端口映射 - "5611:5611" # 外部HTTP端口映射 volumes: - ./nginx/conf.d:/etc/nginx/conf.d # 挂载代理配置 - ./nginx/certs:/etc/nginx/certs # 挂载SSL证书 extra_hosts: - "host.docker.internal:host-gateway" # 让容器访问主机本地服务 restart: unless-stopped
步骤4:启动容器
进入docker-compose.yml所在目录,执行:
docker-compose up -d
验证与注意事项
- 测试访问:
https://<你的公网IP>:9220应返回ES响应,http://<你的公网IP>:5611应打开Kibana界面 - 若ES/Kibana本身是Docker部署的,可将Nginx加入同一自定义网络,直接用服务名(如
elasticsearch:9200)代替host.docker.internal:9200,稳定性更高 - 确保服务器防火墙开放9220、5611端口,否则外部无法访问
内容的提问来源于stack exchange,提问作者Thanh Pham
相关产品推荐
相关产品推荐

