如何限制直接通过服务器IP访问Prometheus 仅允许指定域名访问
解决方案
你遇到的问题根源是Nginx没有配置默认兜底的服务块处理不匹配域名的请求,当你用IP访问时,Nginx会默认命中端口匹配的第一个服务块,也就是你配置的Prometheus反代块,所以可以正常访问。你只需要在现有Nginx配置基础上添加两个默认server块即可,不需要修改Prometheus配置,你的Prometheus已经配置为仅监听本地127.0.0.1端口,不会直接对公网暴露。
1. 添加80端口默认兜底块
在你现有的Nginx配置最前面添加如下配置,所有80端口非域名访问的请求直接返回403禁止访问:
server { listen 80 default_server; listen [::]:80 default_server; server_name _; return 403; }
2. 添加443端口默认兜底块
同样在配置最前面添加443端口的兜底配置,处理HTTPS IP访问的请求,直接返回Nginx特有的444状态码(直接断开连接,不返回任何内容):
server { listen 443 ssl default_server; listen [::]:443 ssl default_server; server_name _; # 复用现有证书即可,避免Nginx启动报错 ssl_certificate /etc/ssl/certs/ssl-cert-cf.pem; ssl_certificate_key /etc/ssl/private/ssl-key-cf.pem; return 444; }
3. 配置生效
修改完成后执行命令校验配置正确性,无误后重载Nginx即可:
nginx -t systemctl reload nginx
配置生效后,直接用IP访问会直接被拒绝,只有使用指定域名访问才能正常打开Prometheus页面。
内容的提问来源于stack exchange,提问作者Zhiskar
相关产品推荐
相关产品推荐

