De multiples hébergeurs (notemment OVH en dédié) proposent à leurs utilisateurs de configurer plusieurs adresses ip sur leur machine.
Cela peut permettre par exemple de configurer, sur la machine et sur le port 80, deux serveurs web.
Un Apache et un Lighttpd.
Le second transmettant les fichiers statiques beaucoup plus rapidement et en consommant moins de ressources machines, c’est une bonne méthode d’optimisation de vos ressources système.

Aucun problème pour les connexions entrantes donc.
J’ai cependant eu envie de me confronter à autre chose. Les connexions sortantes en PHP avec Curl.
Comment sélectionner laquelle de mes deux ips je veux que mon script utilise pour faire appel à une page externe ?

Ne sachant pas trop ou chercher, je me suis dit au début « il doit y avoir une fonction native, ou un truc dans la configuration ». Queue d’ale.

Cependant après quelques recherches, j’ai trouvé la solution, qui était sous mon nez !
Pour ceux qui ne savent pas comment fonctionne curl, celui-ci possède une fonction curl_setopt qui permet de paramétrer votre appel distant.
Ainsi vous pouvez ajouter des paramètres en POST, modifier le referer, ajouter des cookies, ajouter une identification http ou ssl etc. Les possibilitées sont illimitées.

Et c’est la que l’une des options fait son apparition. CURLOPT_INTERFACE, qui prends comme paramètre … une IP ou un nom d’hôte.
Et le script utilisera l’ip définie.

Ainsi je change mon ip en faisant :
curl_setopt($ch, CURLOPT_INTERFACE, $myIp);

Notez cependant que vous ne pouvez bien evidemment pas utiliser n’importe quelle ip. Seules celles configurées sur votre carte réseau le sont. Cela serait trop facile.
Vous pouvez cependant tester cela même si vous n’avez qu’une seule ip sur votre machine. Faites appel à une page locale et utilisez votre ip distante ainsi que 127.0.0.1 :-)

Je n’ai donc ensuite eu plus qu’a récupérer aléatoirement l’une ou l’autre de mes ip et mes appels externes se font à 50% sur une de mes ip et à 50% sur l’autre.
Je viens de diviser par deux les chances que l’ip de mon serveur ne se fasse bannir par Google avec les appels faits par RefStats.

 
Fork me on GitHub