Mike_GoodWin
@Mike_GoodWin

При проксировании запросов через 2 уровня nginx можно ли отправлять ответ напрямую пользователю?

Собрана система проксирования запросов через 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'ами второго уровня напрямую пользователю. Если есть какие либо другие предположения буду рад услышать. Спасибо.
  • Вопрос задан
  • 207 просмотров
Решения вопроса 1
@MechanID
Админ хостинг провайдера
Вы можете вместо первого Nginx поставить LVS (linux virtual server) балансировщик в режиме direct routing и Keepalived или аналоги для мониторинга бекендов.
В режиме direct routing запрос от клиента проходит через балансировщик на бекенд, а ответ от бекенда идет напрямую к клиенту без участия балансировщика.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы