Я хочу выполнить следующие перенаправления и убедиться, что все они происходят за один шаг:
У меня есть кластер Kubernetes (1.15.5) на Цифровом океане с использованием stable/nginx-ingress
(устанавливается через helm), а также использует cert-manager
для обработки SSL.
В моем Ingress config я отключил перенаправление ssl, так как хочу обработать это в самих сервисах:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: proxy
namespace: default
annotations:
kubernetes.io/tls-acme: "true"
kubernetes.io/ingress.class: "nginx"
certmanager.k8s.io/issuer: "letsencrypt-prod"
certmanager.k8s.io/acme-challenge-type: http01
nginx.ingress.kubernetes.io/ssl-redirect: "false"
spec:
tls:
- hosts:
- example.com
- www.example.com
secretName: tls-example-com
rules:
- host: example.com
http:
paths:
- backend:
serviceName: nginx-service
servicePort: 80
- host: www.example.com
http:
paths:
- backend:
serviceName: nginx-service
servicePort: 80
Одной из моих услуг является сервер nginx:
server {
server_name example.com;
return 301 https://wwww.$host$request_uri;
}
server {
server_name www.example.com;
if ($scheme != "https") {
return 301 https://$host$request_uri;
}
# app
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
}
Однако $scheme
здесь всегда означает «http», что имеет смысл, поскольку моя служба принимает запросы только через порт 80. Но так же, какисходный адрес (информация о хосте) пересылается на мой сервис, как я могу узнать, какой был оригинальный порт?