Nachdem ja wie angekündigt in PHP 5.3.3 FPM fest integriert ist, habe ich also meinen Server umgestellt. PHP 5.3.3 herunterladen und dann geht irgendwie alles nach Standardprozedur ... tar xvfz php-5.3.3.tar.gz cd php-5.3.3 ./configure --prefix=/usr/local --sysconfdir=/etc/php --enable-fpm --with-mcrypt --with-zlib --enable-mbstring --with-curl --disable-debug --disable-rpath --enable-inline-optimization --with-bz2 --with-zlib --enable-sockets --enable-sysvsem --enable-sysvshm --enable-pcntl --enable-mbregex --with-mhash --with-xsl --with-pcre-regex --with-mysqli --with-mysql --enable-exif --with-gd --with-ldap --with-pdo-mysql --with-bz2 --with-t1lib --with-jpeg-dir=/usr --with-png-dir=/usr --with-gettext make make install Die notwendigen Anpassungen an der php-fpm.conf sind äquivalent eines gepatchten 5.2. Gestartet wird der FPM Prozess dann über: /usr/local/sbin/php-fpm Was auffällt, das keine pear und pecl bei der Installation dabei sind. Ich habs dann irgendwie doch noch von Hand nachinstalliert bekommen. cd pear/ phar install-pear-nozlib.phar php fetch.php make install-su phar go-pear.phar phar extract -f go-pear.phar
Nginx auf Debian installieren / compilieren Version 0.8.50
Nachdem Nginx 0.7.65 recht erfolgreich auf meinem Server läuft, hab ich mich mal an der Version 0.8.50 versucht.
Das ganze wieder nach bewährtem Schema aus
Nginx auf Debian installieren / compilieren
cd /usr/src wget http://nginx.org/download/nginx-0.8.50.tar.gz tar xvfz nginx-0.8.50.tar.gz cd nginx-0.8.50 ./configure --prefix=/usr \ --conf-path=/etc/nginx/nginx.conf \ --sbin-path=/usr/sbin \ --user=www-data \ --group=www-data \ --http-log-path=/var/log/nginx/access.log \ --without-mail_pop3_module \ --without-mail_imap_module \ --without-mail_smtp_module \ --with-http_ssl_module \ --with-http_stub_status_module \ --with-http_gzip_static_module \ --with-http_addition_module \ --with-http_image_filter_module \ --with-file-aio \ --add-module=/usr/src/headers-more-nginx-module/ make make install /etc/init.d/nginx restart
Schon war ich auf der neuen Version.
Wer aufgepasst hat, bemerkt, das ich ein paar neue configure Parameter benutze:
--with-http_image_filter_module
entfernt aus Image Dateien die EXIF informationen, wenn diese mehr als 5% der Dateigrösse ausmachen. Ich hab schonmal 30kb Information in Icons gefunden.
--with-file-aio
aktuelle Linux Kernel können es, warum nicht benutzen? (OK, ist jetzt keine wirkliche Erklärung)
Das wichtigste:
--add-module=/usr/src/headers-more-nginx-module/
Ein Blick in den Firebug zeigt im Header, das Nginx braf seine Releasenummer mit überträgt.
Ich bin kein Freund davon, unnötige Informationen über die Software und Versionen Preis zu geben. Schon garnicht an Bots und Spider!
Unter http://wiki.nginx.org/NginxHttpHeadersMoreModule gibt es ein Modul, um einen belibige Felder im Header zu überschreiben/setzen. Den Sourcecode gibts auf Github.
http://github.com/agentzh/headers-more-nginx-module
cd /usr/src
git clone http://github.com/agentzh/headers-more-nginx-module.git headers-more-nginx-module
In der /etc/nginx/nginx.conf wird dann im „http“ Abschnitt das zu setzende Headerfeld angegeben:
more_set_headers 'Server: nginx';
Wer will, kann sich hier auch als Apache tarnen 😉
Nginx, PHP-FPM und WordPress auf Debian Lenny
Nachdem unser Nginx nun statischen Content ausliefern kann, kommen wir heute zum Thema PHP.
Realisiert wird das ganze über FastCGI mit PHP-FPM
also runterladen und patchen:
cd /usr/local/src wget http://de.php.net/get/php-5.2.13.tar.gz/from/this/mirror tar xvfz php-5.2.13.tar.gz wget http://php-fpm.org/downloads/php-5.2.13-fpm-0.5.13.diff.gz gzip -d php-5.2.13-fpm-0.5.13.diff.gz patch -p1 -d php-5.2.13 < php-5.2.13-fpm-0.5.13.diff
So. Jetzt nur noch php compilieren *g*
cd php-5.2.13
./configure --enable-fastcgi --enable-fpm --with-mcrypt --with-zlib --enable-mbstring --with-curl --disable-debug --disable-rpath --enable-inline-optimization --with-bz2 --with-zlib --enable-sockets --enable-sysvsem --enable-sysvshm --enable-pcntl --enable-mbregex --with-mhash --with-xsl --with-pcre-regex --with-mysqli --with-mysql --enable-exif --with-gd --with-ldap --with-pdo-mysql --with-bz2 --with-ttf --with-t1lib --with-jpeg-dir=/usr --with-png-dir=/usr --with-gettext
make
make install
Wenn Configure mit fehlenden Librarrys abbricht, die entsprechenden „-dev“ Pakete suchen und installieren.
z.B.
apt-cache search libjpeg
apt-get install libjpeg62-dev
Unsere php.ini liegt dann unter „/usr/local/lib/php.ini“ Hier müssen wir die üblichen Anpassungen vornehmen, besonders das „extension_dir“ anpassen!
In der Datei „/usr/local/etc/php-fpm.conf“ ist dann an 4 Stellen als User/Gruppe „www-data“ einzutragen.
Dann lässt sich der FCGI Prozessmanager starten:
/usr/local/sbin/php-fpm start
Jetzt müssen wir unserem Nginx sagen, was er mit .php Datein machen soll und fertig sind wir.
location ~ (.*)\.php$ {
fastcgi_pass localhost:9000; # port where FastCGI processes were spawned
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /var/www$fastcgi_script_name; # same path as above
fastcgi_param QUERY_STRING $query_string;
fastcgi_param REQUEST_METHOD $request_method;
fastcgi_param CONTENT_TYPE $content_type;
fastcgi_param CONTENT_LENGTH $content_length;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
fastcgi_param REQUEST_URI $request_uri;
fastcgi_param DOCUMENT_URI $document_uri;
fastcgi_param DOCUMENT_ROOT $document_root;
fastcgi_param SERVER_PROTOCOL $server_protocol;
fastcgi_param GATEWAY_INTERFACE CGI/1.1;
fastcgi_param SERVER_SOFTWARE nginx/$nginx_version;
fastcgi_param REMOTE_ADDR $remote_addr;
fastcgi_param REMOTE_PORT $remote_port;
fastcgi_param SERVER_ADDR $server_addr;
fastcgi_param SERVER_PORT $server_port;
fastcgi_param SERVER_NAME $server_name;
# required if PHP was built with --enable-force-cgi-redirect
fastcgi_param REDIRECT_STATUS 200;
}
Nginx neu starten und schon sollten Php-Scripte ausgeführt werden. Am besten probiert man das mit einer kleinen phpinfo.php
Wer das WordPress als root des Nginx angelegt hat, braucht nur das Rewrite für die „/“ Location anpassen:
if (!-e $request_filename) {
rewrite ^(.+)$ /index.php?q=$1 last;
}
Dumm nur, wenn man das WordPress in einem Unterverzeichniss hat z.B. „/blog/“, aber auch das kann man einfach lösen:
location /blog {
root /var/www;
index index.php;
if (-f $request_filename) {
break;
}
if (!-e $request_filename) {
rewrite ^(.+)$ /blog/index.php?$1 last;}
}
Quellen:
http://n3m0.net/blog/2010/04/03/php-fpm-auf-debian-5-0-lenny/
http://elasticdog.com/2008/02/howto-install-wordpress-on-nginx/
Nginx auf Debian installieren / compilieren
Ich habe auch mal mit Nginx experiementiert und versuche greade meinen Server vom Apache umzustellen.
Für die Bequemen - Nginx unter Debian installieren: apt-get install nginx
und für alle die gern die aktuelle Version haben geht es dann weiter:
apt-get remove nginx
echo "nginx hold" | dpkg --set-selections
so haben wir schon mal das Initscript und diverse Verzeichnisse und Debian versucht nicht mehr das Paket zu aktualisieren/installieren.
cd /usr/src
wget http://nginx.org/download/nginx-0.7.65.tar.gz
tar xvfz nginx-0.7.65.tar.gz
cd nginx-0.7.65
./configure --prefix=/usr --conf-path=/etc/nginx/nginx.conf --sbin-path=/usr/sbin --user=www-data --group=www-data --http-log-path=/var/log/nginx/access.log --without-mail_pop3_module --without-mail_imap_module --without-mail_smtp_module --with-http_ssl_module --with-http_stub_status_module --with-http_gzip_static_module
make && make install
dazu noch im Verzeichniss /etc/nginx/ die Datei nginx.conf anpassen (vorher die alte Datei umbenennen und neu anlegen!)
user www-data;
worker_processes 4;
error_log /var/log/nginx/error.log;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
keepalive_timeout 10 10;
gzip on;
gzip_comp_level 6;
gzip_proxied any;
gzip_types text/plain text/css application/x-javascript text/xml application/xml application/xml+rss text/javascript;
server {
listen *:80;
server_name www.sturbi.de;
root /var/www;
location / {
root /var/www;
index index.php;
}
}
server {
listen 443;
ssl on;
ssl_certificate /etc/ssl/certs/www.sturbi.de.pem;
ssl_certificate_key /etc/ssl/private/www.sturbi.de.key;
server_name www.sturbi.de;
location / {
root /var/www;
index index.html;
}
}
}
/etc/init.d/nginx start
und nginx sollte unseren Statischen Content wieder ausliefern.
und morgen basteln wir uns ein PHP-FPM und richten WordPress ein.