当端口已被使用时,Nginx 反向代理?

当端口已被使用时,Nginx 反向代理?

我正在尝试使用基本身份验证关闭端口(用于 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 侧到该端口的流量。

相关内容