Webserver · 3 min read · Dec 27, 2025

Nginx Catch-All Host Als Front-End Zu Apache Für ISPConfig 3 Auf Debian Lenny

Nginx Catch-All Host Als Front-End Zu Apache Für ISPConfig 3 Auf Debian Lenny

Von Nedim Hadzimahmutovic < [email protected] >
Version: v1.1
Letzte Änderung: 19. Mai 2010

Einführung

Apache war immer der Webserver meiner Wahl. Er ist ein echtes Biest, wenn es um die Ressourcennutzung geht, insbesondere in einer ressourcenbeschränkten Umgebung wie einem VPS. Ich begann mit Nginx zu experimentieren, einem leichten, leistungsstarken Webserver. Mein Interessengebiet war es, Nginx als Reverse-Proxy zu betreiben und es in einer Apache/ISPConfig 3-Umgebung zum Laufen zu bringen.

Das Problem

Ich bin ein OpenVZ-, apache2-mpm-itk-, mod_php-Benutzer. Apache mpm-itk unterstützt kein FastCGI. Dieses Problem wird dramatisch größer, wenn Sie ein 64-Bit-Betriebssystem verwenden, da Apache jetzt viel mehr Speicher benötigt (32-Bit-Systeme haben 4-Byte-Zeiger, während 64-Bit-Systeme 8-Byte-Zeiger haben). Ich begann, KMEMSIZE-Limitfehler zu erhalten, und Apache war der Grund dafür. Apache machte meinen VPS unbrauchbar, also musste ich nach einer Alternative suchen.

Die Lösung

Nginx war die Antwort, aber ich bin ein ISPConfig-Benutzer, das nur Apache unterstützt, und wenn ich einen Weg gefunden hätte, dies zu umgehen, würde ich nicht manuell jeden virtuellen Host verwalten. Die Lösung war, einen Nginx-Catch-All-Host als Front-End einzurichten und an Apache weiterzuleiten, das im Hintergrund auf einem anderen Port läuft. Auf diese Weise wird Nginx die statischen Dateien bereitstellen und PHP würde Apache überlassen werden. Sie können auch eine ganze Domain Nginx überlassen, wenn Sie möchten, setzen Sie einfach den virtuellen Host dieser Domain vor den Standard-vhost. Ein Schritt weiter wäre es, eine 32-Bit-Chroot-Umgebung über dem 64-Bit-Betriebssystem auszuführen und Apache in 32-Bit zu installieren, aber das wird in diesem Tutorial nicht behandelt.

Apache konfigurieren

Konfigurieren Sie Apache, um auf Port 82 in /etc/apache2/ports.conf und in allen Ihren virtuellen Hosts zu laufen. Um es einfacher zu machen, verwenden Sie den sed-Befehl:

 # sed -ie 's/YOUR-IP:80/YOUR-IP:82/g' /etc/apache2/sites-available/*.vhost 

Ich gehe davon aus, dass Ihr virtueller Host IP-basiert ist - Ihr vhost könnte *:80 anstelle von IP:80 haben.

Der sed-Befehl erstellt Sicherungsdateien Ihrer .vhost-Dateien, die die Erweiterung .vhoste haben. Sie können die Sicherungs-vhost-Dateien verschieben:

mkdir /root/apache2_vhost_backup/
mv /etc/apache2/sites-available/*.vhoste /root/apache2_vhost_backup/

Starten Sie Apache neu und verwenden Sie netstat, um zu überprüfen, ob es auf Port 82 läuft:

  tcp        0      0 0.0.0.0:82              0.0.0.0:*               LISTEN      7630/apache2 

Jetzt müssen Sie die ISPConfig Apache-Vorlagen ändern. Kopieren Sie sie in Ihr conf-custom-Verzeichnis:

 # cd /usr/local/ispconfig/server/ 
 # cp conf/apache_ispconfig.conf.master conf-custom/ 
 # cp conf/vhost.conf.master conf-custom/ 

Öffnen Sie die beiden Dateien und ändern Sie :80 in :82. Um sicherzugehen, führen Sie den grep-Befehl aus und überprüfen Sie, ob die Ausgabe übereinstimmt:

 # grep :82 -i /usr/local/ispconfig/server/conf-custom/* 

/usr/local/ispconfig/server/conf-custom/apache_ispconfig.conf.master:NameVirtualHost {tmpl_var name=”ip_address”}:82
/usr/local/ispconfig/server/conf-custom/vhost.conf.master: :82>

Sie werden sehen, dass alle Anfragen von localhost (127.0.0.1) stammen. Um die echte IP-Adresse der Benutzer zu sehen, müssen Sie libapache2-mod-rpaf installieren:

 # apt-get install libapache2-mod-rpaf 

Fügen Sie Folgendes zu /etc/apache2/apache2.conf hinzu:

# nano /etc/apache2/apache2.conf
RPAFsethostname On
RPAFproxy_ips 127.0.0.1 YOUR_IP_ADDRESS

Nginx installieren und konfigurieren

Aktivieren Sie das lenny-backports-Repository, die Anweisungen finden Sie unter http://backports.org/.

 apt-get install nginx 

Entfernen Sie den Standard-vhost:

 # rm /etc/nginx/sites-available/default 

Öffnen Sie die Datei:

 # nano /etc/nginx/sites-available/default 

Fügen Sie den folgenden Inhalt in die Datei ein:

server {
    listen   80 default; 
        server_name  _;
        server_name_in_redirect  off;
    resolver  127.0.0.1;
#### www. redirect  - alle Domains, die mit www beginnen, werden zu http://domain umgeleitet. ####
    if ($host ~* ^(www\.)(.+)) {
        set $rawdomain $2;
        rewrite ^/(.*)$  http://$rawdomain/$1 permanent;
    }
    access_log  /var/log/ispconfig/httpd/$host/access.log;
location ~* ^.+\.(jpg|jpeg|gif|png|ico|css|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|txt|tar|mid|midi|wav|bmp|rtf|js|swf|flv|html|htm|mp3)$ {
    root   /var/www/$host/web; 
    access_log off;
    expires 30d;
    }
location / {
    root   /var/www/$host/web;
    index  index.html index.htm index.php;
        access_log      off;
        proxy_pass http://$host:82;
        proxy_set_header X-Real-IP  $remote_addr;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}

Das war’s. Nginx wird alle Ihre statischen Dateien wie Bilder bereitstellen, selbst HTML-Dateien und PHP-Daten werden an Apache weitergeleitet.

Share: X/Twitter LinkedIn

Erhalte neue Beiträge in deinem Posteingang.

Kein Spam. Jederzeit abmelden.