1 votos

¿empezar a nginx upstream server no se puede resolver y todavía proxy_pass reglas de reescritura de URI/URI?

Esta la configuración de nginx me funciona:

location /foo/ {
  proxy_pass http://a.bar.mesos/;
}

Tenga en cuenta que tanto el location selector y el proxy_pass valor de Uri. Así que ya sabéis, esto afecta a cómo el URL es volver a escribir para el servidor ascendente. Como un ejemplo, http://.../foo/bar obtiene reescrito http://a.bar.mesos/bar. Si el proxy_pass valor http://a.bar.mesos sin la barra diagonal, a continuación, la dirección URL sería reescrito como http://a.bar.mesos/foo/bar que es correcto para mí.

Como también sabemos, si a.bar.mesos no se puede resolver en nginx hora de inicio, a continuación, nginx no se iniciará. Una forma de evitar esto es mencionado en otras preguntas en este sitio y que es el uso de un resolver directiva y una variable así:

location /foo/ {
  resolver 127.0.0.1;
  set $a_bar_mesos a.bar.mesos;
  proxy_pass http://$a_bar_mesos/;
}

De hecho, esto resuelve el problema de nginx no empezar con una irresoluble nombre de host, pero también hace que nginx deja de reconocer que el proxy_pass valor tiene una URI y así la reescritura de URL se convierte incorrecto para mí. Es decir, usar la reescritura de las reglas asociadas con un proxy_pass valor de http://a.bar.mesos en lugar de http://a.bar.mesos/.

Mi pregunta es, ¿alguien sabe cómo empezar a nginx con irresoluble nombres de host y obtener la URI/URI de reescritura de direcciones URL de las reglas?

Para que usted sepa mi caso, yo uso Mesos para lanzar programas en un clúster de máquinas. Los programas tienen nombres bien conocidos como a.bar. Yo uso mesos-dns , a continuación, asociar el nombre de programa a.bar con el hostname a.bar.mesos y la dirección IP de la máquina que Mesos asignado. Cuando el programa no se está ejecutando, mesos-dns elimina el nombre a.bar.mesos de su registro. Puedo usar nginx para reenviar las peticiones HTTP al programa a través de la configuración anterior. Cuando estoy reiniciando el servidor de hosting nginx no hay ninguna garantía de que todos los programas que se envían a estará funcionando.

0voto

HugoFS Puntos 313

Puede aplicar la regla de reescritura URI/URI mediante el uso de un rewrite ... break dentro de la misma ubicación, en lugar de utilizar el proxy_pass para hacer para usted:

location /foo/ {
    resolver 127.0.0.1;
    set $a_bar_mesos a.bar.mesos;

    rewrite ^/foo(.*)$ $1 break;
    proxy_pass http://$a_bar_mesos;
}

Consulte este documento para más detalles.

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: