Apache pour développeur PHP




16 novembre 2009          ALTERWAY Apache pour développeur PHP   1
Hébergement                                             Conseil




                   Formation                                    Solutions




16/11/09                             ALTER WAY GROUP                          2


16 novembre 2009           ALTERWAY - Apache pour développeur PHP             2
Who is talking ?
 Julien Pauli
 Expert certifié PHP& Zend Framework
 Formateur – Consultant - groupe AlterWay

 "ZendFramework, bien développer en PHP" :
  Eyrolles
 Contributeur ZendFramework - PHP - Apache

 http://julien-pauli.developpez.com

 LAMP stack user



    16 novembre 2009    ALTERWAY - Apache pour développeur PHP   3
Ordre du jour
              A patchy server : historique
                      1995 à nos jours

              Modules Apache
                      Fonctionnement interne

              Liaisons PHP et Apache
                      CGI - mod_php - others

              Apache-PHP et HTTP

              Apache en puissance
                      Autorisations, compressions, cache ...

16 novembre 2009              ALTERWAY - Apache pour développeur PHP   4
Sondage
 Qui utilise Apache ?

 Depuis combien de temps ?
        depuis toujours ?
        depuis peu ?

 Quelle version ?
        1.x
        2.x

 Utilisez-vous un autre serveur Web ?



       16 novembre 2009   ALTERWAY - Apache pour développeur PHP   5
Non, pas pour aujourd'hui :




               Apache !=




16 novembre 2009        ALTERWAY - Apache pour développeur PHP   6
Apache, c'est quoi ?




16 novembre 2009      ALTERWAY - Apache pour développeur PHP   7
Apache, c'est avant tout...
 Le nom d'une fondation, l'ASF
 Apache Software Foundation : équivalent "association" en France

         Investisseurs privés (Google, Microsoft, IBM)
         But non lucratif
         ~300 membres (contributeurs)
         Fondée en 1999 (10ans)
 Une licence : Apache Licence
 Une adresse : http://www.apache.org/
 Des tonnes de projets :
        HTTPD, couchdb, tomcat, geronimo, jakarta, struts,
         spamassassin,

       16 novembre 2009          ALTERWAY - Apache pour développeur PHP   8
Historique du web



 1990, Sir Tim Berners Lee invente le www
      http://info.cern.ch/default-fr.html

 1993, premier serveur Web : NCSA httpd
      http://hoohoo.ncsa.illinois.edu/docs/info/Features.html

 1995 : Apache 1 : fork de NCSA httpd
      "A Patchy httpd Server" : une suite de patchs sur NCSA
       httpd



  16 novembre 2009     ALTERWAY - Apache pour développeur PHP   9
Historique Apache
 1995 : Apache 1
     Bases : fonctionnement très proche d'UNIX

 2003 : Apache 2
     Cross-Platform (Multi Processing Modules)
     Apache Portable Runtime (APR, APR-Util)
     IPV6 et support des threads Linux

 2005 : Apache 2.2
     Supports de bases de données
     Amélioration du cache et de l'authentification
     Filtres
     Proxy et proxy load balancing

   16 novembre 2009     ALTERWAY - Apache pour développeur PHP   10
Ouvrons le capot




16 novembre 2009     ALTERWAY - Apache pour développeur PHP   11
Une structure modulaire
 Un core (écrit en C)
      mod_core , mpm, http_core ...


 Des modules d'extension (écrits en C)
      mod_rewrite, mod_deflate, .... mod_php
      Compilables statiquement ou dynamiquement (mod_so)



 Très fléxible
 Beaucoup de modules dans la nature (~600 ,
  probablement plus)
      http://modules.apache.org/search.php?query=true


   16 novembre 2009        ALTERWAY - Apache pour développeur PHP   12
Fonctionnement d'Apache
 Les modules sont connectés via des "hooks"
  (évènements)
      PHP est générateur de contenu
                                 Mapping URI vers fichier sur le disque

                                             Authentification

                                             Permissions

                                             Type du fichier

                                             Traitement (génération de contenu)

                                             Réponse au client

                                             Stockage des erreurs (log)

   16 novembre 2009        ALTERWAY - Apache pour développeur PHP         13
Lier PHP et Apache




16 novembre 2009      ALTERWAY - Apache pour développeur PHP   14
Liaison Apache - PHP
 Différentes liaisons :
        module : mod_php
          – Cas le plus courant
          – liaison forte (crashs, droits)
        CGI
          – Peu performant à haute charge
          – Indépendant d'Apache (crashs)
          – Tourne avec ses droits
       FastCGI
         – CGI : donc même spécifications
         – Mais FastCGI gère un pool de processus et une file
           d'attente
              Bien plus performant que CGI
       Autre module - per_user, itk, suexec, suphp
       16 novembre 2009       ALTERWAY - Apache pour développeur PHP   15
Liaison Apache - PHP : module
 mod_php
          Fournit un handler (générateur de contenu) à Apache
          Définit des directives

php_value              Définit une valeur de php.ini
php_admin_value        Définit une valeur de php.ini (hors .htaccess)
php_flag               Définit une valeur bool. de php.ini
php_admin_flag         Définit une valeur bool. de php.ini (hors .htaccess)
PHPINIDir              Localise le fichier php.ini à utiliser


          Définit des types MIMEs reconnus par le handler

                       application/x-httpd-php
                       application/x-httpd-php-source
                       text/html
    16 novembre 2009         ALTERWAY - Apache pour développeur PHP       16
mod_php : activation
 Chargement module PHP via mod_so

             LoadModule php5_module modules/libphp5.so


 Déclenchement du gestionnaire PHP

   AddType application/x-httpd-php .php                             Forçage du type (1)

                      OU

   <FilesMatch .php$>
      SetHandler application/x-httpd-php                      Déclenchement du handler
   </FilesMatch>



   16 novembre 2009        ALTERWAY - Apache pour développeur PHP                     17
PHPInfo() nous informe




16 novembre 2009        ALTERWAY - Apache pour développeur PHP   18
PHP en module, c'est aussi :
 Des directives dans php.ini

                           engine
                           child_terminate
                           last_modified
                           xbithack

 Et des fonctions PHP parfois bien utiles

                      apache_getenv()
                      apache_request_headers()
                      apache_response_headers()
                      apache_lookup_uri()
                      ...



   16 novembre 2009         ALTERWAY - Apache pour développeur PHP   19
PHP en CGI
 Un process PHP est crée par requête
         Peut vite devenir pénalisant
         Le CGI tourne avec les droits apache (suExec évite celà)

                   php53-src> ./configure
Compilation
                   php52-src> ./configure --enable-force-cgi-redirect
                                          --enable-discard-path

                   ScriptAlias /cgi
                   path/to/php/cgi
      Activation   <Directory /var/www>
                     addHandler php .php
                     Action php /cgi/php-cgi
                   </Directory>
16 novembre 2009        ALTERWAY - Apache pour développeur PHP      20
PHP en CGI




16 novembre 2009   ALTERWAY - Apache pour développeur PHP   21
PHP en FastCGI
 Pas de support natif de FCGI sur Apache 2.2 jusqu'à
  septembre 2009
 mod_fastcgi ou mod_fcgid existent
      mod_fcgid plus récent et plus performant
      mod_fcgid intégré dans Apache 2.3 (à venir)
        – http://httpd.apache.org/mod_fcgid

 Process PHP détachés d'Apache
      Connexions persistantes plus efficaces
      Isolation mémoire (crashs)
   Communication par sockets
 Contrôle fin sur la création des process
 PHP-FPM (http://php-fpm.org)

       16 novembre 2009    ALTERWAY - Apache pour développeur PHP   22
PHP en FastCGI : configuration
                       LoadModule fcgid_module modules/mod_fcgid.so
                       addHandler fcgid-script .php
   httpd.conf          MaxRequestsPerProcess 10000
                       <Directory /var/www>
                         Options ExecCGI
                         FcgiWrapper /usr/local/bin/php-fcgiwrapper
                       </Directory>


                       #!/bin/sh
 php-fcgiwrapper       PHP_FCGI_MAX_REQUESTS=10000
                       export PHP_FCGI_MAX_REQUESTS
                       exec /usr/local/bin/php-cgi

 <php-sources>/sapi/cgi/README.FastCGI
 http://httpd.apache.org/mod_fcgid/mod/mod_fcgid.html

    16 novembre 2009   ALTERWAY - Apache pour développeur PHP   23
Au secours, j'ai perdu mon php.ini !




16 novembre 2009   ALTERWAY - Apache pour développeur PHP   24
Spécifier manuellement php.ini
 via mod_php : PHPIniDir

             LoadModule php5_module modules/libphp5.so
             PHPIniDir /etc/php5/apache/php.ini
 CGI : variable d'environnement PHPRC
                                                                                    myphpcgi
         ScriptAlias /cgi /usr/bin/php/                         #!/bin/sh
         <Directory /var/www>                                   export PHPRC=/etc/php5/cgi
           addHandler php .php                                  exec /usr/bin/php/php-cgi
           Action php /cgi/myphpcgi
         </Directory>
 CGI : option de lancement "-c"
                                                              myphpcgi
                      #!/bin/sh
                      exec /usr/bin/php/php-cgi -c /etc/php5/cgi/php.ini

 CGI : variable env. sapi PHP_INI_SCAN_DIR (PHP>=5.2.7)
   16 novembre 2009              ALTERWAY - Apache pour développeur PHP               25
php.ini par défaut
 Si rien n'est précisé, la recherche s'effectue dans cet ordre :


    1. Le dossier du binaire Apache (httpd)
    2. Le DocumentRoot /!
    3. Windows : Le registre puis le PATH système
    4. le dossier renseigné via l'option de configuration
       --with-config-file-path ou --with-config-file-scan-dir



    Il n'est pas conseillé de laisser le système choisir le php.ini
    PHP sait démarrer sans aucun fichier php.ini
    --with-config-file-scan-dir pratique pour éclater sa conf
    php.ini actuellement utilisé ? => php_ini_loaded_file() (PHP 5.2.4)

       16 novembre 2009     ALTERWAY - Apache pour développeur PHP   26
Développer en PHP avec Apache
                tous les jours




16 novembre 2009   ALTERWAY - Apache pour développeur PHP   27
HTTP
 GET
     Récupération d'une ressource (cachable)
 POST
     Création ou maj. d'une ressource via un script de traitement
 PUT
     Dépôt de données brutes, création ou mise à jour d'une ressource
 DELETE (coule de source)
 OPTIONS
     Liste des méthodes supportées par le serveur web
 TRACE
   Traçage d'informations (rebonds de proxies)
 HEAD
     Informations sur une ressource
      16 novembre 2009    ALTERWAY - Apache pour développeur PHP   28
Apache et HTTP
 Apache sait tout gérer nativement sauf DELETE

               OPTIONS / HTTP/1.1
               Host: localhost

               HTTP/1.1 200 OK
               Date: Fri, 18 Sep 2009 19:50:25 GMT
               Server: Apache/2.2.13 (Unix) PHP/5.2.11
               Allow: GET,HEAD,POST,OPTIONS,TRACE,PUT
               Content-Length: 0
               Content-Type: httpd/unix-directory


 Apache reconnaît PUT
     Mais a besoin d'aide pour l'utiliser
     Traitement via programme externe (PHP ?)

      16 novembre 2009       ALTERWAY - Apache pour développeur PHP   29
Apache : méthode PUT
 Script => activer la méthode PUT (entre autre...)

                           Script PUT /put.php


                                                         put.php
 <?php
 $file = basename($_SERVER['PATH_TRANSLATED']);
 $code = file_exists($file) ? 204 : 201;
 $uri = "http://".$_SERVER['SERVER_NAME'].$_SERVER['PATH_INFO'];

 $return = file_put_contents($file, file_get_contents("php://input"));
 $header = $return === false ? null : "Location: $url";

 header($header, true, $code);



    16 novembre 2009       ALTERWAY - Apache pour développeur PHP        30
Apache : méthode PUT

                           Script PUT /put.php




PUT /foo HTTP/1.1                          HTTP/1.1 201 Created
host: afup                                 Date: Fri, 18 Sep 2009 20:09:48 GMT
Content-type: text/plain                   Server: Apache/2.2.13 (Unix) PHP/5.2.11
Content-Lenght: 14                         X-Powered-By: PHP/5.2.11
                                           Location: http://afup/foo
hello from foo




   16 novembre 2009        ALTERWAY - Apache pour développeur PHP          31
Apache : Limit
 <Limit> : limite l'accès par méthodes HTTP
 Concerne GET(HEAD), POST, PUT, DELETE, OPTIONS
 Pour TRACE => TraceEnable


  DocumentRoot /var/www                          POST /some/path/file.txt HTTP/1.1
  <Directory /var/www>                           Host: afup
    <Limit POST PUT>
         order allow,deny
         Deny from all
    </Limit>
    Order allow, deny
    Allow from all
  </Directory>                                           HTTP/1.1 403 Forbidden



   16 novembre 2009     ALTERWAY - Apache pour développeur PHP                32
Apache : .htaccess




   .htaccess, tout le monde connait
   Permet d'ajouter des directives à la volée, par répertoire
   Peut être renommé (directive AccessFileName)
   Ralentit Apache !




    16 novembre 2009     ALTERWAY - Apache pour développeur PHP   33
.htaccess autorisé ?
 AllowOverride ->directives que .htaccess sera autorisé à modifier
 N'est valide que dans un conteneur <Directory>


 <Directory />
   AllowOverride none           ignore .htaccess dans tous les dossiers
 </Directory>                Autorise .htaccess dans le dossier /var/www
                         Il ne pourra rajouter que des options pour les droits
 <Directory /var/www>
   AllowOverride limit
 </Directory>


 Par défaut AllowOverride = All
 Enlever AllowOverride sur / -> économies de ressources (défaut)
 Il est toujours mieux de ne pas utiliser .htaccess

    16 novembre 2009       ALTERWAY - Apache pour développeur PHP       34
PHP ou Apache ?
      PHP
              Générer du contenu (sic!)
              Gérer les en-têtes de ce contenu
      Apache
                  Gérer HTTP
                  Gérer les couches basses (TCP, processus)
                  Gérer ... ce que PHP ne gère pas

                     Mapping URI vers fichier sur le disque
                     Authentification
                     Permissions
                     Type du fichier
                     Génération de contenu (PHP)
                     Réponse au client
                     Stockage des erreurs (log)

16 novembre 2009              ALTERWAY - Apache pour développeur PHP   35
Apache : quelques exemples
 Touche pas à mes images !

SetEnvIfNoCase Referer "^http://mysite.com/" good
SetEnvIfNoCase Referer "^$" good
SetEnvIfNoCase ^User-Agent$ .*(badbot|spider|attacker) !good

<FilesMatch ".(png|jpg|jpeg|gif|bmp|swf|flv)$">
Order Deny,Allow
Deny from all
Allow from env=good
ErrorDocument 403 "Voleur de bande passante"
</FilesMatch>

 Proposer la boite de dialogue "sauver sous" :

AddType application/octet-stream .pdf .avi .mp4

16 novembre 2009      ALTERWAY - Apache pour développeur PHP   36
Autorisations
 Autorise certaines IP, identification (RFC2617)
 "Ce site est en construction" :

                   <Directory /var/www>
                   AuthType basic
                   AuthName "Ce site est en construction"
                   AuthUserFile /.htpasswd
                   Require valid-user

                   Order Deny,Allow
                   Deny from all
                   Allow from 1.2.3.4/16 // mon parc
                   Allow from googlebot.com // Google vient

                   Satisfy Any
                   </Directory>
16 novembre 2009                  ALTERWAY - Apache pour développeur PHP   37
Apache : gestion du cache
 mod_expires sait envoyer les en-têtes de cache
 HTTP ?: http://julien-pauli.developpez.com/tutoriels/web/http/
 mod_headers : contrôle manuel des en-têtes
ExpiresActive On                                                     GET /page HTTP/1.1
ExpiresByType image/* "access plus 1 month"                          Host: afup
ExpireDefault "modification plus 2 hours"

                                     HTTP/1.x 200 OK
                                     Date: Fri, 18 Sep 2009 18:44:18 GMT
                                     Server: Apache/2.2.13 (Unix) PHP/5.2.11
                                     Cache-Control: max-age=7200
                                     Expires: Sat, 19 Sep 2009 18:44:18 GMT
                                     Content-Length: 0
                                     Content-Type: text/html; charset=ISO-8859-1
                                     Content-Language: fr

   16 novembre 2009         ALTERWAY - Apache pour développeur PHP                 38
Apache : gestion du cache
 ExpireDefault concerne aussi le contenu servi par PHP
 sessions PHP? cache invalidé
      Réglages dans php.ini ou avec session_cache_limiter()


                           HTTP/1.x 200 OK
                           Date: Fri, 18 Sep 2009 18:48:13 GMT
                           Server: Apache/2.2.13 (Unix) PHP/5.2.11
<?php                      Expires: Thu, 19 Nov 1981 08:52:00 GMT
session_start()            Cache-Control: no-store, no-cache, must-
                                        revalidate, post-check=0, pre-check=0
                           Pragma: no-cache
                           Content-Length: 3
                           Content-Type: text/html; charset=ISO-8859-1
                           Content-Language: fr



   16 novembre 2009         ALTERWAY - Apache pour développeur PHP     39
Apache : compression
 mod_deflate
      Compresse / décompresse à la volée

 Economisez de la bande passante / du temps de transfert


               AddOutputFilterByType DEFLATE text/* image/*




   16 novembre 2009          ALTERWAY - Apache pour développeur PHP   40
Les modules "exotiques"
 mod_bw
   Limitez la bande passante (dans les 2 sens)
 mod_jsmin
   Minifiez vos js ou css à la volée avec un cache
 mod_tidy
   Nettoyez votre (x)Html à la volée en sortie
 mod_concat
   1 seule requête qui concatène le résultat de X requêtes
 mod_qos - mod_slotlimit
   Contrôler finement la qualité de service
 mod_hitlog
      Ajoutez un contenu à toutes vos pages ("include")


    16 novembre 2009        ALTERWAY - Apache pour développeur PHP   41
Merci,


                      Question ?




 http://julien-pauli.developpez.com
   16 novembre 2009   ALTERWAY - Apache pour développeur PHP   42

Apache for développeurs PHP

  • 1.
    Apache pour développeurPHP 16 novembre 2009 ALTERWAY Apache pour développeur PHP 1
  • 2.
    Hébergement Conseil Formation Solutions 16/11/09 ALTER WAY GROUP 2 16 novembre 2009 ALTERWAY - Apache pour développeur PHP 2
  • 3.
    Who is talking?  Julien Pauli  Expert certifié PHP& Zend Framework  Formateur – Consultant - groupe AlterWay  "ZendFramework, bien développer en PHP" : Eyrolles  Contributeur ZendFramework - PHP - Apache  http://julien-pauli.developpez.com  LAMP stack user 16 novembre 2009 ALTERWAY - Apache pour développeur PHP 3
  • 4.
    Ordre du jour  A patchy server : historique  1995 à nos jours  Modules Apache  Fonctionnement interne  Liaisons PHP et Apache  CGI - mod_php - others  Apache-PHP et HTTP  Apache en puissance  Autorisations, compressions, cache ... 16 novembre 2009 ALTERWAY - Apache pour développeur PHP 4
  • 5.
    Sondage  Qui utiliseApache ?  Depuis combien de temps ?  depuis toujours ?  depuis peu ?  Quelle version ?  1.x  2.x  Utilisez-vous un autre serveur Web ? 16 novembre 2009 ALTERWAY - Apache pour développeur PHP 5
  • 6.
    Non, pas pouraujourd'hui :  Apache != 16 novembre 2009 ALTERWAY - Apache pour développeur PHP 6
  • 7.
    Apache, c'est quoi? 16 novembre 2009 ALTERWAY - Apache pour développeur PHP 7
  • 8.
    Apache, c'est avanttout...  Le nom d'une fondation, l'ASF  Apache Software Foundation : équivalent "association" en France  Investisseurs privés (Google, Microsoft, IBM)  But non lucratif  ~300 membres (contributeurs)  Fondée en 1999 (10ans)  Une licence : Apache Licence  Une adresse : http://www.apache.org/  Des tonnes de projets :  HTTPD, couchdb, tomcat, geronimo, jakarta, struts, spamassassin, 16 novembre 2009 ALTERWAY - Apache pour développeur PHP 8
  • 9.
    Historique du web 1990, Sir Tim Berners Lee invente le www  http://info.cern.ch/default-fr.html  1993, premier serveur Web : NCSA httpd  http://hoohoo.ncsa.illinois.edu/docs/info/Features.html  1995 : Apache 1 : fork de NCSA httpd  "A Patchy httpd Server" : une suite de patchs sur NCSA httpd 16 novembre 2009 ALTERWAY - Apache pour développeur PHP 9
  • 10.
    Historique Apache  1995: Apache 1  Bases : fonctionnement très proche d'UNIX  2003 : Apache 2  Cross-Platform (Multi Processing Modules)  Apache Portable Runtime (APR, APR-Util)  IPV6 et support des threads Linux  2005 : Apache 2.2  Supports de bases de données  Amélioration du cache et de l'authentification  Filtres  Proxy et proxy load balancing 16 novembre 2009 ALTERWAY - Apache pour développeur PHP 10
  • 11.
    Ouvrons le capot 16novembre 2009 ALTERWAY - Apache pour développeur PHP 11
  • 12.
    Une structure modulaire Un core (écrit en C)  mod_core , mpm, http_core ...  Des modules d'extension (écrits en C)  mod_rewrite, mod_deflate, .... mod_php  Compilables statiquement ou dynamiquement (mod_so)  Très fléxible  Beaucoup de modules dans la nature (~600 , probablement plus)  http://modules.apache.org/search.php?query=true 16 novembre 2009 ALTERWAY - Apache pour développeur PHP 12
  • 13.
    Fonctionnement d'Apache  Lesmodules sont connectés via des "hooks" (évènements)  PHP est générateur de contenu Mapping URI vers fichier sur le disque Authentification Permissions Type du fichier Traitement (génération de contenu) Réponse au client Stockage des erreurs (log) 16 novembre 2009 ALTERWAY - Apache pour développeur PHP 13
  • 14.
    Lier PHP etApache 16 novembre 2009 ALTERWAY - Apache pour développeur PHP 14
  • 15.
    Liaison Apache -PHP  Différentes liaisons :  module : mod_php – Cas le plus courant – liaison forte (crashs, droits)  CGI – Peu performant à haute charge – Indépendant d'Apache (crashs) – Tourne avec ses droits  FastCGI – CGI : donc même spécifications – Mais FastCGI gère un pool de processus et une file d'attente  Bien plus performant que CGI  Autre module - per_user, itk, suexec, suphp 16 novembre 2009 ALTERWAY - Apache pour développeur PHP 15
  • 16.
    Liaison Apache -PHP : module  mod_php  Fournit un handler (générateur de contenu) à Apache  Définit des directives php_value Définit une valeur de php.ini php_admin_value Définit une valeur de php.ini (hors .htaccess) php_flag Définit une valeur bool. de php.ini php_admin_flag Définit une valeur bool. de php.ini (hors .htaccess) PHPINIDir Localise le fichier php.ini à utiliser  Définit des types MIMEs reconnus par le handler application/x-httpd-php application/x-httpd-php-source text/html 16 novembre 2009 ALTERWAY - Apache pour développeur PHP 16
  • 17.
    mod_php : activation Chargement module PHP via mod_so LoadModule php5_module modules/libphp5.so  Déclenchement du gestionnaire PHP AddType application/x-httpd-php .php Forçage du type (1) OU <FilesMatch .php$> SetHandler application/x-httpd-php Déclenchement du handler </FilesMatch> 16 novembre 2009 ALTERWAY - Apache pour développeur PHP 17
  • 18.
    PHPInfo() nous informe 16novembre 2009 ALTERWAY - Apache pour développeur PHP 18
  • 19.
    PHP en module,c'est aussi :  Des directives dans php.ini engine child_terminate last_modified xbithack  Et des fonctions PHP parfois bien utiles apache_getenv() apache_request_headers() apache_response_headers() apache_lookup_uri() ... 16 novembre 2009 ALTERWAY - Apache pour développeur PHP 19
  • 20.
    PHP en CGI Un process PHP est crée par requête  Peut vite devenir pénalisant  Le CGI tourne avec les droits apache (suExec évite celà) php53-src> ./configure Compilation php52-src> ./configure --enable-force-cgi-redirect --enable-discard-path ScriptAlias /cgi path/to/php/cgi Activation <Directory /var/www> addHandler php .php Action php /cgi/php-cgi </Directory> 16 novembre 2009 ALTERWAY - Apache pour développeur PHP 20
  • 21.
    PHP en CGI 16novembre 2009 ALTERWAY - Apache pour développeur PHP 21
  • 22.
    PHP en FastCGI Pas de support natif de FCGI sur Apache 2.2 jusqu'à septembre 2009  mod_fastcgi ou mod_fcgid existent  mod_fcgid plus récent et plus performant  mod_fcgid intégré dans Apache 2.3 (à venir) – http://httpd.apache.org/mod_fcgid  Process PHP détachés d'Apache  Connexions persistantes plus efficaces  Isolation mémoire (crashs) Communication par sockets  Contrôle fin sur la création des process  PHP-FPM (http://php-fpm.org) 16 novembre 2009 ALTERWAY - Apache pour développeur PHP 22
  • 23.
    PHP en FastCGI: configuration LoadModule fcgid_module modules/mod_fcgid.so addHandler fcgid-script .php httpd.conf MaxRequestsPerProcess 10000 <Directory /var/www> Options ExecCGI FcgiWrapper /usr/local/bin/php-fcgiwrapper </Directory> #!/bin/sh php-fcgiwrapper PHP_FCGI_MAX_REQUESTS=10000 export PHP_FCGI_MAX_REQUESTS exec /usr/local/bin/php-cgi  <php-sources>/sapi/cgi/README.FastCGI  http://httpd.apache.org/mod_fcgid/mod/mod_fcgid.html 16 novembre 2009 ALTERWAY - Apache pour développeur PHP 23
  • 24.
    Au secours, j'aiperdu mon php.ini ! 16 novembre 2009 ALTERWAY - Apache pour développeur PHP 24
  • 25.
    Spécifier manuellement php.ini via mod_php : PHPIniDir LoadModule php5_module modules/libphp5.so PHPIniDir /etc/php5/apache/php.ini  CGI : variable d'environnement PHPRC myphpcgi ScriptAlias /cgi /usr/bin/php/ #!/bin/sh <Directory /var/www> export PHPRC=/etc/php5/cgi addHandler php .php exec /usr/bin/php/php-cgi Action php /cgi/myphpcgi </Directory>  CGI : option de lancement "-c" myphpcgi #!/bin/sh exec /usr/bin/php/php-cgi -c /etc/php5/cgi/php.ini  CGI : variable env. sapi PHP_INI_SCAN_DIR (PHP>=5.2.7) 16 novembre 2009 ALTERWAY - Apache pour développeur PHP 25
  • 26.
    php.ini par défaut Si rien n'est précisé, la recherche s'effectue dans cet ordre : 1. Le dossier du binaire Apache (httpd) 2. Le DocumentRoot /! 3. Windows : Le registre puis le PATH système 4. le dossier renseigné via l'option de configuration --with-config-file-path ou --with-config-file-scan-dir  Il n'est pas conseillé de laisser le système choisir le php.ini  PHP sait démarrer sans aucun fichier php.ini  --with-config-file-scan-dir pratique pour éclater sa conf  php.ini actuellement utilisé ? => php_ini_loaded_file() (PHP 5.2.4) 16 novembre 2009 ALTERWAY - Apache pour développeur PHP 26
  • 27.
    Développer en PHPavec Apache tous les jours 16 novembre 2009 ALTERWAY - Apache pour développeur PHP 27
  • 28.
    HTTP  GET  Récupération d'une ressource (cachable)  POST  Création ou maj. d'une ressource via un script de traitement  PUT  Dépôt de données brutes, création ou mise à jour d'une ressource  DELETE (coule de source)  OPTIONS  Liste des méthodes supportées par le serveur web  TRACE  Traçage d'informations (rebonds de proxies)  HEAD  Informations sur une ressource 16 novembre 2009 ALTERWAY - Apache pour développeur PHP 28
  • 29.
    Apache et HTTP Apache sait tout gérer nativement sauf DELETE OPTIONS / HTTP/1.1 Host: localhost HTTP/1.1 200 OK Date: Fri, 18 Sep 2009 19:50:25 GMT Server: Apache/2.2.13 (Unix) PHP/5.2.11 Allow: GET,HEAD,POST,OPTIONS,TRACE,PUT Content-Length: 0 Content-Type: httpd/unix-directory  Apache reconnaît PUT  Mais a besoin d'aide pour l'utiliser  Traitement via programme externe (PHP ?) 16 novembre 2009 ALTERWAY - Apache pour développeur PHP 29
  • 30.
    Apache : méthodePUT  Script => activer la méthode PUT (entre autre...) Script PUT /put.php put.php <?php $file = basename($_SERVER['PATH_TRANSLATED']); $code = file_exists($file) ? 204 : 201; $uri = "http://".$_SERVER['SERVER_NAME'].$_SERVER['PATH_INFO']; $return = file_put_contents($file, file_get_contents("php://input")); $header = $return === false ? null : "Location: $url"; header($header, true, $code); 16 novembre 2009 ALTERWAY - Apache pour développeur PHP 30
  • 31.
    Apache : méthodePUT Script PUT /put.php PUT /foo HTTP/1.1 HTTP/1.1 201 Created host: afup Date: Fri, 18 Sep 2009 20:09:48 GMT Content-type: text/plain Server: Apache/2.2.13 (Unix) PHP/5.2.11 Content-Lenght: 14 X-Powered-By: PHP/5.2.11 Location: http://afup/foo hello from foo 16 novembre 2009 ALTERWAY - Apache pour développeur PHP 31
  • 32.
    Apache : Limit <Limit> : limite l'accès par méthodes HTTP  Concerne GET(HEAD), POST, PUT, DELETE, OPTIONS  Pour TRACE => TraceEnable DocumentRoot /var/www POST /some/path/file.txt HTTP/1.1 <Directory /var/www> Host: afup <Limit POST PUT> order allow,deny Deny from all </Limit> Order allow, deny Allow from all </Directory> HTTP/1.1 403 Forbidden 16 novembre 2009 ALTERWAY - Apache pour développeur PHP 32
  • 33.
    Apache : .htaccess  .htaccess, tout le monde connait  Permet d'ajouter des directives à la volée, par répertoire  Peut être renommé (directive AccessFileName)  Ralentit Apache ! 16 novembre 2009 ALTERWAY - Apache pour développeur PHP 33
  • 34.
    .htaccess autorisé ? AllowOverride ->directives que .htaccess sera autorisé à modifier  N'est valide que dans un conteneur <Directory> <Directory /> AllowOverride none ignore .htaccess dans tous les dossiers </Directory> Autorise .htaccess dans le dossier /var/www Il ne pourra rajouter que des options pour les droits <Directory /var/www> AllowOverride limit </Directory>  Par défaut AllowOverride = All  Enlever AllowOverride sur / -> économies de ressources (défaut)  Il est toujours mieux de ne pas utiliser .htaccess 16 novembre 2009 ALTERWAY - Apache pour développeur PHP 34
  • 35.
    PHP ou Apache?  PHP  Générer du contenu (sic!)  Gérer les en-têtes de ce contenu  Apache  Gérer HTTP  Gérer les couches basses (TCP, processus)  Gérer ... ce que PHP ne gère pas Mapping URI vers fichier sur le disque Authentification Permissions Type du fichier Génération de contenu (PHP) Réponse au client Stockage des erreurs (log) 16 novembre 2009 ALTERWAY - Apache pour développeur PHP 35
  • 36.
    Apache : quelquesexemples  Touche pas à mes images ! SetEnvIfNoCase Referer "^http://mysite.com/" good SetEnvIfNoCase Referer "^$" good SetEnvIfNoCase ^User-Agent$ .*(badbot|spider|attacker) !good <FilesMatch ".(png|jpg|jpeg|gif|bmp|swf|flv)$"> Order Deny,Allow Deny from all Allow from env=good ErrorDocument 403 "Voleur de bande passante" </FilesMatch>  Proposer la boite de dialogue "sauver sous" : AddType application/octet-stream .pdf .avi .mp4 16 novembre 2009 ALTERWAY - Apache pour développeur PHP 36
  • 37.
    Autorisations  Autorise certainesIP, identification (RFC2617)  "Ce site est en construction" : <Directory /var/www> AuthType basic AuthName "Ce site est en construction" AuthUserFile /.htpasswd Require valid-user Order Deny,Allow Deny from all Allow from 1.2.3.4/16 // mon parc Allow from googlebot.com // Google vient Satisfy Any </Directory> 16 novembre 2009 ALTERWAY - Apache pour développeur PHP 37
  • 38.
    Apache : gestiondu cache  mod_expires sait envoyer les en-têtes de cache  HTTP ?: http://julien-pauli.developpez.com/tutoriels/web/http/  mod_headers : contrôle manuel des en-têtes ExpiresActive On GET /page HTTP/1.1 ExpiresByType image/* "access plus 1 month" Host: afup ExpireDefault "modification plus 2 hours" HTTP/1.x 200 OK Date: Fri, 18 Sep 2009 18:44:18 GMT Server: Apache/2.2.13 (Unix) PHP/5.2.11 Cache-Control: max-age=7200 Expires: Sat, 19 Sep 2009 18:44:18 GMT Content-Length: 0 Content-Type: text/html; charset=ISO-8859-1 Content-Language: fr 16 novembre 2009 ALTERWAY - Apache pour développeur PHP 38
  • 39.
    Apache : gestiondu cache  ExpireDefault concerne aussi le contenu servi par PHP  sessions PHP? cache invalidé  Réglages dans php.ini ou avec session_cache_limiter() HTTP/1.x 200 OK Date: Fri, 18 Sep 2009 18:48:13 GMT Server: Apache/2.2.13 (Unix) PHP/5.2.11 <?php Expires: Thu, 19 Nov 1981 08:52:00 GMT session_start() Cache-Control: no-store, no-cache, must- revalidate, post-check=0, pre-check=0 Pragma: no-cache Content-Length: 3 Content-Type: text/html; charset=ISO-8859-1 Content-Language: fr 16 novembre 2009 ALTERWAY - Apache pour développeur PHP 39
  • 40.
    Apache : compression mod_deflate  Compresse / décompresse à la volée  Economisez de la bande passante / du temps de transfert AddOutputFilterByType DEFLATE text/* image/* 16 novembre 2009 ALTERWAY - Apache pour développeur PHP 40
  • 41.
    Les modules "exotiques" mod_bw Limitez la bande passante (dans les 2 sens)  mod_jsmin Minifiez vos js ou css à la volée avec un cache  mod_tidy Nettoyez votre (x)Html à la volée en sortie  mod_concat 1 seule requête qui concatène le résultat de X requêtes  mod_qos - mod_slotlimit Contrôler finement la qualité de service  mod_hitlog  Ajoutez un contenu à toutes vos pages ("include") 16 novembre 2009 ALTERWAY - Apache pour développeur PHP 41
  • 42.
    Merci, Question ?  http://julien-pauli.developpez.com 16 novembre 2009 ALTERWAY - Apache pour développeur PHP 42