Nginx:如何将主机头设置为所选服务器(负载平衡)

Nginx:如何将主机头设置为所选服务器(负载平衡)

我有一个用作负载平衡器的站点。站点 A。

我还有其他网站只能有一个域名。因此,如果我重定向到这些网站,系统会提示“找不到主机名”。

因此,如果我手动将标题设置为某个值,那么只会显示该站点。

我如何设置proxy_set_header Host xxxx所选的服务器地址。这样,每个重新路由请求都会有不同且合适的主机标头。

如果我的其他 2 个网站可以基于 url 而不是主机头工作,那就没有问题了。

worker_processes  1;

error_log  logs/error.log;
error_log  logs/error.log  notice;
error_log  logs/error.log  info;
error_log  logs/error.log  debug;

pid        logs/nginx.pid;


events {
    worker_connections  1024;
}


http {
    upstream myapp1 {
        #server localhost:3333;
        server www.asd.com:80;
    }

    server {
        listen 80;

        location / {
            proxy_set_header Host            $upstream_addr;  // should become somehow www.asd.com right now this code doesn't work
            proxy_set_header X-Forwarded-For $remote_addr;
            proxy_pass http://myapp1;
        }
    }
}

答案1

您需要将标头设置为传入的主机变量,如文档所述这里

proxy_set_header Host $host;

答案2

这个问题的答案解释了这种行为并提供了解决方法

本质上,在选择上游之前,标头就已经固定好了。如果您无法让所有上游都响应单个 Host: 标头,则必须在设置标头的同时固定上游。

相关内容