В1: Ожидается ли это, и если да, каково обоснование?
Я бы сказал, да, это ожидаемое поведение.
Объект 'Host.Value=my-app.com'
из HttpRequest
отражает поле заголовка запроса, созданное клиентом (веб-браузер, curl, ...), например:
curl --insecure -H 'Host: my-app.com' https://<FRONTEND_FOR_INGRESS-MOST_OFTEN_LB-IP>
, которое установлено * [1] в блоке местоположения для этого сервера 'my-app.com'
внутри сгенерированного nginx.conf
файла:
...
set $best_http_host $http_host;
# [1] - Set Host value
proxy_set_header Host $best_http_host;
...
# Pass the extracted client certificate to the backend
...
proxy_set_header Connection $connection_upgrade;
proxy_set_header X-Request-ID $req_id;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-Host $best_http_host;
...
, тогда как переменная ' http_host ' создается на основе следующих основных функций "ngx_http_core_module"
:
$ http_name - поле произвольного заголовка запроса; последняя часть имени переменной - это имя поля, преобразованное в нижний регистр с черточками, замененными подчеркиванием
Таким образом, описанное поведение в любом случае не уникально для ASP. NET Core 3.0, вы видите неизвестное Словарь, содержащий пары ключ / значение пользовательских заголовков, установленных явно nginx контроллером, в соответствии с nginx входной текущей конфигурацией, вот и все.
Вы можете проверить текущую конфигурацию nginx контроллера самостоятельно, выполнив следующую команду :
kubectl exec -it po/<nginx-ingress-controller-pod-name> -n <ingress-controller-namespace> -- cat /etc/nginx/nginx.conf
Q2: Какой лучший способ получить исходный URL (https://my-app.com)?
Я бы попробовал с построив его с использованием Configuration snippet, это путем введения другого пользовательского заголовка, где вы объединяете значения.