Hallo,
nach langen suchen habe ich in der Plesk-Dokumentation gefunden wie man es machen könnte. Zuerst muss man den Port der Apache/Plesk Konfiguration z.B. auf den Port 8181 ändern, dafür muss man nur diesen Befehl ausführen:
/usr/local/psa/admin/sbin/websrvmng --set-http-port --port=8181
Anschließend muss man diesen Befehl ausführen, damit der Port auf alle bisher erstellten Domains/Subdomains-Konfigurationen angewandt wird:
/usr/local/psa/admin/sbin/websrvmng --reconfigure-all
Jetzt für jede einzelne Domain/Subdomain eine ".conf" Datei per Hand anzulegen, erschient mir zu langwierig, daher habe ich mir ein PHP-Shell Script geschrieben.
create_nginx_vhost.php
$list_port = 80;
$to_port = 8181;
$dh = opendir('/var/www/vhosts/');
$sites = array();
while(($file = readdir($dh)) !== false) {
if($file != '.' && $file != '..' && strlen($file) > 5) {
if(count(explode('.',$file)) == 2 ) $sites[] = $file;
}
}
closedir($dh);
$subsites = array();
foreach($sites as $site)
{
$subsites[$site][] = '
server {
listen '.$list_port.';
server_name '.$site.' www.'.$site.';
location ~* ^.+\.(jpg|jpeg|jar|js|png|ico|rar|bz2|gif|txt|js|css|swf|zip|ttf|rar|avi|mid|mp4|flv|ogg|pdf|doc|exe|mpg|mp3|wav|mpeg|asf|wmv)$ {
root /var/www/vhosts/'.$site.'/httpdocs;
expires 30d;
access_log /var/log/nginx-static.log;
if (!-f $request_filename) {
proxy_pass http://'.$site.':8181;
break;
}
}
location / {
proxy_pass http://'.$site.':'.$to_port.';
include /etc/nginx/proxy.conf;
}
}
';
$dh = opendir('/var/www/vhosts/'.$site.'/subdomains/');
while(($file = readdir($dh)) !== false) {
if($file != '.' && $file != '..' && is_dir('/var/www/vhosts/'.$site.'/subdomains/'.$file)) {
$subsites[$site][] = '
server {
listen '.$list_port.';
server_name '.$file.'.'.$site.';
location ~* ^.+\.(jpg|jpeg|js|png|ico|rar|bz2|jar|gif|txt|js|css|swf|zip|rar|ttf|mid|avi|mp4|flv|ogg|pdf|exe|doc|mpg|mp3|wav|mpeg|asf|wmv)$ {
root /var/www/vhosts/'.$site.'/subdomains/'.$file.'/httpdocs;
access_log /var/log/nginx-static.log;
expires 30d;
if (!-f $request_filename) {
proxy_pass http://'.$file.'.'.$site.':8181;
break;
}
}
location / {
proxy_pass http://'.$file.'.'.$site.':'.$to_port.';
include /etc/nginx/proxy.conf;
}
}
';
}
}
closedir($dh);
file_put_contents('/etc/nginx/sites-enabled/'.$site, implode("\n",$subsites[$site]));
}
print "\nFertig\n";
?>
Dieses habe ich dann mittels:
sudo /usr/bin/php create_nginx_vhost.php
ausgeführt.
Warum sollte man dies machen?Wir haben uns für diesen schritt entschieden, um unsere Seite zu beschleunigen. Vor der Umstellung liefen ungefähr:
21-40 Apache Prozesse, was natürlich mit 20 MB Ram verbrauch für jeden Apache Prozess zu Buche schlägt. Heute mit apache laufen ca. nur noch 8-12 Apache Prozesse
bei Hochlast. Apache kümmert sich um die ganzen php Scripte und nginx versorgt die User mit den ganzen Statischen-Dateien wie jpg,css,js usw.
Wer Drupal einsetzt und möchte gerne Fortschrittsbalken auch unter nginx/apache Kombination nutzen, sollte dieses Plugin installieren:
http://drupal.org/project/filefield_nginx_progress