Lorsque l’on veut connaitre son ip on fait souvent appel à des sites du genre: whatismyip.com, mon-ip.com ou on utilise un ifconfig en ssh.
Des fois on a aussi besoin de connaître l’ip d’un visiteur sur son site, 2 petites méthodes pour le faire sous Django et Nginx.
Sous Django:
Dans l’Urlconf
urlpatterns = patterns('', # return client IP url(r'^my_ip$', get_ip), ) |
Créez une vue du nom de get_ip qui sera utilisée par l’urlconf
from django import http def get_ip(request): """ Vue qui retourne l'IP du client """ try: # récupère l'ip du client return http.HttpResponse(request.META["REMOTE_ADDR"] ) except Exception, e: return http.HttpResponse('error %s' % e) |
Le code ci-dessus peut retourner l’adresse locale (127.0.0.1) dans ce cas il faut tester l’existence de la variable HTTP_X_REAL_IP, certains serveurs web ont besoin d’être configuré.
Sous Nginx:
Dans le fichier de configuration de nginx on écrit une nouvelle location
# return client ip location /my_ip { default_type 'text/plain'; content_by_lua 'ngx.print(ngx.var.remote_addr)'; } |
il suffit de se rendre à l’url http://monsite.com/my_ip pour voir s’afficher son ip. Cependant il faut avoir nginx compilé avec le module Lua ce qui peut être délicat si l’on a jamais compilé d’application.
Conclusion:
Si l’on s’en réfère aux deux exemples ci dessus on serait tenté d’utiliser Nginx car en une seule ligne tout le bazar est réglé.
Le hic c’est qu’il faut que Nginx soit compilé avec le module Lua pour afficher l’ip (sauf si quelqu’un connaît une autre façon d’afficher un message de sortie).
La version Django n’est pas fiable à 100% car suivant comment est configuré votre serveur web il se peut que vous vous retrouviez avec une ip du genre 127.0.0.1.
Il y a aussi la possibilité de parser le résultat des sites web cités en tout début d’article, certains proposent des Api je crois mais vous dépendez d’un autre service (on faisait ça au début) qui peuvent vous lâcher à tout moment (ce qui nous est arrivé).
Personnellement je compile toujours nginx avec Lua et quelques autres modules, ça permet de s’affranchir de plus en plus du backend.
PS: j’ai mis à jour le titre car il laissait sous-entendre autre chose (merci à Sébastien)
pour une fois …
La vraie ip.. hmm, ou celle du proxy…
mmm le titre peut paraitre tendencieux en effet si on parle de proxy du genre surf anonyme.
On utilise “ip addr” en ssh, ifconfig est déprécié. Ouais, je suis aigri, je sais :D .
merci pour ip addr je connaissais pas :)
Mais de rien, c’est toujours un plaisir. Il faut arriver à se faire à la sortie de la commande, quand on est habitué à ifconfig et route (oui, car y’a aussi “ip route”). Mais une fois que cette étape est franchie, ip est vraiment plus souple et il centralise toutes les commandes réseaux.
Ça t’intéresserait que je fasse un billet pour le blog là dessus ?
Ha mais avec le plus grand plaisir très cher, les billets c’est comme la bonne choucroute, on s’en lasse pas !
Et c’est tout à ton honneur.
Carrément. On t’envois un petit mail.
Juste pour info, c’est quoi les modules supplémentaires avec lesquel tu compile ton nginx ? Je vais passer de apache à nginx sous peu et tant qu’à faire, autant avoir un truc un peu complet pour pas me retrouver à devoir recompiler le bazar toutes les 2 semaines.
@ greg faudrait en faire un article ptet du coup …
https://github.com/agentzh/redis2-nginx-module.git
pour taper directement dans Redis
https://github.com/chaoslawful/lua-nginx-module
pour le Lua, c très pratique et super puissant
https://github.com/agentzh/set-misc-nginx-module
md5, base64 encodeing, decoding, et d’autres trucs
http_gzip_static_module
faut l’activer c pas d’origine, pour le gzip (compression des pages à la volée)
d’autres modules pour l’upload de fichiers:
https://github.com/vkholodkov/nginx-upload-module.git
https://github.com/masterzen/nginx-upload-progress-module.git
–with-http_flv_module –with-http_mp4_module –with-http_secure_link_module –with-file-aio
streaming flv et mp4
liens sécurisés d’access à un url
aio = un truc pour que ça aille plus vite :) (j’aime la précision)
Quand on veut avoir rapidement son ip depuis un script shell :
curl ifconfig.me