J'ai un proxy inverse qui utilise HTTPS à l'extérieur, mais HTTP à l'intérieur.
Cela signifie que par défaut, les URL intégrées à l'application utilisent HTTP comme modèle, car c'est ainsi que les contacts sont contactés.
Comment le mandataire peut-il indiquer au backend que HTTPS doit être utilisé?
Le proxy peut ajouter des en-têtes supplémentaires (ou écraser) aux demandes qu'il reçoit et les transmettre au back-end. Ceux-ci peuvent être utilisés pour communiquer des informations au back-end.
Jusqu'ici, j'ai vu un couple utilisé pour forcer l'utilisation de https dans le schéma d'URL:
X-Forwarded-Protocol: https
X-Forwarded-Ssl: on
X-Url-Scheme: https
Et wikipedia mentionne également:
# a de facto standard:
X-Forwarded-Proto: https
# Non-standard header used by Microsoft applications and load-balancers:
Front-End-Https: on
C’est ce que vous devriez ajouter à l’hôte virtuel sur Apache : les autres proxies devraient avoir une fonctionnalité similaire
RequestHeader set X-FORWARDED-PROTOCOL https
RequestHeader set X-Forwarded-Ssl on
# etc.
Je pense qu'il est préférable de les définir tous, ou d'en définir un qui fonctionne et de supprimer les autres connus. Pour empêcher les clients pervers de s'en moquer.
Il m'a fallu plusieurs heures de recherches sur Google pour trouver le réglage magique de mon environnement. J'ai un proxy inverse HTTP httpd Apache SSL devant un serveur d'applications Jetty et un serveur HTTP Apache2. Cette réponse m'a effectivement donné l'information qui a fonctionné. Pour moi, ajouter RequestHeader et définir "X-Forwarded-Proto" expr =% {REQUEST_SCHEME} dans le fichier de configuration du site suffisait pour que la destination utilise https au lieu de http comme protocole lors de la création de liens dans la réponse. J'ai essayé le X-FORWARDED-PROTOCOL ci-dessus, mais cela n'a pas fonctionné. Espérons que cela aidera dans les recherches futures sur Google!