Sebastian Mogilowskis Blog

Just another blog about administration, linux and other stuff

Language: German English

Nginx as reverse proxy cache for wordpress and apache

1. Nginx installieren

* PPA Installation
* Installation mit selbstgebauten Paket

2. Allgemeine Nginx Einstellungen

Folgende Einstellungen in der Datei “/etc/nginx/nginx.conf” vornehmen:

[...]
http {
  [...]
  # Gzip Settings
  gzip on;
  gzip_disable "msie6";
  gzip_buffers 32 8k;
  gzip_comp_level   6;
  gzip_http_version 1.0;
  gzip_min_length   0;
  gzip_types        text/html text/css image/x-icon application/x-javascript application/javascript text/javascript application/atom+xml application/xml ;

  # Proxy Settings
  proxy_temp_path /var/lib/nginx/proxy;
  proxy_connect_timeout 30;
  proxy_read_timeout 120;
  proxy_send_timeout 120;
  proxy_cache_key "$scheme://$host$request_uri";
  [...]
}
[...]

3. Site anlegen

Anlegen der Datei “/etc/nginx/sites-available/www.mogilowski.net” mit folgenden Inhalt:

Bemerkung: Ersetze “www.mogilowski.net” mit der Domain deiner Seite und ersetze “mogfilecache” mit einen eindeutigen Namen für den Filecache der Seite.

proxy_cache_path  /var/lib/nginx/cache  levels=1:2   keys_zone=mogfilecache:180m  max_size=500m;

server {
        proxy_cache_valid 200 3h;

        listen 80;

        server_name www.mogilowski.net;

        access_log /var/log/nginx/mogilowski.proxied.log;
        error_log /var/log/nginx/mogilowski.proxied.log crit;

        proxy_set_header Host $host;
        proxy_set_header X-Real-IP  $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

        location / {
            # If logged in, don't cache.
            if ($http_cookie ~* "comment_author_|wordpress_(?!test_cookie)|wp-postpass_" ) {
                set $do_not_cache 1;
            }
            proxy_cache_key "$scheme://$host$request_uri $do_not_cache";
            proxy_cache mogfilecache;
            proxy_pass http://127.0.0.1:81;
        }

        location ~* wp\-.*\.php|wp\-admin {
            proxy_pass http://127.0.0.1:81;
        }

	location ~* \.(jpg|png|gif|jpeg|css|js|mp3|wav|swf|mov|doc|pdf|xls|ppt|docx|pptx|xlsx)$ {
            proxy_cache_valid 200 6h;
            expires max;
            proxy_cache mogfilecache;
            proxy_pass http://127.0.0.1:81;
        }

        location ~* \/[^\/]+\/(feed|\.xml)\/? {
            if ($http_cookie ~* "comment_author_|wordpress_(?!test_cookie)|wp-postpass_" ) {
                set $do_not_cache 1;
            }
            proxy_cache_key "$scheme://$host$request_uri $do_not_cache";
            proxy_cache_valid 200 1h;
            proxy_cache mogfilecache;
            proxy_pass http://127.0.0.1:81;
        }

        # No access to .htaccess files.
        location ~ /\.ht {
            deny  all;
        }

}

Bemerkung: In dieser Beispielkonfiguration läuft der Apache Webserver auf Port 81 auf dem selben Server (localhost). Es könnte aber ebenso ein anderer Server sein, dazu einfach “http://YOUR_APACHE_SERVER:80″ verwenden.

4. Site aktivieren

ln -s /etc/nginx/sites-available/www.mogilowski.net /etc/nginx/sites-enabled/www.mogilowski.net

Bemerkung: Bitte die default Site entfernen!

5. Purge Cache

Falls man sein eigenes Nginx Paket mit dem “proxy_cache_purge” Modul gebaut hat, kann man dies noch zu seiner Konfiguration hinzufügen: (http://labs.frickle.com/nginx_ngx_cache_purge/)

server {
    [...]
    location ~ /purge(/.*) {
                allow                   127.0.0.1;
                deny                    all;
                proxy_cache_purge       mogfilecache   "$scheme://$host$request_uri";
        }
    [...]
}

Dies kann man prima zusammen mit diesem Plugin verwenden: http://wordpress.org/extend/plugins/nginx-proxy-cache-purge

6. Links

* http://wp-performance.com/2010/10/nginx-reverse-proxy-cache-wordpress-apache/
* http://wiki.nginx.org/Wordpress
* http://wordpress.org/extend/plugins/nginx-proxy-cache-integrator/
* http://www.djm.org.uk/wordpress-nginx-reverse-proxy-caching-setup/
* http://zachbrowne.com/2011/how-to-build-the-fastest-wordpress-website-with-apache-ngnix-reverse-proxy-php-cgi-google-pagespeed/

, , , , ,

Install nginx on debian squeeze from PPA

Aktuell findet man die Version 0.7.67-3 von Nginx in Debian Squeeze. Wenn man eine neuere Version haben möchte, kann man sich seine eigenen Pakete bauen, oder man verwendet welche aus den Ubuntu PPA-Quellen.

Dies installiert die neuste (stable) Version von Nginx (aktuell 1.0.1) auf Debian Squeeze.

echo "deb http://ppa.launchpad.net/nginx/stable/ubuntu lucid main" > /etc/apt/sources.list.d/nginx-stable-lucid.list
apt-key adv --keyserver keyserver.ubuntu.com --recv-keys C300EE8C
aptitude update
aptitude install nginx

Aber wenn man Third Party Module benötigt, muss man seine eigenen Pakete bauen.

, , ,

Building a nginx debian package with third party modules

Ich habe diese Anleitung mit Debian Squeeze (amd64) und der neusten Version von Nginx (stable) mit einem Third Party Module als Beispiel erstellt. Bitte beachtet, das ihr ggf. die Versionsnummern in dieser Anleitung anpassen müsst, wenn ihr neuere Versionen von Nginx oder des Moduls verwendet.

1. Installation Debian Build-Tools und abhängigen Paketen

aptitude install build-essential dpkg-dev debhelper autotools-dev libgeoip-dev libssl-dev libpcre3-dev zlib1g-dev

2. Herrunterladen und entpacken des neusten Nginx

wget http://nginx.org/download/nginx-1.0.2.tar.gz
tar xvzf nginx-1.0.2.tar.gz

3. Weitere Module herrunterladen

In diesem Beispiel verwende ich das Nginx Proxy Purge Modul. Herrunterladen

wget http://labs.frickle.com/files/ngx_cache_purge-1.3.tar.gz

und anschließend ein Verzeichnis “module” erstellen (sollte dieses nicht bereits existieren). Das Modul wird dann in dieses Verzeichnis entpackt:

mkdir nginx-1.0.2/modules
tar vfx ngx_cache_purge-1.3.tar.gz -C nginx-1.0.2/modules/

4. Herrunterladen des neuesten Debian Pakets

apt-get source nginx

Man bekommt einen Ordner mit den letzten Debian Sources angelegt (nginx-0.7.67) von diesen wird jedoch nur der Ordner “debian” benötigt.

5. Kopieren des Debian-Ordners in den neuen Nginx-Ordner

cp -r nginx-0.7.67/debian/ nginx-1.0.2
rm nginx-1.0.2/debian/patches/*

Nicht vergessen die alten Patches zu entfernen! Diese werden nicht mehr benötigt.

Edit “nginx-1.0.2/debian/changelog” and prepend:

nginx (1.0.2-1) unstable; urgency=low

  * added purge proxy module

 -- Sebastian Mogilowski   Sat, 14 May 2011 13:00:00 +0100

Bemerkung: Am besten ersetzt man dabei meinen Namen durch seinen eigenen :-)

Nun fügt man das Modul zu den Build-Rules hinzu. Dazu editiert man die Datei “nginx-1.0.2/debian/rules” und fügt

--add-module=$(CURDIR)/modules/ngx_cache_purge-1.3 \

zu den “./configure” Einstellungen.

Beispiel:

./configure --conf-path=/etc/nginx/nginx.conf \
            --error-log-path=/var/log/nginx/error.log \
            --http-client-body-temp-path=/var/lib/nginx/body \
            --http-fastcgi-temp-path=/var/lib/nginx/fastcgi \
            --http-log-path=/var/log/nginx/access.log \
            --http-proxy-temp-path=/var/lib/nginx/proxy \
            --lock-path=/var/lock/nginx.lock \
            --pid-path=/var/run/nginx.pid \
            --with-debug \
            --with-http_dav_module \
            --with-http_flv_module \
            --with-http_geoip_module \
            --with-http_gzip_static_module \
            --with-http_realip_module \
            --with-http_stub_status_module \
            --with-http_ssl_module \
            --with-http_sub_module \
            --with-ipv6 \
            --with-mail \
            --with-mail_ssl_module \
            --add-module=$(CURDIR)/modules/ngx_cache_purge-1.3 \
            $(CONFIGURE_OPTS)

6. Erstellen des Pakets

cd nginx-1.0.2
dpkg-buildpackage -b

7. Installation

dpkg -i nginx_1.0.2-1_amd64.deb

, ,

Nagios 3 with Nginx on Ubuntu Server

1. Installation von Nagios 3

aptitude install nagios3

2. Testen der Nagios Installation

Öffne “http://SERVER/nagios3″ in einem Browser. Anmeldung mit “nagiosadmin” und dem Passwort, dass während der Installation festgelegt wurde.

3. Wechseln von Apache zu Nginx

Mit der Nagios Installation wurde Apache automatisch mit installiert. Nun wird er durch Nginx ersetzt.

3.1 Installation von Nginx und libfcgi (Perl)
aptitude install nginx libfcgi-perl
3.2 Fastcgi konfigurieren
wget https://library.linode.com/web-servers/nginx/perl-fastcgi/reference/fastcgi-wrapper
wget https://library.linode.com/web-servers/nginx/perl-fastcgi/reference/init-deb.sh
mv fastcgi-wrapper /usr/bin/fastcgi-wrapper.pl
mv init-deb.sh /etc/init.d/perl-fastcgi
chmod +x /usr/bin/fastcgi-wrapper.pl
chmod +x /etc/init.d/perl-fastcgi
update-rc.d perl-fastcgi defaults
/etc/init.d/perl-fastcgi start
3.3 Nginx konfigurieren
vim /etc/nginx/sites-available/nagios
server {
	listen   80;
	server_name  servername.com;

	access_log  /var/log/nginx/access.log;

	auth_basic            "Restricted Nagios Area!";
  	auth_basic_user_file  /etc/nagios3/htpasswd.users;	

	location / {
		root /usr/share/nagios3/htdocs;
		index index.html;

		rewrite ^/nagios3/(.*)$ /$1 break;
	}

	location /nagios3/stylesheets {
                alias /etc/nagios3/stylesheets;
        }

	location ~ \.cgi$ {
		root /usr/lib/cgi-bin/nagios3;
		include /etc/nginx/fastcgi_params;

		rewrite ^/cgi-bin/nagios3/(.*)$ /$1;

		fastcgi_pass 127.0.0.1:8999;
		fastcgi_param SCRIPT_FILENAME /usr/lib/cgi-bin/nagios3$fastcgi_script_name;
		fastcgi_param AUTH_USER       $remote_user;
		fastcgi_param REMOTE_USER     $remote_user;
	}

}
ln -s /etc/nginx/sites-available/nagios /etc/nginx/sites-enabled/nagios
/etc/init.d/nginx restart
3.4 Apache entfernen

Nun kann man alle Apache Pakete entfernen mit Ausnahme von “apache2-utils” welches von Nagios benötigt wird.

4. Testen mit Nginx

Öffne “http://SERVER/nagios3″ in einem Browser. Anmeldung mit “nagiosadmin” und dem Passwort, dass während der Installation festgelegt wurde.

5. Links

* http://inode.co.nz/running-nagios3-under-nginx-fastcgi

* http://library.linode.com/web-servers/nginx/perl-fastcgi/ubuntu-10.04-lucid

* http://wiki.linuxwall.info/doku.php/fr:ressources:dossiers:supervision:nagios3

* http://wiki.nginx.org/Main

* http://www.nagios.org

, ,

Install Gnome3 on Ubuntu 11.04 Natty or Ubuntu 10.10 Maverick

Für die Installation folgende Befehle im Terminal ausführen:

Unter Ubuntu 11.04:

add-apt-repository ppa:gnome3-team/gnome3
aptitude update
aptitude dist-upgrade
aptitude install gnome-shell

Unter Ubuntu 10.10:

add-apt-repository ppa:ubuntu-desktop/gnome3-builds
aptitude update
aptitude install gnome3-session

Bemerkung: Dieses Repository wird nicht mehr aktualisiert !

Nach der Installation abmelden und neu anmelden. (Gnome3 auswählen)

Entfernen:

aptitude install ppa-purge
ppa-purge ppa:gnome3-team/gnome3

Links:

* http://www.gnome.org

* http://www.ubuntu.com

, ,

Enable SNMP on Citrix XenServer 5.6

Öffne die XenServer Konsole oder stelle eine SSH-Verbindung zum XenServer für die folgende Anleitung:

1. Einstellen der Firewall

Öffne “/etc/sysconfig/iptables” mit dem “vi” Editor und füge die folgende Zeile ein um SNMP Verbindungen zu erlauben:

-A RH-Firewall-1-INPUT -m state --state NEW -m udp -p udp --dport 161 -j ACCEPT

IPTables Service neu starten, um die Einstellungen zu übernehmen:

service iptables restart

2. SNMPD Konfigurieren

Bearbeite die Datei “/etc/snmp/snmpd.conf” und füge die folgenden Zeilen ein:

[...]
com2sec MY-TRUST-NET 192.168.0.0/24      public
[...]

[...]
group   notConfigGroup v1            MY-TRUST-NET
[...]

Bemerkung: Ersetze “192.168.0.0/24″ durch dein Subnetz solltest du ein anderes verwenden.

Nun den SNMPD-Deamon starten mit:

service snmpd start

Um den Service beim nächsten Neustart automatisch zu starten folgendes ausführen:

chkconfig snmpd on

Bemerkung: Diese Einstellungen sind nicht dauerhaft. Nach einem Upgrade des XenServers muss man die Einstellungen erneut durchführen.

3. Links

* http://support.citrix.com/article/CTX122337
* HP SNMP Agents for Citrix XenServer

, , ,

Ubuntu Lucid on XenServer 5.6 FP1

Anleitung zum installieren von Ubuntu Lucid 10.04 LTS (32-Bit oder 64-Bit) unter Citrix XenServer 5.6 FP1 und konvertieren der virtuellen Maschine in ein eigenes Template.

Bemerkung: Klicke auf ein Bild um es zu vergrößern.

1. Virtuelle Maschine erstellen

“Ubuntu Lucid Lynx 10.04 (64-bit)” als Template auswählen und einen Namen sowie eine Beschreibung für die virtuelle Maschine eingeben. “Install from URL” auswählen und folgende URL eingeben: http://archive.ubuntu.net/ubuntu

xl1xl2xl3

Man legt die Anzahl der vCPUs fest und konfiguriere den Arbeitsspeicher für die virtuelle Maschine. Danach werden die virtuellen Festplatten konfiguriert.

xl4xl5

Ich habe eine 8 GB Disk für das System gewählt und eine 1 GB Disk für SWAP.
Durch das verwenden von 2 verschiedenen Festplatten lässt sich die SWAP-Partition leichter entfernen wenn sie nicht gebraucht wird und die einzelnen Partitionen lassen sich leichter erweitern oder austauschen.

Zum Schluss konfiguriert man noch die Netzwerkinterfaces seiner VM. Dies hängt etwas vom Setup des XenServers ab z.B. ein Bonding-Interface oder ein einzelnes Interface. Anschließend den Wizzard fertigstellen.

Die virtuelle Maschine wird nun erstellt und gestartet.

Sobald dies abgeschlossen ist, öffnet man die Konsole der virtuellen Maschine und beginnt mit der Installation von Ubuntu.

xl6xl7xl8

Wähle dein Land und Tastaturlayout und konfiguriere das Netzwerk.
Sollte man keinen DHCP-Server im Netzwerk haben, muss man das Netzwerk per Hand einstellen. Wähle dazu “manual”.

xl9xl10xl11xl12

Nun wird der Hostname festgelegt. In diesem Beispiel verwende ich xen.local deshalb gebe ich xen als hostname und local als domain name ein.

xl13xl14

Wähle nun einen Mirror für Ubuntu. Normalerweise einen aus deinem Land.
Überprüfe ob der Installer die Zeitzone richtig erkannt hat. Falls ja dann wähle Yes ansonsten No.

xl15xl16

Partitionierung

Nun werden die Festplatten partitioniert und formatiert.
Zuerst wählt man hier “manual” aus und wählt die erste virtuelle Festplatte “xvda” aus. Erstelle eine neue Partitionstabelle “Create a new empty partition table” und wähle den nun entstandenen freien Festplattenspeicher aus um eine neue Partition zu erstellen “create new partition”.
Verwende die Partition als “Ext4 journaling file system” mit “/” als mount point.

xl17xl18xl19xl20xl21

xl22xl23xl24







Nun alles mit der 2. Festplatte “xvdb” wiederholen. Nur dieses mal erstellt man eine “swap area”.

xl26xl27xl28xl29

Die genaue Partitionierung könnte natürlich auch anders aussehen. Wer weiss was er tut kann die Konfiguration natürlich an seine Anforderungen anpassen.
Zum Schluß die Partitionierung abschließen “Finish partitioning” und mit “Yes” bestätigen wenn man gefragt wird ob die Änderungen auf die Festplatte geschrieben werden sollen. “Write the changes to disks”

Anschließend wird das Grundsystem installiert:
xl30

Jetzt wird ein Benutzer angelegt. Zum Beispiel der Benutzer “sebastian” mit dem Benutzernamen “sebastian”.

xl31xl32xl33xl34

Bemerkung: Ich benötige kein verschlüsseltes Home Verzeichnis deshalb habe ich die Frage nach “encrypted private directory” mit No beantwortet.

Als nächstet wird der Packetmanager eingerichtet. Lasst die Eingabezeile bei “HTTP proxy” leer außer ihr habt einen Proxy-Server über den ihr ins internet gelangt.
Außerdem habe ich “No automatic updates” ausgewählt, da ich auf Servern die Updates lieber selbst per Hand installiere.
Anschließend wird das System und einige notwendige Pakete installiert. Ich habe in der Softwareauswahl nur “Basic Ubuntu server” und “OpenSSH server” ausgewählt um eine kleine virtuelle Maschine zu erhalten.

xl35xl36xl37xl38

Nun wird der “GRUB boot loader” installiert. Wähle “Yes” bei der Frage ob dieser in den master boot record installiert werden soll “Install the GRUB boot loader to the master boot record?”.

xl39xl40xl42

Die Installation des Systems ist nun abgeschlossen. Wähle “Continue” um die virtuelle Maschine mit dem installierten Ubuntu neu zu starten.

2. Die XEN-Tools installieren

Verbinde im XenCenter “xs-tools.iso” mit der virtuellen Maschine.
Nun die CD in der virtuellen Maschine mounten und das richtige XenServer Tools Paket installieren. (Ersetze amd64 mit i386 falls nötig) Nach der installation kann man die CD wieder unmounten.

mount /dev/cdrom /mnt
dpkg -i /mnt/Linux/xe-guest-utilities_5.6.100-647_amd64.deb
umount /mnt/

Nach dem Neustart überprüft man ob die Tool-Services auch automatisch gestartet wurden. Falls nicht folgendes ausführen:

update-rc.d -f xe-linux-distribution remove
update-rc.d xe-linux-distribution defaults

Nun die virtuelle Maschine ein letztes Mal neu starten.

3. Konvertieren der virtuellen Maschine in ein Template

Vorher sollte man jede Software installieren, die man auf allen virtuellen Maschinen haben möchte. Außerdem alle Einstellungen vornehmen, die man überall haben möchte.

Nach dem man den Server nach seinen Wünschen eingerichtet hat fährt man die virtuelle Maschine herrunter.

Mit einem “rechts Klick” auf die virtuelle Maschine gelangt man in das Kontextmenu wo man “Convert to Template” auswählt.

Nun kann man neue virtuelle Maschinen auf Basis dieses bereits eingerichteten und installierten Ubuntu Templates erstellen.

Mit “New VM from template” und mit der Auswahl des selbst erstellten Templates können nun neue virtuelle Maschinen angelegt werden.

, , , ,

Resize images (folder) with imagemagick (mogrify)

Bevor ich Bilder in meine Online-Galerie hochlade möchte ich diese noch lokal verkleinern. Dazu möchte ich aber nicht jedes Bild einzeln öffnen sondern ohne GUI alle auf einmal ändern.

Zuerst muss man imagemagick installieren:

aptitude install imagemagick

Nun geht (“cd”) man am besten in das Verzeichnis mit den Bildern und führt folgenden Befehl aus:

mogrify -resize 800x600! *.JPG

Alle Bilder werden durch die verkleinerte Version von sich selbst ersetzt.

Nun kann man das Verzeichnis bequem hochladen.

, , , ,

Change DNS-Server in XenServer 5.6 FP1

Citrix hat das Ändern des DNS-Servers aus der Konsole entfernt. Das ändern der DNS-Server in der Datei “/etc/resolv.conf” ist zwar möglich, aber diese Einstellungen sind nicht von Dauer. Wenn man zum Beispiel den Server neu startet, werden die Einstellung auf die alte Konfiguration zurückgesetzt.

Ändern des DNS-Servers

Mit dem Befehl

xe pif-list

bekommt man die UUID seines PIF. Man bekommt eine Ausgabe wie diese:

uuid ( RO)                  : PIF-UUID
                device ( RO): eth0
    currently-attached ( RO): true
                  VLAN ( RO): -1
          network-uuid ( RO): NETWORK-UUID

Mit dem Befehl “xe pif-param-list uuid=PIF-UUID” kann man sich die aktuelle Konfiguration des Interfaces anzeigen lassen.

Um sie zu ändern, verwendet man folgenden Befehl:

xe pif-reconfigure-ip uuid=PIF-UUID mode=static IP=IP-ADDRESS netmask=SUBNETMASK gateway=GATEWAY DNS=DNS-SERVER

Bemerkung: Man kann mit “DNS=DNS-SERVER-1,DNS-SERVER-2″ mehrere DNS-Server angeben.

Mit dem Befehl “xe pif-param-list uuid=PIF-UUID” kann man sich die neue Konfiguration anzeigen lassen und die Änderungen überprüfen.

Links:

http://forums.citrix.com/thread.jspa?messageID=1531853

Upgrade Debian Lenny to Squeeze on Citrix XenServer

Debian Logo

1. Die Lenny Installation auf den aktuellen Stand bringen

Bevor man mit dem Distributions-Update beginnt, sollte man sicherstellen, dass Lenny auf dem aktuellen Stand ist.

aptitude update
aptitude upgrade

2. Die sources.list zu Squeeze ändern

Öffne “/etc/apt/sources.list” mit einem Editor deiner Wahl und ersetzte “Lenny” durch “Squeeze” hier ist ein Beispiel:

# Debian Squeeze
deb http://ftp.de.debian.org/debian/ squeeze main
deb-src http://ftp.de.debian.org/debian/ squeeze main  

# Debian Squeeze Security
deb http://security.debian.org/ squeeze/updates main

3. Das System aktualisieren

aptitude update
aptitude install apt dpkg aptitude
aptitude full-upgrade

4. Grub aktualisieren

Debian Squeeze verwendet Grub2 deshalb muss man noch “upgrade-from-grub-legacy” ausführen um von Grub zu Grub2 umzustellen.

upgrade-from-grub-legacy
rm -f /boot/grub/menu.lst*

Sollte man dies nicht machen, bekommt man folgende Fehlermeldung vom XenServer.

Error: Starting VM 'YOUR_VM' - Using  to parse /boot/grub/menu.lst - Traceback (most recent call last): - File "/usr/bin/pygrub", line 746, in ? - raise RuntimeError, "Unable to find partition containing kernel" - RuntimeError: Unable to find partition containing kernel

, , , ,

Previous Posts Next posts