ELK套件里的Kibana社区版本是没有身份认证功能的。网上很多办法都是通过Nginx的auth_basic加一层身份认证。但是经过通读全网一堆文章之后发现
这些文章又特么的全是坑!
照着这些文章干完之后,Nginx大概率报502错误,原因是现在的httpd组件默认不能新建网络连接,只能被动接收连接请求。
本文就来说一下,到底该如何让Nginx代理Kibana
关于如何快速安装ELK套件,请参见
【逗老师带你学IT】最简单的Elasticsearch+Logstash收集syslog避坑指南
一、安装Nginx和httpd-tools
yum install epel-release
yum update
yum install -y nginx
yum install httpd-tools
二、配置Nginx和Kibana
1、添加秘钥文件
htpasswd -c -b /etc/nginx/passwd/kibana.passwd admin pass******word
保存的秘钥文件路径自己随便设置
2、修改Nginx配置
修改/etc/nginx/nginx.conf,引入./conf.d下面的配置文件
cat /etc/nginx/nginx.conf
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
include /etc/nginx/conf.d/*.conf;
default_type application/octet-stream;
}
新建一个配置文件,/etc/nginx/conf.d/kibana.conf ,配置监听80,转到5601,同时添加认证。
cat /etc/nginx/conf.d/kibana.conf
upstream kibana_server {
server 127.0.0.1:5601 weight=1 max_fails=3 fail_timeout=60;
}
server {
listen 80;
auth_basic "Kibana Auth";
auth_basic_user_file /usr/local/nginx/passwd/kibana.passwd;
location / {
proxy_pass http://localhost:5601;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}
3、拒绝5601端口直接入站
我们既然想通过Nginx来做认证,那么就要封死原来5601端口直接访问的口子。
有两个办法可以封住
方法一:
使用iptables拒绝TCP 5601端口入站
iptables -I INPUT 1 -p tcp --dport 5601 -j ACCEPT
方法二:
修改Kibana的配置文件
配置server.host字段为localhost,使其仅监听127.0.0.1:5601
cat /etc/kibana/kibana.yml
server.port: 5601
server.host: "localhost"
三、配置Kibana允许HTTP重定向
完成上面配置之后,你开开心心的尝试访问Kibana。发现身份认证正常,但是赫然出现一个502 Bad Gateway报错。
惊不惊喜,意不意外?
但是这时候在服务器上直接curl -i http://localhost:5601端口是没问题的,后端服务正常,那么Nginx为什么会报502错误呢?
参考Elastic社区案例,httpd组件默认不能新建网络连接,只能被动接收连接请求。
Nginx Kibana: Bad gateway 502
使用以下命令允许httpd新建网络连接。
setsebool httpd_can_network_connect on -P
吐槽一下,网上的大哥们,你们写完文章都不自己跑一下试试么?