Il bilanciamento del carico in Nginx con il reindirizzamento piuttosto che il proxy

Voglio usare Nginx in un po 'di modo non convenzionale. Voglio caricare l'equilibrio tra alcuni server, piuttosto che il contenuto proxy per quei server che voglio reindirizzarli.

Cioè, se una richiesta entra nel mio server Nginx, dovrebbe redirect 302 ad un altro server selezionando casualmente uno di un block a monte o equivalente. Non ho nemless bisogno delle altre caratteristiche del block a monte, come ad esempio la ponderazione (ma non sarebbe male che li avesse disponibili se ansible).

Per ora, ho la seguente configuration, che fa quello che mi serve, ma è un po 'brutto:

upstream boxes { server 127.0.0.1:46011; server 127.0.0.1:46012; } server { listen 46011; return 302 http://box11.example.com$request_uri; } server { listen 46012; return 302 http://box12.example.com$request_uri; } server { listen 80; server_name example.com; location / { proxy_pass http://boxes; } } 

C'è un modo più semplice per gestire questa situazione senza ricorrere a proxying a me stesso?

  • Utilizzo di Apache come server HTTPS proxy di inversione davanti al server Desktop Gateway remoto
  • Quale versione di calamari devo scegliere?
  • Gotchas per le impostazioni di proxy inversa
  • Utilizzando ssh e cavatappi / proxychains che fanno un proxy HTTP
  • Il backend di HAProxy continua a iniziare e fermarsi
  • Come si ottiene le istanze di AWS VPC EC2 per essere in grado di visualizzare le API AWS?
  • Come posso scoprire quale server proxy viene utilizzato in Ubuntu?
  • Perché viene visualizzato un errore "Invalid command 'ProxyPass'" quando inizio il mio server Apache 2.2?
  • One Solution collect form web for “Il bilanciamento del carico in Nginx con il reindirizzamento piuttosto che il proxy”

    È ansible get una variabile random dal module misc:

     set_random $loc_rnd 1 10; 

    Quindi scegliere la posizione interna in base a essa, con ponderazione semplice:

     map $loc_rnd $loc_redirect { 1 @server1; 2 @server1; ... 8 @server2; 9 @server2; 10 @server2; } location / { recursive_error_pages on; error_page 403 = $loc_redirect; return 403; } 

    reindirizza:

     location @server1 { internal; return 302 http://box11.example.com$request_uri; } location @server2 { internal; return 302 http://box11.example.com$request_uri; } 

    Altra variante: utilizza il return 302 $ some_variable; (e gli URL completi nella mappa) direttamente nella posizione "/".

    Suggerimenti per Linux e Windows Server, quali Ubuntu, Centos, Apache, Nginx, Debian e argomenti di rete.