
Wir stecken derzeit in einer Situation fest, in der wir als unseren Haupt-Frontend-Server eine Reihe von Diensten verwenden, nginx
die durch eine dynamische DNS-basierte Diensterkennung mit Mesos-DNS unterstützt werden.
Unsere Nginx-Konfiguration sieht ungefähr so aus;
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
}
}
Das Problem besteht nun darin, dass dieses Setup ordnungsgemäß funktioniert, aber eine von 4–5 Anfragen immer dazu führt, dass Nginx eine 404 zurückgibt, was keinen Sinn ergibt, da keiner der im Cluster ausgeführten Dienste auf einen anderen Slave verschoben wurde.
Da der Resolver valid=1s
ziemlich aggressiv ist, haben wir ihn auf längere Zeiträume ausgedehnt, weil wir dachten, dass er den DNS vielleicht zu oft abfragt. Aber jeder Wert dort verursacht die gleichen Probleme. Das Entfernen valid=xx
hilft auch nicht.
Was ist hier los? Wie können wir das eindämmen?
Danke.
BEARBEITEN (vollständige Konfiguration)
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;
}
}