Anleitung: OS X 10.6 Snow Leopard, nginx und PHP

Sonntag, 22. November 2009 |  Autor:

Nginx_LogoAbseits 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.

phpinfo

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.

Tags »   , , , «

Trackback: Trackback-URL | Feed zum Beitrag: RSS 2.0
Thema: Anleitung, OSX, Tipps

Diesen Beitrag kommentieren.

Ein Kommentar

  1. 1
    Suann 

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

Kommentar abgeben