Forum Linux.debian/ubuntu Nginx, dossiers utilisateurs et PHP

Posté par  .
Étiquettes : aucune
0
13
juin
2011

Bon(jour|soir),

Je souhaite permettre aux utilisateurs d'un serveur d'exécuter du code PHP à l'aide de Nginx. Actuellement les dossiers utilisateurs sont gérés de la façon suivante :

location ~ ^/~(.+?)(/.*)?$ {
  alias /srv/www/users/$1/htdocs$2;
  index index.html;
}

Et PHP pour le serveur est géré de la façon suivante :

root /srv/www/htdocs
location ~ \.php(/|$) {
  try_files $uri = 404;

  fastcgi_split_path_info ^(.+\.php)(/.+)$;

  include fastcgi_params;
  fastcgi_index index.php;
  fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
  fastcgi_pass php;
}

Les deux fonctionnent très bien séparément. Vous constaterez que les fichiers du serveur et ceux des utilisateurs sont dans deux dossiers distincts. Le code PHP n'est donc pas exécuté dans les dossiers utilisateurs.

J'ai passé pas mal de temps sans grand succès à essayer de combiner les deux. Une idée de comment je pourrais réaliser cette prouesse ?

  • # en dupliquant...

    Posté par  . Évalué à 0.

    Je fais exactement ce que tu souhaites avec nginx. Pour cela, j'utilise deux directives location pour le répertoire utilisateur :

    location ~ ^/~([^/]+)/(.+\.php)$ {
        if (!-f /home/$1/public_html/$2) {
            rewrite ^ 404;
        }
        alias /home/$1/public_html/$2;
        include fastcgi_params;
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $request_filename;
    }
    
    location ~ ^/~([^/]+)(/.*)?$ {
        alias /home/$1/public_html$2;
        index index.html index.htm;
        autoindex on;
    }
    

    Note que j'utilise spawn-fcgi sur le port 9000 pour gérer le PHP, mais ça n'a probablement rien à voir.

    • [^] # Re: en dupliquant...

      Posté par  . Évalué à 2.

      Mis à part la ligne fastcgi_param SCRIPT_FILENAME $request_filename; c'est ce que j'avais essayé. Je ne sais pas si c'est dû à PHP-FPM mais j'ai repris exactement ce que tu as mis mais ça ne marche toujours pas.

      Saurais-tu si je peux demander à Nginx d'afficher dans les logs (ou autre part) le fichiers qu'il passe au processus FastCGI ?

  • # location

    Posté par  (site web personnel) . Évalué à 0.

    Bonsoir,

    Ce qu'il faut bien comprendre c'est que dans nginx, chaque "location" est indépendante des autres, si tu veux que le code php soit exécuté, il faut faut le définir dans chaque "location" de la façon suivante :

    location ~ ^/~(.+?)(/.*)?.php$ {
    alias /srv/www/users/$1/htdocs$2;
    include fastcgi_params;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_pass php;
    }

    J'ai réalisé plusieurs exemples sur mon blog http://www.it-wars.com qui utilise nginx :)
    A+

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.