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.confRPAFsethostname On
RPAFproxy_ips 127.0.0.1 YOUR_IP_ADDRESSNginx 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.
Erhalte neue Beiträge in deinem Posteingang.
Kein Spam. Jederzeit abmelden.