lindev : administration linux , développement php

Aller au contenu | Aller au menu | Aller à la recherche

07 avr. 2010

Nginx - Vhost - php - perl - ssl

banniere-nginx.png
Bon , le billet qui sert de pont de départ ... pas toujours évident sur un blog de s'y retrouver .. sans sommaire ...
Voici donc le sommaire concernant les billets de Nginx

Installation , et utilisation de base

Installer Nginx manuellement , options de compilation , découvrez les emplacements des différents fichiers de configuration , démarrage automatique , options de base ect ...

Gérer les pages PHP et PERL

Nginx seul c'est bien , mais pouvoir l'utiliser avec php perl et .. tant d'autres , c'est mieux , dans ce billet , est éxpliqué la mise en place de php et perl en fast-cgi , et la liaison avec nginx .

SSL , vhost , et autres petites options

Mise en place de pages sécurisées par ssl , création de certificats , redirection automatique , mod_rewrite , compatibilité avec certains framework qui ont besoin du mod rewrite commezend framework , symphony , etc ...

06 avr. 2010

Nginx , SSL et plus encore ..

logo_openssl.gifVoici le troisième volet sur Nginx et son utilisation .
Nous allons voir aujourd'hui la mise en place d'un certificat pour une connexion sécurisé SSL via OpenSSL , mais aussi un passage sur les réécritures d'url , en fonction d'une classe d'adresse IP ,ou la mise en place de réécritures pour l'utilisation d'un framework tel que le ZF , Sympho ou Autres ...
La mise en cache des données statiques ...
Etc etc ..

Open SSL

Il faut dans un premier temps générer les certificats auto-signés , pour celà il vous faudra installer openssl

apt-get install openssl

Certificats

Ensuite , nous allons générer un certificat , plaçons nous dans un le répertoire de conf de Nginx .

mkdir /etc/nginx/certificats
cd /etc/nginx/certificats
openssl req -new -x509 -nodes -out mon-site.fr.crt -keyout mon-site.fr.key

Vhosts

Nous voilà avec de magnifiques certificats auto-signés , nous allons maintenant modifier notre vhost pour qu'il soit dorénavant en https .
Nous allons donc changer le
listen 80;
par
listen 443;
Et enfin , voici les quelques lignes à ajouter pour utiliser nos certificats fraichement crées .

ssl on;
ssl_certificate /etc/nginx/certificats/mon-site.fr.crt;
ssl_certificate_key /etc/nginx/certificats/mon-site.fr.key;
ssl_session_timeout 5m;

Restart Nginx

Et comme d'habitude , il faut recharger les fichiers de conf de nginx

/usr/local/nginx/sbin/nginx -s reload

info.pngsources de la doc

Redirection 301

Il est parfois ( souvent ) utile de faire des redirection 301 pour une histoire de référencement ou autres , voici la conf du vhost à rediriger :

server {
  listen 80;
  server_name example.com;
  rewrite ^/(.*) http://www.example.com/$1 permanent;
}

Pour mettre un code 302 , il faut juste changer permanent par redirect

info.pngDocumentation du module

Redirection interne / externe

Prenons l'exemple d'un site qui de l'extérieur est accessible en ssl , et de façon standard en local , voilà comment faire une redirection automatique :

    if ($remote_addr !~  "^(10\.0\.0\.\d+)"){
            rewrite ^/(.*)$ https://siteA.mon-site.fr permanent;
    }

Chaque client dont l'adresse IP n'est pas 10.0.0.0-255 se verra obligé de passer par une connexion sécurisée .

Redirection pour framework

Beaucoup de framework tel que le zend-framework , symphony et bien d'autres utilisent des règles de redirections ( via par exemple le mod_rewrite d'apache ) pour rediriger toutes URL différentes de média statiques vers le bootstrap ( index.php ) , qui lui s'occupe de lancer le chef d'orchestre .

Voilà le code à ajouter dans votre vhost pour effectuer cette redirection .

location /  {
    index index.php;

    if (-f $request_filename) {
        access_log off;
        expires max;
    }

    if ($request_filename !~ "\.(js|ico|gif|jpg|jpeg|png|css|txt|pdf|doc|odt|xls|swf|mp3)$") {
        rewrite ^(.*) /index.php last;
    }    

Cache

Nginx peut aussi gérer du cache , pour servir plus rapidement , les données dites statiques , voilà une façon de l'activer :

location ~* ^.+.(jpg|jpeg|gif|css|png|js|ico)$ {
            access_log        off;
            expires           30d;
        }

Une autre méthode , ( qui est présente ci-dessus )

if (-f $request_filename) {
    access_log        off;
    expires max;
    }

warning.pngMais attention , cette deuxiéme méthode , n'est valable que si vous utilisez un framework , qui joue avec les réécritures d'url , car le script ci-dessus se traduit comme ceci :

Si le fichier de la requête existe , alors on le met/ utilise en cache .

Etant donne que l'utilisation de réécriture d'url , implique que toutes les requêtes utilisateurs , sont "factices" , elles ne représentent pas réellement la structure de fichiers/répertoires de votre site , sauf , le fichiers statiques tels que les images , css , js etc ... mais les chargements sont fait automatiquement .
Voilà pourquoi cette deuxième méthode ne fonctionne qu'avec un FW qui utilise la réécriture d'url .

Conclusion

Et bien cette fois nous y voilà , un serveur http complet , prêt à servir de nombreuses pages , à héberger n'importe quel framework , et tout ça avec de trés bonnes performances .
De nombreuses autres options / modules existes , je vous invite à les parcourir :
modules nginx

En espèrent que cette petite série de tuto vous a intéressé , n'hésitez pas à laisser un commentaire , ça fait toujours plaisir ,

Christophe.

- page 1 de 4