|
Webserver Fragen zum Apache, MySQL-Einrichtung und was sonst noch mit WebServern zu tun hat |
|
Themen-Optionen | Ansicht |
15.04.2012, 17:29 | #1 | |||||||||||||
König
Registriert seit: 06.09.2008
Ort: Da wo der Himmel neun schlägt...
Beitr?ge: 1.630
Abgegebene Danke: 253
Erhielt 1.103 Danke für 139 Beiträge
Downloads: 89
Uploads: 3 Nachrichten: 3824 Renommee-Modifikator:
3461 |
Nginx + PHP5 + VHOST unter Debian GNU/Linux 6.0
Dieses How-To habe ich von Nginx + PHP5 unter Debian GNU/Linux 6.0 "Squeeze" Howto — Asconix Systems - IT Management, Web & Mobile Development gefunden, alledingst habe ich es zu der nginx 1.1.9 angepasst.
Desweiteren habe ich in den How-To eine Vhost Konfiguration hinzugefügt. Nun zum How-To Installation von benötigter Software Da wir die aktuellste Version von Nginx installieren wollen, werden ich im Folgenden die Sourcen des Webservers kompilieren (das Debian Repository enthält lediglich die veraltete Version 0.7.67). Dazu benötigen wir zunächst eine entsprechende Entwicklungsumgebung, die alle benötigten Werkzeuge, wie die Compiler-Suite GCC und die verwendeten Bibliotheken enthält. Diese installieren wir mittels: Code:
aptitude install build-essential libpcre3-dev libssl-dev libbz2-dev Zunächst einmal erstellen wir den Systembenutzer und die gleichnamige Gruppe nginx: Code:
groupadd nginx Code:
useradd -g nginx nginx Nachdem wir eine entsprechende Build-Umgebung installiert haben, laden wir das Quellcode-Archiv des Projekts herunter und entpacken es. Dabei verwenden wir die aktuelle Version 1.1.9: Code:
wget http://nginx.org/download/nginx-1.5.0.tar.gz -P /usr/local/src Code:
CD /usr/local/src
Code:
tar xzvf nginx-1.5.0.tar.gz Code:
rm nginx-1.5.0.tar.gz
Nun kompilieren wir Nginx mittels: Code:
CD nginx-1.5.0
Code:
./configure --prefix=/var/www --sbin-path=/usr/sbin/nginx --conf-path=/etc/nginx/nginx.conf --http-log-path=/var/log/nginx/access.log \ --error-log-path=/var/log/nginx/error.log --pid-path=/var/run/nginx.pid --lock-path=/var/lock/nginx.lock --user=nginx --group=nginx \ --with-debug --with-http_ssl_module --with-http_dav_module --with-http_stub_status_module --http-client-body-temp-path=/var/lib/nginx/body/ \ --http-proxy-temp-path=/var/lib/nginx/proxy/ --http-fastcgi-temp-path=/var/lib/nginx/fastcgi/ --http-uwsgi-temp-path=/var/lib/nginx/uwsgi/ \ --http-scgi-temp-path=/var/lib/nginx/scgi/ --with-http_flv_module --with-http_gzip_static_module Das System bestätigt den obigen Aufruf des Configure-Skripts mittels: Zitat:
Code:
make && make install Aus Sicherheitsgründen sollte ein Webserver stets unter einer eigenen UID/GID betrieben werden und dessen Prozesse auf keinen Fall Root-Rechte besitzen! Daher haben wir bei der obigen Installation die beiden Konfigurations-Switches --user und --group dementsprechend auf die eindeutige UID/GID nginx gesetzt. Nun setzen wir die Benutzer- und die Gruppenzugehörigkeit des DocumentRoot- und des Logverzeichnisses von Nginx fest: Code:
chown -R nginx.nginx /var/www /var/log/nginx Code:
mkdir /var/lib/nginx
Code:
chown -R nginx.nginx /var/lib/nginx Der Webserver Nginx verwendet in unserem Fall die Konfigurationsdatei /etc/nginx/nginx.conf. Nginx kommt soweit vorkonfiguriert aus, dass wir wenig daran ändern müssen. Zum einen starten wir den Nginx Webserver als Benutzer nginx, indem wir diesen in der ersten Zeile der Konfigurationsdatei festlegen: Code:
user nginx; Code:
root html Code:
root /var/www Code:
mv /var/www/html/index.html /var/www/
Code:
rm -rf /var/www/html
Nachdem wir den Webserver installiert haben, können wir diesen zunächst manuell starten mittels: Code:
/usr/sbin/nginx Im Verlauf dieses Howtos werde ich ein Init-Skript vorstellen, mit dessen Hilfe der Nginx Webserver automatisch gestartet und gestoppt werden kann (s.u.). Erweiterung der Nginx-Installation um PHP (optional) In vielen Fällen wird Nginx als Frontend-Server für eine typische PHP5- und MySQL- bzw. PostgreSQL-Anwendung benötigt. Nginx bringt von sich aus jedoch keine entsprechenden Module für PHP-Anwendungen mit (ähnlich wie bei Lighttpd). Von daher werde ich nun einen Weg aufzeigen, wie PHP5 in Form von FastCGI in Nginx eingebunden werden kann. Zunächst installieren wir die PHP5-Umgebung aus dem Debian-Repository mittels: Code:
aptitude install php5-cgi php5-cli Code:
rm /var/www/index.html
PHP-Code:
Code:
location ~ \.php$ { root /var/www; include /etc/nginx/fastcgi_params; fastcgi_param SCRIPT_FILENAME /var/www$fastcgi_script_name; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; } Code:
index index.html index.htm; Code:
index index.html index.htm index.php; Code:
/usr/bin/php5-cgi -q -b 127.0.0.1:9000 Code:
killall nginx && /usr/sbin/nginx Start und Stop via Init-Skript Ist der Leser bis hierhin dem Howto gefolgt, kann dieser nun sowohl den Webserver Nginx als auch den FastCGI-Daemon lediglich manuell starten und stoppen. Im Produktivbetrieb benötigen wir entsprechende Init-Skripte, die diese Aufgaben kontrolliert übernehmen. Von daher werde ich im Folgenden jeweils ein solches Skript pro Dienst vorstellen. Nginx Zunächst erzeugen wir das Init-Skript /etc/init.d/nginx, mit dessen Hilfe wir den Webserver Nginx kontrollieren können: Code:
#! /bin/sh ### BEGIN INIT INFO # Provides: nginx # 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 nginx web server # Description: starts nginx using start-stop-daemon ### END INIT INFO PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin DAEMON=/usr/sbin/nginx NAME=nginx DESC=nginx test -x $DAEMON || exit 0 # Include nginx defaults if available if [ -f /etc/default/nginx ] ; then . /etc/default/nginx fi set -e case "$1" in start) echo -n "Starting $DESC: " start-stop-daemon --start --quiet --pidfile /var/run/$NAME.pid \ --exec $DAEMON -- $DAEMON_OPTS || true echo "$NAME." ;; stop) echo -n "Stopping $DESC: " start-stop-daemon --stop --quiet --pidfile /var/run/$NAME.pid \ --exec $DAEMON || true echo "$NAME." ;; restart|force-reload) echo -n "Restarting $DESC: " start-stop-daemon --stop --quiet --pidfile \ /var/run/$NAME.pid --exec $DAEMON || true sleep 1 start-stop-daemon --start --quiet --pidfile \ /var/run/$NAME.pid --exec $DAEMON -- $DAEMON_OPTS || true echo "$NAME." ;; reload) echo -n "Reloading $DESC configuration: " start-stop-daemon --stop --signal HUP --quiet --pidfile /var/run/$NAME.pid \ --exec $DAEMON || true echo "$NAME." ;; configtest) echo -n "Testing $DESC configuration: " if nginx -t > /dev/null 2>&1 then echo "$NAME." else exit $? fi ;; *) echo "Usage: $NAME {start|stop|restart|reload|force-reload|configtest}" >&2 exit 1 ;; esac exit 0 Code:
chmod +x /etc/init.d/nginx Code:
update-rc.d nginx defaults Code:
killall nginx Start des Webservers: Code:
/etc/init.d/nginx start Code:
/etc/init.d/nginx stop Damit der Webserver Nginx alle PHP-Anfragen entsprechend an den FastCGI-Daemon delegieren kann, muss auch dieser gestartet sein. In unserem Fall verwenden wir den eigenständigen FastCGI Daemon spawn-fcgi. Während dieser früher ein Teil des alternativen Webservers Lighttpd war, wird dieser nun als eigenständiges Projekt geführt. Daher laden wir zunächst den Quellcode von spawn-fcgi in der aktuellen Version 1.6.3 (Stand: Februar 2011) herunter, entpacken das Archiv und kompilieren und installieren spawn-fcgi mittels (Bitte selbst nachschauen, welche Version die aktuelle ist.): Code:
wget http://www.lighttpd.net/download/spawn-fcgi-1.6.3.tar.gz -P /usr/local/src Code:
CD /usr/local/src
Code:
tar xzvf spawn-fcgi-1.6.3.tar.gz Code:
rm spawn-fcgi-1.6.3.tar.gz
Code:
CD spawn-fcgi-1.6.3
Code:
./configure Code:
make && make install Code:
#!/bin/sh /usr/local/bin/spawn-fcgi -F 1 -C 1 -a 127.0.0.1 -p 9000 -u nginx -g nginx -f "/usr/bin/php5-cgi -c /etc/php5/cgi/php.ini" -P /var/run/fastcgi-php.pid Code:
chmod a+x /usr/local/bin/php-fastcgi Zitat:
Code:
chmod a+x /etc/init.d/fastcgi Code:
update-rc.d fastcgi defaults Da wir ein sehr performantes Setup anstreben, möchte ich in diesem Abschnitt einige Tricks und Kniffe zeigen, wie unser Webserver noch weiter beschleunigt werden kann. Zunächst einmal aktivieren wir die gzip-Kompression, so dass alle statischen HTML- und CSS-Dateien, sowie alle Bilder komprimiert übertragen werden. Dazu fügen wir der Hauptkonfiguration /etc/nginx/nginx.conf die folgenden Definitionen hinzu (ca. Zeile 33): Code:
# Compression gzip on; gzip_buffers 16 8k; gzip_comp_level 9; gzip_http_version 1.1; gzip_min_length 10; gzip_types text/plain text/css image/png image/gif image/jpeg application/x-javascript text/xml application/xml application/xml+rss text/javascript image/x-icon; gzip_vary on; gzip_proxied any; gzip_disable "MSIE [1-6]\."; Code:
/etc/init.d/nginx restart In vielen Fällen wird neben einem Webserver mit PHP5-Unterstützung ein relationales Datenbanksystem benötigt. Da einige Projekte MySQL verwenden, während andere auf PostgreSQL basieren, möchte ich im Folgenden die Installation und Konfiguration von beiden Datenbanksystemen erläutern. MySQL In den meisten Fällen verwenden insbesondere PHP5-Projekte MySQL als Datenbankbankend. Daher installieren wir zunächst MySQL auf unserem Debian GNU/Linux 6.0 “Squeeze” System mittels: Code:
aptitude install mysql-server PostgreSQL Sollten wir PostgreSQL für eine PHP5-Webanwendung benötigen, gestaltet sich die Installation genauso einfach: Code:
aptitude install postgresql Code:
aptitude install php5-pgsql Nach der ganzen installiation legen wir uns ein Vhost eintrag an. Als erstes erstellen wir uns erstmal zwei Ordner mit zb.: Code:
mkdir /home/your_site
Code:
mkdir /home/your_site/html
Code:
vim /etc/nginx/sites-available/your_site.conf Code:
server { server_name .your_site; access_log /var/log/nginx/your_site.access.log; error_log /var/log/nginx/your_site.error.log; root /home/your_site/html; index index.php index.html index.htm; # use fastcgi for all php files 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; } # deny access to apache .htaccess files location ~ /\.ht { deny all; } } Nun legen wir eine verknüpfung an und zwar mit folgenden Befehl: Code:
ln -s /etc/nginx/sites-available/your_site.conf /etc/nginx/sites-enabled/your_site.conf
Code:
/etc/init.d/nginx restart PS: BEI DEN BEFEHLEN BITTE DAS CD KLEIN SCHREIBEN! Lg
__________________
Chaosqueen: Gegen unseren DDos Schutz hat keiner ne Chance.
Ich: Träum mal schön weiter du Naive Person. Ge?ndert von D@rk-€vil™ (22.05.2013 um 07:43 Uhr) Grund: Versions Update |
|||||||||||||
Folgende 10 Benutzer sagen Danke zu D@rk-€vil™ für den nützlichen Beitrag: | $iMpLy (15.04.2012), .:.Uranus.:. (15.04.2012), Cerberus (15.04.2012), Entity (15.04.2012), gotthummer (15.04.2012), Lex (15.04.2012), massiv (15.04.2012), mobby (15.04.2012), robby (22.05.2013), Sponge (15.04.2012) |
15.04.2012, 18:01 | #2 | |||||||||||
Erfahrener Benutzer
Registriert seit: 06.12.2008
Ort: /dev
Beitr?ge: 433
Abgegebene Danke: 12
Erhielt 77 Danke für 8 Beiträge
Downloads: 10
Uploads: 0 Nachrichten: 331 Renommee-Modifikator:
791 |
bitte unter debian statt make install das tool checkinstall verwenden...
|
|||||||||||
22.05.2013, 07:44 | #3 | |||||||||||
König
Registriert seit: 06.09.2008
Ort: Da wo der Himmel neun schlägt...
Beitr?ge: 1.630
Abgegebene Danke: 253
Erhielt 1.103 Danke für 139 Beiträge
Themenstarter
Downloads: 89
Uploads: 3 Nachrichten: 3824 Renommee-Modifikator:
3461 |
Ich habe mal den Thread auf den neusten Stand gebracht, da die neure Version nähmlich die 1.5.0 ist.
Lg
__________________
Chaosqueen: Gegen unseren DDos Schutz hat keiner ne Chance.
Ich: Träum mal schön weiter du Naive Person. |
|||||||||||
22.05.2013, 10:16 | #4 | |||||||||||
Erfahrener Benutzer
Registriert seit: 07.03.2010
Beitr?ge: 436
Abgegebene Danke: 12
Erhielt 38 Danke für 2 Beiträge
Downloads: 15
Uploads: 0 Nachrichten: 309 Renommee-Modifikator:
1821 |
1.4.1 ist die letzte stable und auf einem Produktivsystem sollte diese auch genutzt werden.
__________________
Nicht, wer zuerst die Waffen ergreift, ist Anstifter des Unheils, sondern wer dazu nötigt. - Niccolò Machiavelli |
|||||||||||
22.05.2013, 10:42 | #5 | |||||||||||
Böser Mod / NvT Terrorist
Registriert seit: 16.09.2009
Ort: Cyberspace
Beitr?ge: 2.470
Abgegebene Danke: 188
Erhielt 562 Danke für 126 Beiträge
Downloads: 11
Uploads: 0 Nachrichten: 10609 Renommee-Modifikator:
4016 |
Code:
chown -R nginx.nginx /var/www /var/log/nginx Code:
chown -R nginx:nginx /var/www /var/log/nginx |
|||||||||||
22.05.2013, 19:07 | #6 | |||||||||||
Erfahrener Benutzer
Registriert seit: 06.12.2008
Ort: /dev
Beitr?ge: 433
Abgegebene Danke: 12
Erhielt 77 Danke für 8 Beiträge
Downloads: 10
Uploads: 0 Nachrichten: 331 Renommee-Modifikator:
791 |
@lex:
je nachdem wie die regeln für usernamen auf dem system aussehen, klappt auch der . als trenner. Im Debian default z.B. |
|||||||||||
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, G?ste: 1) | |
|
|