Nginx : 선택한 서버에 호스트 헤더를 설정하는 방법 (로드 밸런싱)


10

로드 밸런서로 작동하는 사이트가 있습니다. 사이트 A.

하나의 도메인 만 가질 수있는 다른 사이트가 있습니다. 따라서 방금 리디렉션하면 호스트 이름을 찾을 수 없습니다.

따라서 수동으로 헤더를 설정하면 해당 사이트 만 표시됩니다.

proxy_set_header Host xxxx선택한 서버 주소로 설정하는 방법 이렇게하면 각 재 라우팅 요청에 서로 다른 호스트 헤더가 달라집니다.

다른 두 사이트가 호스트 헤더가 아닌 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;
        }
    }
}

$server_addr어떻게 든 127.0.0.1입니까?
Muhammad Umer

서버 www.asd.com:80를 선택할 때 호스트 헤더가 www.asd.com이되기를 원합니다
Muhammad Umer

또는 작성하는 방법이 있는지 if(server1) than host = a; ,if(server2) than host = b;
무하마드 Umer

1
내 생각에 적절한 호스트 헤더는 클라이언트로부터 얻는 것이 무엇이든해야합니다. 클라이언트가 www.asd.com을 요청하면 호스트 헤더가됩니다. 이렇게하면 필요할 때 백엔드에서 절대 URL을 올바르게 생성하고 쿠키 등을위한 적절한 도메인을 설정하는 데 도움이됩니다.
Florin Asăvoaie

클라이언트와 중간 서버 모두 나입니다.
Muhammad Umer

답변:


6

여기에 설명 된대로 헤더를 수신 호스트 변수로 설정해야합니다 .

proxy_set_header Host $host;

This variable is equal to line Host in *the header of request* or name클라이언트 / 브라우저가 말하는 것이 무엇이든, 그것이 선택되는 것을 의미합니다.
Muhammad Umer

이것이 당신이하고 싶은 것입니다, 맞습니까? 클라이언트가 프록시에서 리소스 / 가상 호스트를 요청하므로 가상 호스트를 제공해야합니다. 제공 할 가상 호스트는 클라이언트 / 보더가 선택합니다.
Jeff Wong

서버가 가상 호스트를 임의로 선택하지 않음
Muhammad Umer

1
이 같은? 두 가지 수준의 프록시를 만들고 두 번째 계층 server.ault
Jeff Wong

엉뚱한 데, 내가 거기에 물건을 올려 놓은 이후로 이미 본 것 같아요
Muhammad Umer

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.