Я пытаюсь настроить прокси-сервер NGINX для перенаправления всех запросов на один из двух серверов на основе содержимого аргумента строки запроса. По сути:
https://my.site.com/api/...&server=a
следует перенаправить на
https://a.site.com/api/...&server=a
и
https://my.site.com/api/...&server=b
следует перенаправить на
https://b.site.com/api/...&server=b
Похоже, у меня есть конфигурация, которая выполняет основную работу по переписыванию имени хоста и сохранению строки запроса без изменений:
error_log /dev/stdout info;
worker_processes 1;
events {
worker_connections 1024;
accept_mutex off;
}
http {
access_log /dev/stdout combined;
sendfile on;
server {
listen 443 ssl;
server_name $hostname;
ssl_certificate /etc/ssl/nginx.crt;
ssl_certificate_key /etc/ssl/nginx.key;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers HIGH:!aNULL:!MD5;
location ~ /api/ {
if ($arg_server !~ "^(a|b)$") { return 404; }
rewrite ^ $scheme://my.site.$arg_server.com$uri;
}
}
}
Однако я не могу получить все заголовки в исходном запросе, чтобы пережить путешествие - Authorization
заголовок, например, кажется, не достигает https://[server].site.com/api/...
Насколько я понимаю, все заголовки сохранялись по умолчанию? Это не правда?
Я смог сделать то, чего хотел, избавившись от rewrite
и заменив его на proxy_pass
и resolver
записи:
location /api/ {
if ($arg_server !~ "^(a|b)$") { return 404; }
resolver dns.site.com;
proxy_pass $schemes://my.site.$arg_server.com$request_uri;
}