In dieser Anleitung zeige ich, wie man Apache durch nginx mit ISPConfig 3.0.5.4 ersetzen kann. Ich habe verschiedene Seite mit Joomla 2.x, Joomla 3.x, WordPress und eigener Codes migriert.
Ich verwende dazu ISPConfig 3.0.5.4.p6 installiert nach dem Perfect Server Howto von howtoforge.com.
Es gibt ein paar Unterschieder zwischen Apache und nginx, die vor der Umstellung beachtet werden müssen:
nginx unterstützt keine .htaccess
nginx verwendet eigene rewrites und kein mod_rewrite-Modul wie Apache
Für beides gibt es verschieden Online-Konverter wie www.anilcetin.com. Dabei muss aber immer daran gedacht werden, dass der Erfolg nicht garantiert werden kann und jede Seite nach der Umstellung getestet werden sollte.
Sobald der Webserver in ISPConfig von Apache auf nginx umgestellt ist, sind die Apache-Direktiven nicht mehr über das Interface ersichtlich. Man kann entweder vorher alle Direktiven kopieren oder aber (und das geht auch nach der Umstellung), die Direktiven aus der Datenbank in mysql oder mit phpMyAdmin auslesen.
SELECT domain, apache_directives FROM web_domain WHERE apache_directives != '';
DIe vorhandenen .htaccess Files lassen sich mit find /var/www/clients/ -name .htaccess -not -path "*/stats/*"
finden.
1. nginx installieren
apt-get install nginx
2. php-fpm installieren
apt-get install php5-fpm
und in /etc/php5/fpm/php.ini zwei Werte überprüfen:
cgi.fix_pathinfo=0
date.timezone=”Europe/Berlin”
php-fpm durch /etc/init.d/php5-fpm reload
neu laden.
Ab dieser Stelle ist zwar nginx installiert, der aktive Webserver ist aber weiterhin Apache.
3. Wartungsmodus aktivieren
In ISPConfig unter System / Systemkonfiguration im Reiter Diverses den Wartungsmodus aktivieren, damit während der Umstellung keine weiteren Änderungen geschrieben werden
4. ISPConfig auf nginx umstellen
Die folgenden EInstellungen werden direkt in der Datenbank (dbispconfig) vorgenommen.
Die Tabelle server
auswählen und server editieren:
Nach unten bis config
scrollen und die Zeile [global]
finden. In der folgenden Zeile dann
webserver=apache
durch
webserver=nginx
Danach die Zeile [web]
finden und darunter
server_type=apache
durch
server_type=nginx
6. Damit das Web-Interface von ISPConfig über nginx erreichbar ist, die entsprechende ispconfig.vhost
unter /etc/nginx/sites-available
anlegen:
vi /etc/nginx/sites-avaliable/ispconfig.vhost
und einen der folgenden Inhalte einfügen:
mit SSL:
server {
listen 8080;
ssl on;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_certificate /usr/local/ispconfig/interface/ssl/ispserver.crt
ssl_certificate_key /usr/local/ispconfig/interface/ssl/ispserver.key;
server_name _;root /usr/local/ispconfig/interface/web/;
client_max_body_size 20M;
location / {
index index.php index.html;
}# serve static files directly
location ~* ^.+.(jpg|jpeg|gif|css|png|js|ico|html|xml|txt)$ {
access_log off;
}location ~ \.php$ {
try_files $uri =404;
include /etc/nginx/fastcgi_params;
fastcgi_pass unix:/var/lib/php5-fpm/ispconfig.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
#fastcgi_param PATH_INFO $fastcgi_script_name;
fastcgi_buffer_size 128k;
fastcgi_buffers 256 4k;
fastcgi_busy_buffers_size 256k;
fastcgi_temp_file_write_size 256k;
}location ~ /\. {
deny all;
}
}
ohne SSL:
server {
listen 8080;
ssl off;
server_name _;root /usr/local/ispconfig/interface/web/;
client_max_body_size 20M;
location / {
index index.php index.html;
}# serve static files directly
location ~* ^.+.(jpg|jpeg|gif|css|png|js|ico|html|xml|txt)$ {
access_log off;
}location ~ \.php$ {
try_files $uri =404;
include /etc/nginx/fastcgi_params;
fastcgi_pass unix:/var/lib/php5-fpm/ispconfig.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
#fastcgi_param PATH_INFO $fastcgi_script_name;
fastcgi_buffer_size 128k;
fastcgi_buffers 256 4k;
fastcgi_busy_buffers_size 256k;
fastcgi_temp_file_write_size 256k;
}location ~ /\. {
deny all;
}
}
und den symlink durch
ln -s /etc/nginx/sites-available/ispconfig.vhost /etc/nginx/sites-enabled/000-ispconfig.vhost
erstellen.
7. Webseiten anpassen
Den Wartungsmodus deaktivieren und evtl. vorhandenen .htaccess-Dateien und Apache-Direktiven umwandeln und In ISPConfig für die jeweilige Webseite eintragen.
Falls nicht alle Webseiten angepasst werden mussten: unter Tools den Resync für alle Webseiten aufrufen.
8. Apache deaktivieren und nginx startern
/etc/init.d/apache2 stop
update-rc.d -f apache2 remove
/etc/init.d/nginx start
Done
Soll doch wieder Apache verwendet werden, reicht es die Schritt aus 4. und 8. rückgängig zu machen.
Danke, Version ISPConfig 3.0.5.4.p6 ist ja von 2015. Ist das so noch aktuell? Ich würde gerne von NGINX auf Apache 2 wechseln, gibt’s dazu zufällig auch ein Tutorial?
Warum denn das? Das geht im Prinzip genau andersrum. Also als webserver dann zB apache eintragen und das Plugin von nginx ab und das für apache einschalten.
ISPCONFIG 3 not creating sites under /etc/nginx/sites-available even after a resync.
Please revise this guide.
Hello Frank, execute this commands:
rm /usr/local/ispconfig/server/plugins-enabled/apache2_plugin.inc.php
ln -s /usr/local/ispconfig/server/plugins-available/nginx_plugin.inc.php /usr/local/ispconfig/server/plugins-enabled/nginx_plugin.inc.php
Regards,
Lars
Thanks for putting this together, Florian! I noticed a syntax error/typo that threw me. The semicolon is missing at the end of this line, in the first NGINX vhost example (for TLS/SSL):
ssl_certificate /usr/local/ispconfig/interface/ssl/ispserver.crt #<— missing semicolon at the end
Thanks again for this most helpful how-to!
…great stuff!
Hi Florian,
Could you please post a vice-versa tutorial i.e. nginx to apache on ISPC 3 ?
Thanks a lot for your helpful tutorial.
Regards,
Vikram
when i follow your steps I get 502 error on nginx
any thoughts?
Seems you have problem with php-fpm. Did you install php-fpm? You can find additional infos in your logs (nginx, php-fpm). You can also try to use php-fpm for the site without the php-socket-file (webdomain / options).
yes, fpm is installed.
i noticed this error in the logs
connect() to unix:/var/run/ispconfig.sock failed (2: No such file or directory) while connecting to upstream
when i change it to 127.0.0.1:9000, i get the following error (which seems to be permissions more than anything)
PHP Fatal error: require_once(): Failed opening required ‘../lib/config.inc.php’ (include_path=’.:/usr/share/php:/usr/share/pear’) in /usr/local/ispconfig/interface/web/index.php on line 31
but permissions did not change, do I need to set them differently?
fyi i did find this post on stackoverflow which caused me to add the answer from xander… as I was running into this problem earlier. http://stackoverflow.com/questions/23443398/nginx-error-connect-to-php5-fpm-sock-failed-13-permission-denied
I never used this on the server that runs the interface (i installed is with nginx aleady running). You may need to update ISPConfig with reconfigure services. This should update the configs for the interface, too.