nginx (prononcez n-jean-x) est un serveur web léger et un reverse proxy HTTP, à la fois simple et rapide à configurer. Je m’en sers en frontal de mes services comme pour l’eXpress-Board par exemple. L’application Play! Framework tourne sur le port 9000 sur la machine, et nginx est démarré sur le port 80. Il route les demandes vers l’application Play! automatiquement. Il y a plusieurs intérêts à avoir un reverse proxy. Lorsque le site est down, vous pouvez rediriger vos clients vers une page d’erreur propre. Vous pouvez aussi configurer un load-balancer, afin d’avoir 2 applications Play! derrière un reverse proxy nginx. Play! étant un framework sans état côté serveur, vous pouvez ainsi mettre en place en quelques minutes une petite infrastructure digne d’une banque.
Voyons comment configurer un serveur nginx sur votre serveur OVH favori (j’aime ces gars, vraiment) ou Gandi (je vous aime aussi).
Installez tout d’abord nginx avec apt-get ou urpmi, cela devrait prendre quelques instants.
Ouvrez ensuite la configuration située en général dans le répertoire /etc/nginx sur votre serveur. Je vous conseille de copier /etc/sites-available/default vers un nouveau fichier, et de mettre à jour le lien symbolique sur /etc/sites-enabled.
Voici un exemple de configuration pour un site de voyages à fort trafic :
server { listen 80; server_name www.mysuperwebsite.com; access_log /var/log/nginx/mysuperwebsite.access.log; error_log /var/log/nginx/mysuperwebsite.error.log; # Thanks Aurelien proxy_http_version 1.1; if ($request_method !~ ^(GET|HEAD|POST)$ ) { return 444; } # Redirect to Play Framework all pages, set a cache for performance location / { proxy_pass http://127.0.0.1:9000; } # Store in cache all the Play2 assets (css, js) location /assets { proxy_pass http://127.0.0.1:9000; proxy_cache cache; proxy_cache_valid 1h; expires max; } #error_page 400 402 403 405 406 407 408 409 410 411 412 413 414 415 416 417 500 501 502 503 504 505 506 507 /error.html; location = /error.html { root /var/www/nginx-default; } error_page 404 /404.html; location = /404.html { root /etc/nginx/mysuperwebsite_errors_page ; } # restrict with HTTP password location /sample_admin { proxy_pass http://127.0.0.1:9000; auth_basic "Restricted"; auth_basic_user_file htpasswd; } }
Pour l’eXpress-Board, qui tourne avec Play 1.2.4, ma configuration est encore plus simple :
server { listen 95.142.163.172:80; server_name express-board.fr; proxy_http_version 1.1; location / { proxy_pass http://127.0.0.1:9000; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Port $server_port; proxy_set_header X-Forwarded-Proto http; } }
Pour terminer, vous pourrez aussi trouver dans la documentation de Play! Framework v1 différents exemples avec lighthttpd ou Apache.
Crédit photo: http://www.flickr.com/photos/onus-technologies/7843311058/sizes/q/in/photostream/
0 no like
Si, comme je le suppose, le serveur Play parle en HTTP 1.1, je conseille fortement de rajouter l’option de conf:
Car Nginx communique par défaut en 1.0, ce qui peut poser des problèmes erratiques pour les connexions longues, type websocket ou long-polling. Détails ici.
Est il possible de servir le contenu static avec ngix et de rediriger le reste du traffique vers Play?
J’imagine que ngix devrais etre plus performant que play pour ceci.
Il est possible de configurer nginx afin qu’il cache les assets comme tout ce qui est css/js/images par exemple