Serveur avec multi IPs et sélection de celle-ci en PHP

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.

This entry was posted on Vendredi, août 1st, 2008 at 11:00 and is filed under Développement. You can follow any responses to this entry through the RSS 2.0 feed. You can skip to the end and leave a response. Pinging is currently not allowed.

8 Comments

  1. prentonmantoonsenva says:

    J’aurais mis IPs en majuscule dans le titre du billet ;) Dans mon RSS reader, je me suis dit “Ah, tiens, encore un nouveau terme “ips” ” :)

    ... on July août 1st, 2008
  2. Damien says:

    Me connaissant, ça aurait plutôt été “Hips”. Mais bon ;-)
    J’ai corrigé. Merci.

    ... on July août 1st, 2008
  3. Ron says:

    C’est bien ce que je t’avais envoyé par msn quand tu était hors-ligne ?

    Ron

    ... on July août 1st, 2008
  4. Damien says:

    @Ron j’ai rien reçu de toi sur MSN.
    Je t’en ai parlé il y a une semaine environ. Mais j’ai rien vu ensuite.

    ... on July août 1st, 2008
  5. osislash says:

    Je ne vois pas le véritable intérêt hormis la possibilité la configuration d’un second serveur http sur le même port d’écoute local mais sur 2 interfaces réseaux. Même si j’ai envi de dire attention quand même c’est impossible d’avoir 2 passerelles de sorti sur la même interface (ça implique 2 cartes).

    Parce jouer avec tes Ip local c’est bien jolie mais en quoi ça branche Mr. Google ?

    Ton principe n’est valide que si tu as 2 IP WAN, donc 2 interfaces, pour le reste ce n’est que pour faire jolie…

    ... on July août 1st, 2008
  6. Damien says:

    Il est tout à fait possible de connecter deux IPs sur la même carte réseau. Je l’ai fait et ça fonctionne très bien.

    En entrée, c’est utile notemment pour avoir un serveur fournissant toutes les données dynamiques (Apache est le plus rapide pour cela) et un autre qui fournit toutes les données statiques (Lighttpd est le plus rapide pour cela).
    Pour cela, voir notemment l’article de Ron ici : http://www.webrankinfo.com/forums/viewtopic_95826.htm

    En sortie comme dans mon cas, ce que je fait, c’est des appels à des url externes en utilisant l’une ou l’autre des ips.
    Dans le cas de RefStats, cela me permet justement d’avoir moins de chances d’être banni par Google parce qu’une ip fait trop de requêtes en simultané. Il y a un intéret évident :-)

    ... on July août 1st, 2008
  7. osislash says:

    Je crois que tu mélange un peu tout mon cher Damien, je ne dis pas que tu ne peux pas avoir 2 3 4 ou même 5 ip local de configurer sur ta carte réseau, je dis que tu n’auras QU’UNE ip enregistré par google ! celle de ton FAI ! Avoir 50 adresse local pour ta machine n’y changera rien ! MAIS, après si tu as 2 FAI, ce n’est pas pareil, tu as bien 2 IP !

    Parce que quand tu en parles on ne comprend pas ! Je tenais à ce que ça soit clair ! ;)

    Non mais ohhh, bon là moi j’ai soif ! Comprends-tu ?

    ... on July août 7th, 2008
  8. Damien says:

    Oui en effet tu ne comprends pas.
    Parce que en entrée, j’ai bien deux ips. C’est en *sortie* que j’utilise une ip ou l’autre.

    Je l’indique clairement pourtant :
    “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 ?”

    Il faut lire totalement les articles. Pas que le titre ! :-)

    ... on July août 7th, 2008

Post a Comment