Anleitung: OS X 10.6 Snow Leopard, nginx und PHP
Sonntag, 22. November 2009 | Autor: David Krcek
Abseits des Apachen tummelt sich ein weiterer interessanter Webserver. nginx, urprünglich von Igor Sysoev für den russischen Suchmaschine Rambler entwickelt, findet weltweit immer mehr Verbreitung als laststarker WebServer, Loadbalancer oder Email-Proxy. Gute Skalierbarkeit, bei geringem Ressourcenhunger, sowie eine einfache Konfiguration erleichtern den Einsatz des Servers zusätzlich.
Die Anleitung verwendet MacPorts, Vorraussetzung und Installation gibts es zu dem Thema hier.
1. Installation nginx
Der Aufbau von nginx ist modular, so gibt es optionale Module für SSL, FLV, WebDAV und Vieles mehr. Diese können bei der Installation mit Macports teilweise direkt mit installiert werden.
Ich habe mich für die zusätzlichen Module Status, SSL, FLV, Realip und Perl5 entschieden. Wenn man die nicht braucht oder andere verwenden möchte kann man diese hinzufügen oder auch weglassen.
Um die Installation zu starten öffne ich ein Terminalfenster (oder Porticus) und gebe das folgende Kommando ein.
sudo port install nginx +status +ssl +flv +realip +perl5
Nach ein paar Minuten meldet sich das System zurück und nginx ist ersteinmal installiert.
... ########################################################### # A startup item has been generated that will aid in # starting nginx with launchd. It is disabled # by default. Execute the following command to start it, # and to cause it to launch at startup: # # sudo launchctl load -w /Library/LaunchDaemons/org.macports.nginx.plist ########################################################### ...
Wenn nginx während des Systemstarts gestartet werden soll, das Kommando:
sudo launchctl load -w /Library/LaunchDaemons/org.macports.nginx.plist
ausführen.
2. Installation PHP mit FastCGI
Ähnlich wie bei Lighttpd gibt es kein eigenes PHP Modul, deswegen muß ich PHP mit FastCGI separat installieren.
Mehr zur Installation von PHP ( insbesonders 5.2 ) unter Snow Leopard 10.6 gibt es hier.
So nur die Kurzfassung hier:
sudo port install php5 +fastcgi
Das war es nun kann ich mit der Konfiguration weitermachen.
3. Konfiguration nginx und PHP
Die Konfigurationsdateien des nginx sind denkbar einfach, aber damit ich nicht alles neu tippen muß nehme ich die Beispieldateien.
cd /opt/local/etc/nginx sudo cp nginx.conf.example nginx.conf sudo cp fastcgi_params.example fastcgi_params sudo cp mime.types.example mime.types
Die Datei nginx.conf passe ich so an.
#user nobody;
worker_processes 1;
error_log /opt/local/var/log/nginx/error.log info;
pid /opt/local/var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /opt/local/etc/nginx/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 /opt/local/var/run/host.access.log main;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
tcp_nodelay on;
gzip on;
server {
listen 81;
server_name 127.0.0.1;
location / {
root /opt/local/www/htdocs/;
index index.php index.html index.htm;
}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /opt/local/www/htdocs$fastcgi_script_name;
include /opt/local/etc/nginx/fastcgi_params;
}
}Im wesentlichen passe ich nur die Verzeichnisse an, lege den Port auf 81 und schalte die Protokolierung ein.
Die Kommunkation des nginx mit der FastCGI findet über Port 9000 statt.
Die beiden anderen Dateien bleiben wie sie sind.
Nun kann ich den nginx starten:
sudo /opt/local/sbin/nginx
Damit auch jemand auf Port 9000 antwortet muß ich noch das FastCGI starten.
sudo /opt/local/bin/php-cgi -q -b 127.0.0.1:9000
Um das Ganze zu testen lege ich mir eine index.php in das Verzeichnis /opt/local/www/htdocs/ mit diesem Inhalt:
<?php phpinfo(); ?>
an und sehe mir den Inhalt unter http://127.0.0.1:81 an.
4. Einrichten des FastCGI Daemon
Damit nun auch die FastCGI auf Port 9000 nach dem Systemstart lauchen kann lege ich mir eine plist Datei an.
cd /Library/LaunchDaemons/ sudo nano com.switchmac.fastcgi.plist
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>Debug</key> <false/> <key>EnvironmentVariables</key> <dict> <key>PHP_FCGI_CHILDREN</key> <string>2</string> <key>PHP_FCGI_MAX_REQUESTS</key> <string>1000</string> </dict> <key>Label</key> <string>com.switch2mac.fastcgi</string> <key>OnDemand</key> <false/> <key>ProgramArguments</key> <array> <string>/opt/local/bin/php-cgi</string> <string>-b127.0.0.1:9000</string> <string>-q</string> </array> <key>RunAtLoad</key> <false/> </dict> </plist>
Wichtig: Bei -b127.0.0.1:9000 ist kein Leerzeichen zwischen -b und dem Hostnamen/IP Adresse.
Nun starte ich FastCGI über launchd beim Systemstart, dazu gebe ich ein:
sudo launchctl load -w /Library/LaunchDaemons/com.switch2mac.fastcgi.plist
Habe fertig.



Danke für die Anleitung. Ich habe schon viel probiert, aber bisher hat es nicht so richtig funktioniert. Nun gehts. Juhuuu