Come fare se l'istruzione / else con nginx conf?


9

è possibile fare qualcosa del genere con nginx?

if ( $http_user_agent = "wget" ){
   server {
      listen      11.11.11.11:1111;
      root        /website1/;
      server_name example.com www.example.com;
else 

   server {
      listen      22.22.22.22:22222;
      root        /website2/;
      server_name example2.com www.example2.com;
}

Potresti dare un'occhiata al modulo della mappa .
gf_

2
Hai scritto qualcosa di strano e abbastanza insignificante. Prova a iniziare dall'inizio, quale problema vuoi risolvere
Alexey Ten,

Risposte:


9

Il modulo di riscrittura Nginx ha ifdirettiva (vedere la documentazione collegata per esempi), ma non else. L'equivalente per elsesarebbe tutto ciò che non viene modificato con unif .

È possibile utilizzare ifall'interno di un server { }ma non viceversa. Non avresti nemmeno la condizione rispetto al tuo se prima di una richiesta che già necessita del server. Lì, puoi pubblicare contenuti solo quando l'agente utente è (o non è) wget.

Nota anche che non dovresti usare l' ifinterno locationperché potrebbe non funzionare come desiderato (vedi If Is Evil ).


3

Nel modulo indicato non funzionerà: testare HTTP User-Agent implica che la richiesta è già stata ricevuta. Ciò è possibile solo se serverera già stato definito un blocco. Vuoi davvero avviare nuovi server a seconda della stringa User-Agent di una richiesta che hai ricevuto altrove?

Se vuoi solo servire contenuti diversi, reindirizzare a percorsi diversi, ecc. A seconda di parti della richiesta come l'Utente-Agente, questo è possibile, ad esempio con http://nginx.org/en/docs/http/ngx_http_rewrite_module. html

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.