
Actualmente estamos atrapados en una situación en la que utilizamos nginx
como nuestro servidor frontend principal un conjunto de servicios respaldados por un descubrimiento de servicios dinámico basado en DNS con Mesos-DNS.
Nuestra configuración de nginx se parece un poco a esto;
http {
resolver 10.10.1.1 valid=1s; // some internal DNS server
}
server {
set $core_api core-api-service.marathon.mesos; // some internal DNS
location /api {
proxy_pass $core_api:8080; // resolve core_api DNS dynamically to one of the IP's of the slave the process is running + listening on
}
}
Ahora el problema es que esta configuración funciona correctamente, pero una de cada 4 o 5 solicitudes siempre da como resultado que Nginx devuelva un 404, lo cual no tiene sentido porque ninguno de los servicios que se ejecutan dentro del clúster se ha movido a un esclavo diferente.
Ahora, el solucionador valid=1s
es bastante agresivo, por lo que lo ampliamos a períodos más largos, pensando que tal vez eso era consultar el DNS con demasiada frecuencia. Pero cualquier valor allí causa los mismos problemas. Quitar el valid=xx
tampoco ayuda.
¿Que está pasando aqui? ¿Cómo mitigamos esto?
Gracias.
EDITAR (configuración completa)
server {
listen 80;
server_name .myapp.com;
return 301 https://www.myappname.com$request_uri;
}
server {
listen 80;
gzip on;
gzip_min_length 1100;
gzip_buffers 4 32k;
gzip_types text/plain application/x-javascript text/xml text/css;
gzip_vary on;
root /usr/share/nginx/www;
index index.html index.htm;
include /etc/nginx/mime.types;
server_name api.myappname.com;
error_page 404 /static/404.html;
error_page 403 /static/404.html;
error_page 503 /static/503.html;
error_page 502 /static/502.html;
set $core_api http://core_api.marathon.mesos;
location /api {
if ($http_x_forwarded_proto != 'https') {
rewrite ^ https://$host$request_uri? permanent;
}
limit_req zone=one burst=35;
limit_req_status 503;
proxy_pass $core_api:8080;
proxy_set_header X-Real-IP $remote_addr;
}
}