Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

135
Vistas
Edite la variable NGINX utilizada en la ubicación con el valor de la solicitud

Quiero alternar la redirección de URL de una ubicación según el valor del encabezado. El objetivo final es alternar la reescritura de URL según el valor de una cookie.

Para eso, establecí la siguiente configuración.

 server{ ... set $toggle "off"; location / { if ( $toggle = "on"){ return 301 https://stackoverflow.com; } } }

Necesito cambiar el valor de la variable de alternancia antes de que Nginx evalúe el código en la ubicación. Establecí la siguiente función de inicio:

 static ngx_int_t ngx_http_toggle_init(ngx_conf_t *cf){ ngx_http_handler_pt *h; ngx_http_core_main_conf_t *cmcf; cmcf = ngx_http_conf_get_module_main_conf(cf, ngx_http_core_module); h = ngx_array_push(&cmcf->phases[NGX_HTTP_SERVER_REWRITE_PHASE].handlers); if (h == NULL) { return NGX_ERROR; } *h = ngx_http_toggle_handler; return NGX_OK; }

Y el siguiente controlador:

 static ngx_int_t ngx_http_toggle_handler(ngx_http_request_t *r){ ngx_int_t response; response = ngx_http_toggle(r); if(response != NGX_OK){ ngx_log_error(NGX_LOG_ERR, r->connection->log, 0, "Error with toggle"); return NGX_ERROR; } ngx_log_error(NGX_LOG_ERR, r->connection->log, 0, "Handler is ok"); return NGX_OK; }

El siguiente código se ejecuta para establecer el valor de la variable:

 ngx_http_variable_value_t *var = ngx_pcalloc(r->pool, sizeof(ngx_http_variable_value_t)); var = ngx_http_get_indexed_variable(r, index); if( #condition ){ ngx_log_error(NGX_LOG_ERR, r->connection->log, 0, "Redirected for: %s", var_name.data); var->len = 2; var->data = (unsigned char *)"on"; }else{ ngx_log_error(NGX_LOG_ERR, r->connection->log, 0, "Not redirected for: %s", var_name.data); var->len = 3; var->data = (unsigned char *)"off"; }

Los registros devuelven buenos valores y "ok". Pero NGINX nunca devuelve ninguna respuesta.

estado pendiente en chrome

¿Me perdí una parte sobre los controladores NGX_HTTP_SERVER_REWRITE_PHASE? ¿Tiene una mejor idea de cómo actualizar las variables con el valor de las solicitudes?

Gracias por sus respuestas.

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

En ngx_int_t ngx_http_toggle_handler intente devolver NGX_DECLINED (no NGX_OK), me ayudó a obtener una respuesta.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda