Собрана система проксирования запросов через 2 уровня nginx.
Первый используется как балансировщик для двух других:
upstream balancer {
server nginx0:444;
server nginx1:445;
}
server {
listen 80 default_server;
server_name test.server.name;
if ($host = test.server.name) {
return 301
https://$host$request_uri;
}
return 404;
}
server {
listen 443 ssl http2;
server_name www.test.server.name;
root /var/www/test.server.name;
index index.html;
location / {
proxy_pass
https://balancer;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header realip $remote_addr;
}
ssl_certificate /etc/letsencrypt/live/fullchain.pem; # manage
ssl_certificate_key /etc/letsencrypt/live/privkey.pem; # mana
}
Второй уровень nginx предполагает кэширование и состоит из двух контейнеров с nginx в docker'е
upstream apibackend {
server back1;
server back2;
}
server {
listen 444 ssl http2;
listen 445 ssl http2;
server_name www.test.server.name;
root /var/www/test.server.name;
index index.html;
proxy_set_header HOST $host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;
proxy_cache name_cache;
proxy_cache_revalidate on;
proxy_cache_use_stale updating;
proxy_cache_background_update on;
proxy_cache_valid any 5m;
location /api/ {
proxy_pass
apibackend/api/;
}
Вопрос в следующем. Судя по ответам, после того как запрос доходит до back'а или до кэша nginx'а второго уровня, он возвращается обратно тем же путем, который фиксируется в X-Forwarded-For, тем самым делая nginx первого уровня бутылочным горлышком, и не давая желаемого результата по RPS. Каким образом можно организовать отдачу соответствующего запросу кэша nginx'ами второго уровня напрямую пользователю. Если есть какие либо другие предположения буду рад услышать. Спасибо.