Benutzer:Defel/nginxtut
Inhaltsverzeichnis
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!
www-root ist
Unterhalb dieses Ordners bekommt jeder User sein Homedir
Ausgabe:
Ausgabe: