Nginx: come impostare l'intestazione host sul server scelto (bilanciamento del carico)


10

Ho un sito che funziona come bilanciamento del carico. Sito A.

Ho altri siti che possono avere solo un dominio. Quindi, se reindirizzo a loro, dice che il nome host non è stato trovato.

Quindi, se imposto manualmente l'intestazione su qualcosa, viene visualizzato solo quel sito.

Come posso impostare proxy_set_header Host xxxxl'indirizzo del server scelto. In questo modo ogni richiesta di reinstradamento avrà un'intestazione host diversa e appropriata.

Non sarà un problema se i miei altri 2 siti potrebbero funzionare in base all'URL e non all'intestazione host.

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è in qualche modo 127.0.0.1 perché ??
Muhammad Umer,

Voglio che l'header dell'host sia www.asd.com quando www.asd.com:80viene scelto il server
Muhammad Umer,

o se c'è un modo di scrivere if(server1) than host = a; ,if(server2) than host = b;
Muhammad Umer,

1
Il fatto è che l'intestazione host appropriata dovrebbe essere, a mio avviso, qualunque cosa tu ottenga dal client. Se il client richiede www.asd.com, questo dovrebbe essere l'intestazione dell'host. Ciò contribuirà a generare correttamente gli URL assoluti nel back-end quando necessario, impostare i domini adeguati per i cookie, ecc. Qualunque cosa tu stia cercando di fare, probabilmente lo stai guardando nel modo sbagliato.
Florin Asăvoaie,

sia il client che il server centrale sono io.
Muhammad Umer,

Risposte:


6

Devi impostare l'intestazione sulla variabile host in entrata, come documentato qui :

proxy_set_header Host $host;

This variable is equal to line Host in *the header of request* or namesignifica qualunque sia il client / browser, quello che viene scelto.
Muhammad Umer,

Questo è quello che vorresti fare, giusto? Il client richiede una risorsa / host virtuale dal proprio proxy ed è necessario servire un host virtuale. L'host virtuale da servire è scelto dal cliente / mutuatario.
Jeff Wong,

nessun host virtuale viene scelto casualmente dal server
Muhammad Umer

1
Qualcosa come questo? Crea due livelli di proxy e imposta l'host codificato sull'endpoint sul secondo livello serverfault.com/a/622782/287634
Jeff Wong

darò un'occhiata, ma penso che lo abbia già visto da quando ho votato per alcune cose lì
Muhammad Umer

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.