我正在尝试使用基本身份验证关闭端口(用于 prometheus 的推送网关),因此不是 nginx 方面的专家,所以有人可以给我建议我哪里错了吗?
我有 9091 端口,在身份验证之前应该从外部关闭该端口。该端口正在被 pushgateway 使用
我当前的 nginx 配置:
events { }
http {
upstream prometheus {
server 127.0.0.1:9090;
keepalive 64;
}
upstream pushgateway {
server 127.0.0.1:9091;
keepalive 64;
}
server {
root /var/www/example;
listen 0.0.0.0:80;
server_name __;
location / {
auth_basic "Prometheus server authentication2";
auth_basic_user_file /etc/nginx/.htpasswd;
proxy_pass http://prometheus;
}
}
server {
root /var/www/example;
listen 0.0.0.0:3001;
server_name __;
location / {
auth_basic "Pushgateway server authentication";
auth_basic_user_file /etc/nginx/.htpasswd;
proxy_pass http://pushgateway;
}
}
}
因此,基本身份验证对于 :3001 来说工作正常,但 9091 仍然处于打开状态。我尝试用以下方式进行更改:
server {
root /var/www/example;
listen 0.0.0.0:3001;
listen 0.0.0.0:9091;
server_name __;
location / {
auth_basic "Pushgateway server authentication";
auth_basic_user_file /etc/nginx/.htpasswd;
proxy_pass http://pushgateway;
}
}
运行正常,但是... pushgateway 无法启动,因为它尝试监听 :9091 并抛出“bind:address 已在使用中”。我该如何避免这种情况并在 nginx 前面隐藏 pushgateway?
Pushgatewa 的配置:
ExecStart=/usr/local/bin/pushgateway --web.listen-address=":9091" --web.telemetry-path="/metrics" --persistence.file="/tmp/metric.store" --persistence.interval=5m --log.level="info" --log.format="logger:stdout?json=true"
答案1
您当前的 nginx 配置适合此目的。
您需要更改 Pushgateway 配置,以便它监听127.0.0.1
而不是0.0.0.0
。
如果找不到,则需要添加一条防火墙规则,阻止从 WAN 侧到该端口的流量。