¿Cómo hacer una declaración if / else con nginx conf?

9

¿Es posible hacer algo así 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;
}
usuario421936
fuente
Es posible que desee echar un vistazo al módulo de mapa .
gf_
2
Escribiste algo extraño y sin sentido. Intenta comenzar desde el principio, ¿qué problema quieres resolver
Alexey Ten

Respuestas:

9

El módulo de reescritura de Nginx sí tiene una ifdirectiva (consulte la documentación vinculada para ver ejemplos), pero no else. El equivalente para elsesería todo lo que no se modifica con unif .

Puede usar ifdentro de un server { }pero no al revés. Ni siquiera tendría la condición comparada en su si antes de una solicitud que ya necesita el servidor. Allí, solo puede servir contenido cuando el agente de usuario es (o no) wget.

También tenga en cuenta que no debe usarlo en el ifinterior, locationya que puede no funcionar como se desea (consulte If Is Evil ).

Esa Jokinen
fuente
3

En el formulario proporcionado, no funcionará: probar el Agente de usuario HTTP implica que la solicitud ya se recibió. Eso solo es posible si algún serverbloque ya estaba definido. ¿Realmente desea iniciar nuevos servidores dependiendo de la cadena de User-Agent de una solicitud que recibió en otro lugar?

Si solo desea servir contenido diferente, redirija a diferentes rutas, etc., dependiendo de las partes de la solicitud, como el User-Agent, eso es posible, por ejemplo, con http://nginx.org/en/docs/http/ngx_http_rewrite_module. html

Stefan Moch
fuente