Bonjour,
Je tente d'utiliser une application web écrite avec les pieds. Je n'ai pas le choix de l'application. Bien entendu, je n'ai pas le code source.
C'est une application qui ne fait que HTTP, et qui filtre en fonction du nom du serveur web demandé. Par exemple si je configure l'application pour répondre à app.example.com alors la connexion HTTP devra obligatoirement contenir Host: app.example.com
sinon la connexion est rejetée.
Donc ça ne fonctionne pas depuis le réseau local si l'application est également sur le réseau local (ou alors il faut un DNS split-horizon, ou bricoler un fichier hosts sur chaque machine).
Mon objectif est de gérer HTTP et HTTPS, et de pouvoir me connecter depuis le réseau local et depuis l'internet (l'application est sur le réseau local, sur une Debian 9 toute fraîche).
Je n'arrive pas à faire fonctionner avec ce que je connais de nginx ou Apache en proxy inverse : j'ai la page de garde de l'application, et ensuite plus rien. Le journal de l'application indique ne pas servir l'adresse demandée, sans précision, avec d'autres infos totalement inexploitables. Rien de particulier dans les journaux des proxies.
J'aimerais faire en sorte que le proxy se fasse passer pour le navigateur (en principe c'est le cas non ? Comme si le navigateur était sur la même machine que le proxy, donc la même machine que mon application problématique), et qu'il réécrive Host: xxx
dans tous les cas (en principe c'est le cas aussi non ?). Cela permet alors d'accéder à l'application depuis le réseau local via http://10.1.2.3 ou depuis internet via http://app.example.com
En plus je veux HTTP et HTTPS. L'application ne fait que le HTTP. Je n'ai habituellement pas de soucis avec ça non plus.
--> ça peut venir de quoi ce dysfonctionnement ? Sachant que la page de garde est ok, mais la suite ne fonctionne pas si j'utilise un proxy (sans proxy c'est ok, mais je n'ai pas HTTPS, ni possibilité de réseau local + internet)
--> je tente avec un autre proxy inverse ? Si nginx et Apache2 ne s'en sortent pas, je doute que ce soit mieux ailleurs
Merci d'avance à ceux qui tentent de répondre :-)
# Une piste
Posté par chimrod (site web personnel) . Évalué à 5.
J'avais écrit une fois un proxy (python) qui se connectait à un proxy d'entreprise qui filtrait mes requêtes si celles-ci n'avaient pas de User-Agent. Ce petit code crée un proxy, qui ajoute un user-agent par défaut si la requête n'en possède pas.
Ça n'est pas exactement ce que tu veux, mais le code est assez simple pour être modifié dans le sens que tu souhaites (il y a beaucoup de « je veux » dans ton message)
À toi de jouer !
# HaProxy
Posté par voxdemonix . Évalué à 4. Dernière modification le 24 décembre 2018 à 13:55.
Essayes avec HaProxy qui est conçu pour faire se que tu demandes.
Par défaut tes User-Agent sont conservé. Tu peux modifier tout et n'importe quoi à la volée.
[^] # Re: HaProxy
Posté par voxdemonix . Évalué à 2.
Pour tes questions :
Probablement une vérification de l'hostname ($_SERVER["REMOTE_HOST"]) qui s'effectue partout sauf la page d'accueil.
Beaucoup de CMS ont ce comportement (par exemple Prestashop ou Nextcloud).
Ce sont des serveurs web avec quelques features de proxy, pas des soft né pour faire du proxy.
Par défaut avec HaProxy tout tes utilisateurs auront l'adresse IP du proxy. Tu peux voir ce tuto pour corriger ce soucis. Il y a quelques tutos/infos sur le sujet dans le wiki de linuxfr au besoin.
[^] # Re: HaProxy
Posté par NeoX . Évalué à 4.
il suffit de mettre la ligne
pour que l'IP du client soit directement passé au serveur
par contre cela fonctionne mieux sur le proxy est aussi la route par defaut du serveur,
sinon on peut se retrouver avec du routage assymetrique, qui peut etre problematique à gerer
Client -> routeur/firewall -> haproxy -> serveur -> routeur/firewall -> client
[^] # Re: HaProxy
Posté par voxdemonix . Évalué à 2. Dernière modification le 25 décembre 2018 à 19:05.
Si cette ligne a vraiment ce comportement :
Cela signifie que si un client contact ton frontend/proxy, le serveur va répondre directement au client SAUF si tu as configuré ton frontend comme passerelle réseau. (ce qui doit être assez compliqué à gérer si plus tard tu rajoutes un second frontend/proxy, ou simplement si tu ne veux pas que tes machines fassent tout transiter par ton frontend ou exposent leur IP)
Par contre ça doit être assez puissant sur du multi-réseau, à voir comment réagissent les NAT des clients.
La solution que j'ai linké se résume à demander à HaProxy d'ajouter un header et, côté serveur backend, utiliser le module rpaf d'apache2 (ou équivalent) :) On ne fait ainsi transiter que se qu'il y a besoin à travers le frontend/proxy.
[^] # Re: HaProxy
Posté par Kerro . Évalué à 3.
Ce n'est hélas pas cette hypothèse : si
Host: xxx
n'a pas la bonne valeur je n'ai pas la page d'accueil du tout. SiHost: xxx
a la bonne valeur j'ai la page d'accueil, mais si j'utilise un proxy alors je n'ai pas la suite.J'ai sniffé le réseau et je ne vois aucune différence entre ce qui est avant et après le proxy (sans chercher des heures non plus). Il y a donc une différence subtile mais je ne pige pas quoi.
Autre possibilité : il y a une bonne grosse différence et je suis miro :-)
Je vais tenter avec les deux propositions faites ici.
[^] # Re: HaProxy
Posté par NeoX . Évalué à 3.
[^] # Re: HaProxy
Posté par Kerro . Évalué à 2.
C'est l'application qui fait directement office de serveur web (le truc dégueux à la mode depuis quelques années). Le proxy que je tente de faire fonctionner est sur la même machine.
# Cookies ?
Posté par benja . Évalué à 2.
Cela pourrait être un problème de session/cookies, cf. http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_cookie_domain pour nginx. Si tu réécris l'en-tête host, assures-toi de réécrire l'attribut domain du set-cookie de la réponse, si présent. Bon je dis ça c'est juste une autre piste… La question est de savoir si cela fonctionne déjà en mode reverse proxy simple, c.-à-d. sans réécrire le Host mais en bidouillant le /etc/hosts du client et/ou du proxy.
[^] # Re: Cookies ?
Posté par Kerro . Évalué à 2.
Pas mieux :-)
Ça ne fonctionne pas non plus en reverse proxy en mettant à jour le fichier hosts. C'est ce qui m'avait étonné dès le départ.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.