Nginx кэширует DNS, ищет и игнорирует мои настройки распознавателя. - PullRequest
3 голосов
/ 07 июня 2019

Я использую Docker Swarm.Я поместил контейнер nginx перед моим API для целей кэширования.Так как каждый раз, когда я развертываю свой API, он создает новый внутренний IP-адрес, я использую имя моего сервиса tasks.api согласно документации Swarm.Ниже мой блок местоположения

proxy_cache_path /var/cache/nginx/ta_api levels=1:2 keys_zone=api_cache:10m max_size=10g
                  inactive=60m use_temp_path=off;

server {
    listen       80;
    server_name  localhost;

    location / {
      proxy_pass http://tasks.api:10010;
      proxy_http_version 1.1;
      proxy_set_header Upgrade $http_upgrade;
      proxy_set_header Connection 'upgrade';
      proxy_set_header Host $host;
      proxy_buffering on;
      proxy_cache api_cache;
      proxy_cache_bypass $http_upgrade;
      # Add header to see if response was cached
      add_header X-Cache-Status $upstream_cache_status;

      # Allow one cache-update request at a time sent to an origin server.
      proxy_cache_lock on;
      # Permit revalidation of stale cached responses.
      proxy_cache_revalidate on;

      # proxy_cache_valid 200 1d;
      # Delivering Cached Content When the Origin is Down
      proxy_cache_use_stale error timeout invalid_header updating
                            http_500 http_502 http_503 http_504;

      # Do all updates in background. With proxy_cache_use_stale, allows stale
      # cached responses to be served.
      proxy_cache_background_update on;
    }
}

Я также добавил resolver 127.0.0.11 ipv6=off valid=15s; к моему блоку http.Однако, когда я повторно внедряю свой API, и он получает новый API, nginx все еще пытается отправить на старый IP.

Я запускаю тег контейнера nginx nginx:1.15.12-alpine, когда я устанавливаю bind-tools на контейнер nginx. Я вижу, что я получаю новые IP-адреса, используя dig tasks.api

.потеря что попробовать дальше.Я могу жестко закодировать частные IP-адреса, но это не так, как в докере ...

1 Ответ

3 голосов
/ 07 июня 2019

NGINX будет выполнять поиск DNS только при запуске и постоянно кэшировать для фиксированных имен хостов .Чтобы включить поиск DNS во время выполнения, необходимо изменить фиксированное имя хоста на динамическую переменную.Поэтому в случае OP измените исходную строку proxy_pass на:

set $target_host tasks.api ;
proxy_pass http://$target_host:10010;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...