nginx und PHP5 mit fastCGI installieren

fehlt wasgeht sogutsehr guthat geholfen (No Ratings Yet)
Loading ... Loading ...
Werbung




nginx ist ein sehr schmaler und schneller Webserver. Viele große Seiten setzen diesen Webserver ein, wenn es darum geht, schnell Daten auszuliefern. Der Server hat allerdings, wie Apache auch, PHP nicht eingebaut. Bei Apache kann PHP als Modul nachgeladen werden, auch das funktioniert bei nginx nicht. Nginx bietet allerdings die Möglichkeit, PHP Sourcen an einen Compiler zu übergeben und das Ergebnis auszugeben.

nginx installieren

Zunächst muss nginx installiert werden. Eigentlich recht einfach über das Debian Repository

# aptitude install nginx

Nun muss die PHP Umgebung installiert werden

# aptitude install php5-cgi php5-mysql php5-curl  php5-imagick php5-mcrypt php5-memcache php5-mhash php5-ming php5-pspell php5-recode php5-snmp  php5-xmlrpc php5-xsl

Hier wird einiges von PHP installiert, man sollte sich vorher ansehen, ob alles gebraucht wird.

Als letztes muss noch ein Processor installiert werden, der zwischen nginx und PHP kommuniziert:

# aptitude install spawn-fcgi

Als nächstes kann die nginx.conf angepasst werden, /etc/nginx/nginx.conf

user www-data;
worker_processes  5;

error_log  /var/log/nginx/error.log;
pid        /var/run/nginx.pid;

events {
worker_connections 2048;
use epoll;
multi_accept on;
}

http {
server_tokens off;
server_names_hash_bucket_size 64;

client_max_body_size        10M;
client_header_buffer_size   32k;
client_body_buffer_size     128k;
large_client_header_buffers 64 8k;

client_body_timeout   3m;
client_header_timeout 3m;
send_timeout          3m;
keepalive_timeout     2;

ignore_invalid_headers   on;
keepalive_requests       100;
limit_zone normal $binary_remote_addr 5m;
recursive_error_pages    on;
sendfile                 on;
server_name_in_redirect  off;
server_names_hash_max_size 512;
set_real_ip_from 127.0.0.1;
real_ip_header X-Forwarded-For;

tcp_nopush on;
tcp_nodelay off;

include /etc/nginx/mime.types;
default_type application/octet-stream;
access_log /var/log/nginx/access.log;
log_format main '$remote_addr - $remote_user [$time_local] $status ' '\"$request\" $body_bytes_sent \"$http_referer\" ' '\"$http_user_agent\" \"http_x_forwarded_for\"';

gzip              on;
gzip_static       on;
gzip_disable      "MSIE [1-6]\.";
gzip_buffers      32 8k;
gzip_comp_level   5;
gzip_http_version 1.0;
gzip_min_length   0;
gzip_proxied      any;
gzip_types text/plain text/css text/xml text/javascript application/json application/xml application/xml+rss application/x-javascript image/x-icon application/x-perl application/x-httpd-cgi;
gzip_vary         on;

output_buffers   10 128k;
postpone_output  1500;

include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
}

Dies ist nur eine Beispiel-Konfiguration, die aber funktioniert.

Weiterhin ein vhost, /etc/nginx/sites-available/www.domain.tld

server {
 listen   80;
 server_name  www.domain.tld;

access_log  /var/log/nginx/www.domain.tld.access.log;

root   /var/www/domain.tld;

location / {
 index  index.php;
 }

location ~ \.php$ {
 fastcgi_pass   127.0.0.1:9000;
 fastcgi_index  index.php;
 fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
 include        fastcgi_params;
 }

location = /favicon.ico {
 log_not_found off;
 access_log off;
 }

location = /robots.txt {
 allow all;
 log_not_found off;
 access_log off;
 }

location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
 expires max;
 log_not_found off;
 }

}

und den vhost aktivieren:

# cd /etc/nginx/sites-enabled
# ln - s../sites-available/www.domain.tld

Damit wäre die Konfiguration von nginx abgeschlossen.

PHP Umgebung installieren

Wie in der vhost-Konfiguration angegeben, soll ein Compiler auf localhost und Port 9000 lauschen. Dort sollen die PHP Programme dann kompiliert werden.

Dazu legen wir unter /usr/bin eine Datei an, die den Kompiler als Dämon startet:
/usr/bin/php5-fastcgi

/usr/bin/spawn-fcgi -a 127.0.0.1 -p 9000 -C 10 -u www-data -g www-data -f /usr/bin/php5-cgi -P /var/run/fastcgi-php.pid

Hier wird nun ein Dämon gestartet, der auf Adresse 127.0.0.1 und Port 10 lauscht. Es werden 10 Unterprozesse als User www-data und Gruppe www-data gestartet.

Damit dieser Prozess auch bei jedem Booten automatisch gestartet wird, benötigen wir noch einen Init-Prozess
/etc/init.d/php5-fastcgi

#!/bin/sh

### BEGIN INIT INFO
# Provides:          fastcgi
# Required-Start:    $local_fs $remote_fs $network $syslog
# Required-Stop:     $local_fs $remote_fs $network $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: starts the FastCGI server
# Description:       starts spawn-fcgi using start-stop-daemon
### END INIT INFO

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
DAEMON=/usr/bin/php5-fastcgi

test -x $DAEMON || exit 0

set -e

RETVAL=0
case "$1" in
start)
$DAEMON
RETVAL=$?
;;
stop)
killall -9 php5-cgi
RETVAL=$?
;;
restart)
killall -9 php5-cgi
$DAEMON
RETVAL=$?
;;
*)
echo "Usage: php-fastcgi {start|stop|restart}"
exit 1
;;
esac
exit $RETVAL

Die 2 Dateien müssen nun Ausführbar werden:

# chmod 755 /usr/bin/php5-fastcgi
# chmod 755 /etc/init.d/php5-fastcgi

Und damit dieser auch startet:

# update-rc.d php5-fastcgi defaults

Somit wären alle Konfigurationen erledigt.

Jetzt kann der nginx-Server gestartet werden:

# /etc/init.d/php5-fastcgi start
/etc/init.d/nginx start


Werbung


3 Kommentare zu: nginx und PHP5 mit fastCGI installieren

  1. Ronny sagt:

    hallo bei mir geht das cgi slript ned da kommt immer (start/stop/restrt).

    ich habe das so gelost

    joe /etc/rc.local habe dann das eingefügt

    /usr/bin/spawn-fcgi -a 127.0.0.1 -p 9000 -C 10 -u www-data -g www-data -f /usr/bin/php5-cgi -P /var/run/fastcgi-php.pid

    dann gehts wenn ich reboot.

  2. Tom sagt:

    Danke für die Anleitung, die ist kurz und hat mir geholfen, meinen nginx sauber zu installieren. Einfach super.

  3. [...] Zunächst intallieren wir wie gewohnt nginx mit allen benötigten Modulen wie php5 usw. Danach wird der Server und die vhosts konfiguriert. Hierzu verweise ich auf diese Anleitung: Nginx und PHP5 [...]

Hinterlasse eine Antwort

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *


*

Du kannst folgende HTML-Tags benutzen: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>