Benutzer:Defel/nginxtut

Aus Piratenwiki
Wechseln zu: Navigation, Suche

Ausgangssystem


  • virtualisiertes Gast-System innerhalb KVM
  • mem: 768MB
  • Debian squeeze

Anforderung


  • Multiuser, es sollen mind. 2 unterschiedliche User laufen
  • chroot

Installationsanleitung

aptitude install nginx libxml2 gcc make
cd ~
mkdir src && cd src
wget http://downloads.php.net/stas/php-5.4.0RC2.tar.gz
tar xzvf php-5.4.0RC2.tar.gz
cd php-5.4.0RC2
./configure --enable-fpm
make && make install

Damit sollten alle notwendigen Pakete installiert sein.

Konfiguration

multi-user + chroot vorbereitung

Für das multi-user Feature brauchen wir mehrere User, klar, shell und homedir brauchen die nicht. Aber beide kommen in die www-data group.


useradd -g www-data -d /dev/null www1
useradd -g www-data -d /dev/null www2

Und es werden die htdocs-Ordner für beide User angelegt.


mkdir /var/www/www1
chown www1:www-data /var/www/www1
mkdir /var/www/www2
chown www2:www-data /var/www/www1

Lässt sich natürlich auf eine beliebige Zahl von Usern erweitern.


nginx


www-root ist

  • /var/www


Unterhalb dieses Ordners bekommt jeder User sein Homedir

  • /var/www/www1
  • /var/www/www2
  • ...


Wir binden user1.php auf einen php-fpm pool von www1, das gleiche analog für www2.


/etc/nginx/sites-enabled/default

server {

        listen   80; ## listen for ipv4
        listen   [::]:80 default ipv6only=on; ## listen for ipv6

        server_name  localhost;

        access_log  /var/log/nginx/localhost.access.log;

        location / {
                root   /var/www;
                index  index.html index.htm;
        }

        location ~ ^/user1.php
        {
                fastcgi_pass 127.0.0.1:9001;
                fastcgi_param SCRIPT_FILENAME $fastcgi_script_name;
                fastcgi_param PATH_INFO $fastcgi_script_name;
                include /etc/nginx/fastcgi_params;
        }
        location ~ ^/user2.php
        {
                fastcgi_pass 127.0.0.1:9002;
                fastcgi_param SCRIPT_FILENAME $fastcgi_script_name;
                fastcgi_param PATH_INFO $fastcgi_script_name;
                include /etc/nginx/fastcgi_params;
        }
}

php-fpm

Die php-fpm config ist in php5.4 eine .ini und keine .xml Datei, wie im Tutorial beschrieben.


[www1]
user = www1
group = www-data
listen = 127.0.0.1:9001
pm = dynamic
pm.max_children = 5
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3
chroot = /var/www/www1

[www2]
user = www2
group = www-data
listen = 127.0.0.1:9002
pm = dynamic
pm.max_children = 5
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3
chroot = /var/www/www2

Testskript


Ein kleines Testskript, welches pwd, Ordnerinhalt und Benutzer anzeigt.

<h1>User</h1>
<?php
echo $_SERVER['USER'];  
?>

<h1>Dir</h1>
<ul>
<?php

$d = dir('.');
while( false !== ($h = $d->read())) {
        echo '<li>' . $h . '</li>';  
}

?>
</ul>

<h1>realpath</h1>
<?php
echo realpath('.');
?>


Dieses Skript nach /var/www/www1/user1.php und /var/www/www2/user2.php kopieren.

run it

Ok, jetzt das ganze zum Laufen bekommen:

/usr/local/sbin/php-fpm
/etc/init.d/nginx restart


Überprüfen ob php-fpm läuft:

# netstat -nap | grep php-fpm
tcp        0      0 127.0.0.1:9001          0.0.0.0:*               LISTEN      29835/php-fpm.conf)
tcp        0      0 127.0.0.1:9002          0.0.0.0:*               LISTEN      29835/php-fpm.conf)
unix  3      [ ]         STREAM     CONNECTED     229990   29835/php-fpm.conf) 
unix  3      [ ]         STREAM     CONNECTED     229989   29835/php-fpm.conf) 

Test


Im Browser öffnen: http://nginx/user1.php
Ausgabe:

User
www1

Dir
.
..
user1.php

realpath
/


Im Browser öffnen: http://nginx/user2.php
Ausgabe:

User
www2

Dir
.
..
user2.php

realpath
/


Jay!