Я пытаюсь заменить переменную хоста в заголовке в конфигурации nginx, чтобы some.random.sub.example.net
становится net-some.random.sub.example.com
. я пробовал следующее:
if ($host ~* "^([^.]+(\.[^.]+)*)\.example.net$"){
set $sub $1;
set $host1 "http://net-$sub.example.com";
break;
}
а затем в директиве местоположения у меня есть:
location / {
proxy_set_header HOST $host1;
some conf
}
но это не сработало!
РЕДАКТИРОВАТЬ
полная конфигурация:
server {#http
listen 80 default_server;
server_name *.example.com;
large_client_header_buffers 4 16k;
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
if ($host ~* "^([^.]+(\.[^.]+)*)\.example.net$"){
set $sub $1;
set $host1 http://cn-$sub.example.com;
break;
}
location / {
proxy_pass http://ghs.google.com;
proxy_set_header HOST $host1;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Real-HOST $host;
proxy_set_header Proxy-Hostname $scheme://$http_host;
proxy_set_header X-Forwarded-Proto https;
proxy_pass_request_headers on;
proxy_redirect off;
proxy_intercept_errors on;
proxy_redirect false;
}
}
хорошо, после множества экспериментов я решил это.
set $host1 http://cn-$sub.example.com;
должно быть :
set $host1 cn-$sub.example.com;
какое-нибудь объяснение?
См. Http proto - в Host
директива вы не передаете http / https - только имя сервера