Останнім часом у моїй роботі виникла потреба в цьому аспекті: upstream повністю динамічний, визначається клієнтом, на початку є деякі помилки, і нарешті DNS-сервіс вказується через резолвер, конкретний процес виглядає так.
1. Починайте наступати на яму
Конфігурація nginx виглядає так:
Коли я надсилаю такий запит:
Було зафіксовано наступну помилку:
access.log: 127.0.0.1 - - [14/вересень/2017:23:37:10 +0800] "GET / HTTP/1.1" 502 179 "-" "curl/7.29.0"
error.log: 2017/09/14 23:38:31 [помилка] 25307#25307: *48 не визначено резольвера для розв'язанняwww.baidu.com, клієнт: 127.0.0.1, сервер: localhost, запит: "GET / HTTP/1.1", хост: "127.0.0.1:8001" Очевидно, що ця проблема стверджує, що відсутність конкретного резолвера викликає кастомні upstreamwww.baidu.com.
2. Використовуйте резолвер для визначення розділення доменних імен
Модифікована конфігурація nginx виглядає так:
Тепер запити — це нормальні 200:
req: curl "127.0.0.1:8001/" -H "upstream-host:www.baidu.com" -voa curl "127.0.0.1:8001/" -H "upstream-host:www.qq.com" -voa
access.log: 127.0.0.1 - - [14/вересня/2017:23:44:01 +0800] "GET / HTTP/1.1" 200 2381 "-" "curl/7.29.0" 127.0.0.1 - - [14/вересня/2017:23:44:07 +0800] "GET / HTTP/1.1" 200 244182 "-" "curl/7.29.0" 3. Інструкції резольвера
Синтаксис резолвера такий:
Syntax: resolver address ... [valid=time] [ipv6=on|off];
Default: —
Context: http, server, location Ви можете налаштувати кілька DNS-сервісів, nginx використовуватиме опитування для доступу до DNS-сервісів, nginx кешуватиме результати розв'язання доменних імен DNS, час кешу задається за valid, а IPv6 використовується для відображення IPv6 увімкненим або вимкненим.
resolver_timeout використовується для визначення тайм-ауту для розв'язання DNS.
|