Hello tout le monde,
Sur ma config apache j'ai virtualhost *:80 et *:443.
Les serveurs ont plusieurs IPFO, ensuite dans les DNS je configure l'IP de mon choix pour chaque site (même si il peut répondre sur chaque IP).
Dans cette config quand un script sur un site fait une connexion sortante il utilise l'IP de base du serveur. Mais j'aimerai forcer le fait que ce soit l'IP FO de mon choix qui soit utilisée comme IP sortante en fonction du vhost…
Est ce faisable ? J'ai bien songé à passer ma config à virtualhost :80 pour les vhosts et voir si ça aide… Mais faut que je monte un serveur de test, je vais éviter de bricoler sur un serveur en prod…
Je sais faire avec postfix pour utiliser une IP au choix par domaine par exemple… Mais sur apache je n'ai jamais fait…
Si quelqu'un a des pistes (doc, exemples) ce serait utile, merci ![]()
[EDIT]
J'ai tenté le coup de mettre listen :80 et virtualhost :80 dans la config apache pour distinguer les vhosts. Cela ne change rien si j'exécute un curl via un script, c'est tjr l'ip de base qui est utilisée en sortie.
[/EDIT]
Bonjour,
question con, mais le script c'est du PHP ?
Si oui, ce serait pas plutôt à PHP d'utiliser une IP précise en sortie (je suppute l'utilisation de PHP-FPM dans ce cas).
Cordialement, janus57
hum oui c'est du php, mais comment veux tu dire à php de se bind sur une ip spécifique ?
Tu voudrais bind le process php-fpm du pool sur une ip spécifique au lieu d'utiliser un socket ?
ça pourrait effectivement le faire, même si je préfère rester sur une config par socket…
Je n'avais même pas pensé à regarder au niveau du pool, alors que oui, c'est bien PHP qui fait le curl… Vais voir si il existe un param pour ça…
[EDIT]
J'ai trouvé un vieux thread à ce sujet, le gars a la même problématique quoi, pouvoir choisir l'IP sortante utilisée par PHP.
Visiblement (tt du moins à l'époque) ce n'était pas faisable au niveau config PHP, faut le faire dans les scripts.
https://bugs.php.net/bug.php?id=66208
Je vais voir si ça a changé depuis le temps…
[/EDIT]
Bonjour,
à priori de manière native pas implémenté (Cf : https://bugs.php.net/bug.php?id=66208).
Par contre si la pool PHP s’exécute avec un user bien spécifique, il doit y avoir un moyen via le firewall du serveur (Cf : https://wiki.nftables.org/wiki-nftables/index.php/Matching_packet_metainformation#Matching_by_socket_UID_.2F_GID).
Cordialement, janus57
hum intéressant, je vais bucher la doc et voir comment je peux intégrer ça avec firewalld… Merci de l'info.
Bonjour
A tu essayer cette méthode ?
https://stackoverflow.com/questions/43398957/how-to-specify-the-ip-address-on-curl https://stackoverflow.com/questions/43398957/how-to-specify-the-ip-address-on-curl
Là c'est dans le code / commande qu'on spécifie l'interface.
Mon idée c'est de gérer ça directement au niveau du vhost / pool php.
Il faut que je test ce que m'a donné @janus57, mais ce week end c'est repo, la veille techno attendra la semaine de boulot ![]()
J’avais dev un bot qui devait utiliser des IP de sorties différentes.<br />Et ce code fonctionne très bien :<br /> <br /> $options = array(<br /> 'http' => array(<br /> 'user_agent' => 'Mozilla/5.0 (compatible; ratingauto/1.0; +http://www.ratingauto.com/collecte.html)'<br /> ),<br /> 'socket' => array(<br /> 'bindto' => "$ipDeSortie:0"<br /> )<br /> );<br /><br /> $context = stream_context_create($options);<br /><br /> if ($codeSource = @file_get_contents($url, false, $context)) {<br /> //Récup code source OK<br /> [...]<br /><br />Je ne connaît aucun moyen au niveau de l'OS de faire ça.