如何根据请求头选择上游

如何根据请求头选择上游

如果设置了特定的标头,我会尝试将请求发送到不同的服务器,
它会给出错误“http://”中的无效 URL 前缀
这是我的 nginx 配置文件

    upstream server1 {
        server localhost:5000; 
    }
    
    upstream server2 {
        server 172.31.15.137;
    }
    
    # the nginx server instance
    server {
        listen 80;
        listen [::]:80;
        server_name dev.i2e1.in;
        access_log /var/log/nginx/dev.i2e1.in.log;
    
        # pass the request to the node.js server with the correct headers
        # and much more can be added, see nginx config options
        location / {
        
        proxy_http_version 1.1;
            proxy_set_header   Upgrade $http_upgrade;
            proxy_set_header   Connection keep-alive;
            proxy_set_header   Host $host;
            proxy_cache_bypass $http_upgrade;
            proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header   X-Forwarded-Proto $scheme;   
        proxy_pass         http://$http_x_custom_header;
        }
    }

缺什么?

答案1

看来X-Custom-Header您发出的请求中没有设置 HTTP 标头。

proxy_pass未经任何验证就使用标头作为目标是非常不安全的。

我将使用它map来过滤有效端点并强制使用默认端点:

http级别中,添加以下内容map

map $http_x_custom_header $upstream {
    server1 server1;
    server2 server2;
    default server1;
}

然后使用:

proxy_pass http://$upstream;

相关内容