Raspberry Pi : installer Nginx avec support PHP, CGI et SCGI

Il est maintenant temps d’installer un serveur Web pour différents services comme du monitoring, du téléchargement, Owncloud ou un serveur de musique. C’est ce que nous allons voir avec la mise en place de NGinx.

Raspberry Pi Home Server – Etape 11 : installer Nginx avec support PHP, CGI et SCGI

Pour notre serveur Web, le but est d’avoir un support de différentes technologies pour ne pas être limité. En plus de Nginx, on va installer php-fpm, fcgiwrap et le support SCGI (pour l’interface web de rtorrent). Depuis la version 0.8.42, le module SCGI est inclus donc pas besoin de tout recompiler (ouf !)

Pour ceux qui veulent un comparatif des différents serveurs web, vous pouvez regarder l’article ici.

  1. Installer les packages additionnels
    apt-get install php5-fpm libgd2-xpm libpcrecpp0 libxpm4
  2. Installer Nginx
    apt-get install nginx
  3. Créer le répertoire /var/www
    mkdir /var/www
    
    chown -R www-data:www-data /var/www
  4. Créer un fichier index.php dans /var/www avec le contenu suivant :
    <?php
    
     phpinfo();
    
    ?>
  5. Modifier le fichier /etc/nginx/sites-available/default en remplaçant les anciennes valeurs par celle de votre configuration. Ici par exemple :

    root /var/www;

    index index.php index.html index.htm;

    location ~ .php$ {

    fastcgi_pass unix:/var/run/php5-fpm.sock;

    fastcgi_index index.php;

    include fastcgi_params;

    }

  6. Redémarrer le serveur
    service nginx restart
  7. Un petit tour depuis votre navigateur sur l’IP de votre serveur et vous aurez le résultat suivant

    Affichage d'un fichier PHP avec Nginx

    Affichage d’un fichier PHP avec Nginx

  8. Installer le wrapper CGI si vous avez besoin d’exécuter des scripts CGI sur votre serveur
    apt-get install fcgiwrap
  9. Réduire le nombre de processus PHP et CGI pour libérer de la mémoire
    1. Modifier le fichier /etc/php5/fpm/php-fpm.conf
      process.max = 2
    2. Modifier le nombre maximum de processus. Dans mon cas je ne vais pas avoir des dizaines de connexions donc dans le fichier /etc/nginx/nginx.conf :
      worker_processes 1
  10. Relancer les différents service
    service nginx restart
    
    service php5-fpm restart

    Si vous avez installé le wrapper CGI :

    service fcgiwrap restart

Voilà pour le serveur web en configuration de base.

Vous aimerez peut être aussi...

  • Super boulot tous ces tutos !

    Je me suis permis de faire une news sur mon blog pour les faire connaître, ils le méritent.

    • Merci beaucoup pour la news !!! C’est vraiment sympa 😉

  • Sudo

    Oui merci pour tous ces excellents tutos ! 🙂

    J’ai entendu parlé ( et suis entrain de tester ) un serveur apparement encore plus light que Nginx ou lighttpd sur Rpi, peu être que cela pourrait t’intéresser, il s’agit de Pancake :

    http://pancakehttp.net/

    J’ai également mis un lien vers ton blog à partir du mien 😉

    @+

    • Genial pour pancake je vais aller voir ca. Il faut juste pouvoir s y connecter avec scgi pour l acces à rtorrent. Sinon je vais devoir trouver un autre logiciel 🙂
      Et je dois faire une blogroll 🙂

  • arno

    Coquille :

    Il faut lire « service php5-fpm restart » à l’étape 10 !

    Une chance d’avoir un tuto pour intégrer mysql à nginx ? (oui, je sais, mysql c’est lourd !)

    • C’est corrigé, merci.
      Pour MySql, effectivement, vu le poids ça n’est pas prévu pour le moment. Maintenant une fois les étapes pour le Raspberry Pi Home Server terminées, je pourrais toujours faire des essais basés sur vos suggestions 😉

  • Bonjour, Je me permet de commenter cet article pour vous demander si il serai possible d’avoir un tuto pour l’installation d’un chat avec nginx, j’ai regardé du coter de phpfreechat qui à l’air pas mal mais j’ai du mal avec sa configuration!

    merci!

  • Jordan

    Bonjour,

    J’arrive à créer le serveur, et à y accèder depuis l’interface graphique du pi, mais impossible depuis un autre PC en réseau local… Une idée de comment résoudre ce problème ?

    Merci 😉

    • Salut,
      Le Raspberry est bien accessible depuis l’autre PC ? Genre ping ou ssh ? Pas de blocage de port via le routeur ?

  • Tef

    Bonjour,

    après des tests sur plusieurs cms et des recherches infructueuses sur le net, J’ai une question :

    Comment fait-on pour activer le smtp? (ou le paramétrer si il y est déjà)

    Car chez moi impossible de faire fonctionner les formulaire de contact, mails de notifications, newsletter, etc…

    Merci

    • Bonjour,
      Dans WordPress (que je connais le mieux) il faut dans les paramètres email mettre un serveur SMTP avec le login et mot de passe pour pouvoir l’utiliser. Après ça fonctionne « tout seul » 🙂

  • Tef

    Merci pour ta réponse,

    a priori mon problème viendrait plus du côté de nginx/php sur le raspberry que des cms, je les ai testé chez mon hébergeur et je n’ai pas eu de problème avec l’envoie de mails (effectivement ça fonctionne « tout seul »), mais depuis le raspberry ça marche pas.

    J’ai déjà ouvert le port 25 sur la box, je crois que c’est celui utilisé pour le smtp.

    • Si tu es chez Free, par défaut l’utilisation de SMTP depuis le réseau local est bloqué. Il faut modifier dans l’interface Free. C’est peut être aussi valable chez d’autres opérateurs.

  • Salut !

    Merci pour tout ce travail !

    Je m’apprête à suivre ton tuto et je me demandais si depuis la date de sa rédaction, il était toujours d’actualité ? (paquets à ajouter ? etc)

    • (Détail au cas où : je suis sur Raspbian et non sur Arch)

    • Salut,
      La configuration de Nginx sous Raspbian fonctionne toujours (je m’en sers souvent en point de départ de tutos)

  • Damien

    Salut, le point 5 n’est pas super clair sur ce qu’il faut faire exactement avec le fichier. J’ai fini par modifier les lignes root et index et décommenter les lignes php pour que ça fonctionne.

    Au départ je ne savais pas quoi faire du fichier, si’il fallait remplacer complètement son contenu (ce qui est conseillé dans le fichier lui-même), ajouter ces lignes à la fin ou autre chose.

  • dams1710

    bonjour et bravo pour tes tutos que je m’amuse a suivre depuis l’obtention de mon rpi….
    aujourd’hui j’ai un petit soucis, une fois le tuto fini quand je tape l’adresse ip de mon rpi je tombe sur une magnifique 403 forbidden!
    je pense que c’est un soucis de droit sur les ou le fichier www mais j’arrive pas a trouve la solution, un peu d’aide serait bienvenue pour que je comprenne ce que j’ai mal ou pas bien fait!
    merci

    • dams1710

      Petite précision si je tape « l’ip_rpi /index.php » ca marche j’ai la page info php qui s’affiche!

      • Salut,
        Est-ce que la ligne index de la configuration du serveur contient bien la valeur index.php ?

        • dams1710

          déjà merci pour ta réponse rapide, alors en faite j’avais bien modifier le fichier default pour y ajouter indexphp, j’avais donc tout simplement oublié le « . » entre index et php comme quoi c’est utile de se relire!
          merci en tout cas!

  • yukora

    salut chris

    j’ai un petit probleme de dépot je crois

    voila se que j ai quand je lance la commande : apt-get install php5-fpm

    Reading package lists… Done
    Building dependency tree
    Reading state information… Done
    The following extra packages will be installed:
    libonig2 libqdbm14 php5-common
    Suggested packages:
    php-pear
    The following NEW packages will be installed:
    libonig2 libqdbm14 php5-common php5-fpm
    0 upgraded, 4 newly installed, 0 to remove and 0 not upgraded.
    Need to get 3,045 kB/3,294 kB of archives.
    After this operation, 8,820 kB of additional disk space will be used.
    Do you want to continue [Y/n]? y
    Err http://mirrordirector.raspbian.org/raspbian/ wheezy/main php5-common armhf 5.4.4-14+deb7u3
    404 Not Found
    Err http://mirrordirector.raspbian.org/raspbian/ wheezy/main php5-fpm armhf 5.4.4-14+deb7u3
    404 Not Found
    Failed to fetch http://mirrordirector.raspbian.org/raspbian/pool/main/p/php5/php5-common_5.4.4-14+deb7u3_armhf.deb 404 Not Found
    Failed to fetch http://mirrordirector.raspbian.org/raspbian/pool/main/p/php5/php5-fpm_5.4.4-14+deb7u3_armhf.deb 404 Not Found
    E: Unable to fetch some archives, maybe run apt-get update or try with –fix-missing?

    • Salut,
      as tu essayé de lancer la commande apt-get update avant pour mettre à jour la liste des dépôts?

      • yukora

        malheureusement oui ;(

        • Unable to fetch some archives, maybe run apt-get update or try with –fix-missing?
          Essayes peut etre alors avec l’option –fix-missing ….

          • yukora

            ça n a pas fonctionné mais j ai réussi avec la commande suivante :
            apt-get update && apt-get install –fix-missing php5-fpm

            peu être que mon apt-get update tout seul fonctionnait mal

            merci de ton aide

            j ai parcouru ton blog il est vraiment sympa

  • camille fwix

    Bonjour,

    il me semble que la section php du fichier de conf nginx devrait ressembler à ceci:
    location ~ [^/].php(/|$) {
    fastcgi_split_path_info ^(.+?.php)(/.*)$;
    if (!-f $document_root$fastcgi_script_name) {
    return 404;
    }
    fastcgi_pass unix:/var/run/php5-fpmr .sock;
    fastcgi_index index.php;
    include fastcgi_params;
    }

    le test « if (!-f $document_root$fastcgi_script_name) » est important du point de vue de la sécurité voir http://wiki.nginx.org/Pitfalls et http://wiki.nginx.org/PHPFcgiExample

    • Merci pour l’info. Je suis sur un article d’optimisation et de sécurisation de Nginx. Ca va aider 😉

  • Pierre

    Bonjour,

    Tout d’abord, merci beaucoup pour tout ton travail qui fait envie et qui permet à des débutants (comme moi) de se lancer dans l’aventure!

    J’ai tout de même un petit problème que j’ai du mal à comprendre :
    lorsque je relance nginx (étape 6), il me renvoie « [emerg] unknow directive « root/var/www » in /etc/nginx/sites-enabled/default:24″.
    J’arrive pourtant a consulter ce répertoire « /var/www » et à voir le fichier « index.php » que j’ai créé avec la commande ls.

    Bien cordialement,
    Pierre

    • Salut,
      Il manque un espace entre root et /var/www si j’en crois ton message

      • Pierre

        Merci beaucoup! c’était effectivement bien ça! Je n’ai pas encore l’œil bien formaté pour linux…

  • Nicolas

    Bonsoir,

    Une fois ces étapes effectuées, le domaine NO-IP créé à l’étape 7 est-il censé afficher la page PHP ?

    J’ai suivi toutes tes étapes et mon adresse no-ip.org continue à afficher l’interface de ma Livebox (le ping vers le domaine retourne néanmoins l’adresse de la box).

    Peut être est ce ma redirection de ports qui ne fonctionne pas. En voici les paramètres :

    Application / Service : inadyn
    Port externe : 8090
    Port interne : 8090
    Protocole : TCP
    Equipement : raspberrypi

    Merci encore pour tes tutoriels et ton aide,
    Cordialement,

    Nicolas

    • Je ne connais pas les live box mais peut être que dans la zone de destination il vaut mieux mettre une ip qu’un nom

      • Nicolas

        La Livebox ne nous laisse pas le choix et nous propose un menu déroulant des appareils qui se sont déjà connectés au réseau.

        Je vais regarder ça plus en détail.
        Merci !

        • Question bête : tu accèdes bien via http://:8090/ ?
          Et en interne http://
          :8090 affiche bien ce qu’il faut ?

          • Nicolas

            Non, justement cela ne fonctionne pas non plus. J’affiche bien la page PHP avec http://addresseIP_Pi:8090 mais pas directement avec http://:8090.

            A noter que dans le fichier /etc/nginx/sites-available/default, j’ai modifié la ligne suivante :
            listen 8090;

            En réalité, je me demande si cela ne vient pas de la Livebox, qui ne permet pas de mettre en évidence le NAT à partir du réseau local…

  • Tony

    Bonjour,
    Je me lance sur ce tuto, et je rencontre un problème au point numéro 7. Quand je tape l’adresse IP privé de Raspberry, j’obtiens le résultat suivant : 404 Not Found
    Si je saisie l’adresse IP /index.php , j’obtiens : File not found.
    Le fichier /var/log/nginx/error.log indique : [error] 19746#0: *5 « /var/wwww/index.php » is not found (2: No such file or directory).
    J’ai bien cherché mais je n’arrive pas à me sortir de ce pas. Je pense que mon fichier etc/nginx/sites-available/default doit comporter une ou plusieurs erreurs.
    Est-il possible d’avoir un peu d’aide ?
    Merci d’avance

    Cordialement,

    Tony

    Ci dessous mon fichier default :
    root@raspberrypi:/etc/nginx/sites-available# cat default
    # You may add here your
    # server {
    # …
    # }
    # statements for each of your virtual hosts to this file

    ##
    # You should look at the following URL’s in order to grasp a solid understanding
    # of Nginx configuration files in order to fully unleash the power of Nginx.
    # http://wiki.nginx.org/Pitfalls
    # http://wiki.nginx.org/QuickStart
    # http://wiki.nginx.org/Configuration
    #
    # Generally, you will want to move this file somewhere, and start with a clean
    # file but keep this around for reference. Or just disable in sites-enabled.
    #
    # Please see /usr/share/doc/nginx-doc/examples/ for more detailed examples.
    ##

    server {
    #listen 80; ## listen for ipv4; this line is default and implied
    #listen [::]:80 default_server ipv6only=on; ## listen for ipv6

    #root /usr/share/nginx/www;
    root /var/wwww;

    index index.php index.html index.htm;

    # Make site accessible from http://localhost/
    server_name localhost;

    location / {
    # First attempt to serve request as file, then
    # as directory, then fall back to displaying a 404.
    #try_files $uri $uri/ /index.html;
    # Uncomment to enable naxsi on this location
    # include /etc/nginx/naxsi.rules
    }

    location /doc/ {
    alias /usr/share/doc/;
    autoindex on;
    allow 127.0.0.1;
    allow ::1;
    deny all;
    }

    # Only for nginx-naxsi used with nginx-naxsi-ui : process denied requests
    #location /RequestDenied {
    # proxy_pass http://127.0.0.1:8080;
    #}

    #error_page 404 /404.html;

    # redirect server error pages to the static page /50x.html
    #
    #error_page 500 502 503 504 /50x.html;
    #location = /50x.html {
    # root /usr/share/nginx/www;
    #}

    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    #
    location ~ \.php$ {
    # fastcgi_split_path_info ^(.+\.php)(/.+)$;
    # # NOTE: You should have « cgi.fix_pathinfo = 0; » in php.ini
    #
    # # With php5-cgi alone:
    # fastcgi_pass 127.0.0.1:9000;
    # # With php5-fpm:
    fastcgi_pass unix:/var/run/php5-fpm.sock;
    fastcgi_index index.php;
    include fastcgi_params;
    }

    # deny access to .htaccess files, if Apache’s document root
    # concurs with nginx’s one
    #
    #location ~ /\.ht {
    # deny all;
    #}
    }

    # another virtual host using mix of IP-, name-, and port-based configuration
    #
    #server {
    # listen 8000;
    # listen somename:8080;
    # server_name somename alias another.alias;
    # root html;
    # index index.html index.htm;
    #
    # location / {
    # try_files $uri $uri/ =404;
    # }
    #}

    # HTTPS server
    #
    #server {
    # listen 443;
    # server_name localhost;
    #
    # root html;
    # index index.html index.htm;
    #
    # ssl on;
    # ssl_certificate cert.pem;
    # ssl_certificate_key cert.key;
    #
    # ssl_session_timeout 5m;
    #
    # ssl_protocols SSLv3 TLSv1;
    # ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv3:+EXP;
    # ssl_prefer_server_ciphers on;
    #
    # location / {
    # try_files $uri $uri/ =404;
    # }
    #}

    • Salut
      Y a 4 fois w dans le répertoire root (/var/wwww) c’est normal ?

      • Tony

        Merci pour ton aide et ton oeil avisé, avec 3 fois www c’est mieux.

  • theo

    Bonjour,

    J’ai un petit problème je suis bloqué à l’étape 7, je ne tombe pas sur cette page. J’ai bien tapé http://xxx.xxx.x.xx/index.php, mais Firefox me propose juste d’enregistrer un fichier php. J’ai pourtant relu les posts à ce sujet, je ne trouve pas la cause du problème

    voici le fichier /etc/nginx/sites-available/default

    root@raspberrypi:~# nano /etc/nginx/sites-available/default
    GNU nano 2.2.6 File: /etc/nginx/sites-available/default

    # You may add here your
    # server {
    # …
    # }
    # statements for each of your virtual hosts to this file

    ##
    # You should look at the following URL’s in order to grasp a solid understanding
    # of Nginx configuration files in order to fully unleash the power of Nginx.
    # http://wiki.nginx.org/Pitfalls
    # http://wiki.nginx.org/QuickStart
    # http://wiki.nginx.org/Configuration
    #
    # Generally, you will want to move this file somewhere, and start with a clean
    # file but keep this around for reference. Or just disable in sites-enabled.
    #
    # Please see /usr/share/doc/nginx-doc/examples/ for more detailed examples.
    ##

    server {
    #listen 80; ## listen for ipv4; this line is default and implied
    #listen [::]:80 default_server ipv6only=on; ## listen for ipv6

    #root /usr/share/nginx/www;
    root /var/www;
    index index.php index.html index.htm;

    # Make site accessible from http://localhost/
    server_name localhost;

    location / {
    # First attempt to serve request as file, then
    # as directory, then fall back to displaying a 404.
    try_files $uri $uri/ /index.html;
    # Uncomment to enable naxsi on this location
    # include /etc/nginx/naxsi.rules
    }

    location /doc/ {
    alias /usr/share/doc/;
    autoindex on;
    allow 127.0.0.1;
    allow ::1;
    deny all;
    }

    # Only for nginx-naxsi used with nginx-naxsi-ui : process denied requests
    #location /RequestDenied {
    # proxy_pass http://127.0.0.1:8080;
    #}

    #error_page 404 /404.html;

    # redirect server error pages to the static page /50x.html
    #
    #error_page 500 502 503 504 /50x.html;
    #location = /50x.html {
    # root /usr/share/nginx/www;
    #}

    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    #
    #location ~ \.php$ {
    # fastcgi_split_path_info ^(.+\.php)(/.+)$;
    # # NOTE: You should have « cgi.fix_pathinfo = 0; » in php.ini
    #
    # # With php5-cgi alone:
    # fastcgi_pass 127.0.0.1:9000;
    # # With php5-fpm:
    # fastcgi_pass unix:/var/run/php5-fpm.sock;
    # fastcgi_index index.php;
    # include fastcgi_params;
    #}

    # deny access to .htaccess files, if Apache’s document root
    # concurs with nginx’s one
    #
    #location ~ /\.ht {
    # deny all;
    #}
    }

    # another virtual host using mix of IP-, name-, and port-based configuration
    #
    #server {
    # listen somename:8080;
    # server_name somename alias another.alias;
    # root html;
    # index index.html index.htm;
    #
    # location / {
    # try_files $uri $uri/ =404;
    # }
    #}

    # HTTPS server
    #
    #server {
    # listen 443;
    # server_name localhost;
    #
    # root html;
    # index index.html index.htm;
    #
    # ssl on;
    # ssl_certificate cert.pem;
    # ssl_certificate_key cert.key;
    #
    # ssl_session_timeout 5m;
    #
    # ssl_protocols SSLv3 TLSv1;
    # ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv3:+EXP;
    # ssl_prefer_server_ciphers on;
    #
    # location / {
    # try_files $uri $uri/ =404;
    # }
    #}

    quand je ressaye dans IE, j’obtiens le contenu du fichier /var/www/index.php

  • Sébastien Mougel

    celui ci aussi n’apparait pas nomplu…