Ich habe mir das Drupal-with-Nginx-Repository von Perusio angesehen und finde es zwar beeindruckend, wie umfangreich es ist, aber im Moment ist es vielleicht etwas zu fortgeschritten für mich. Außerdem habe ich mehrere Symfony2-basierte Sites auf dem Server und Ich werde keine wesentlichen Änderungen vornehmen, bis ich die Konfigurationen vollständig verstanden habe.
Also fand ich das auf einem Blog und dachte, es könnte die Arbeit erledigen. Gibt es häufige Probleme beim Servieren von Drupal 7 über Nginx? Wenn dieselbe Drupal-Installation mehrere Standorte mit Strom versorgen würde, würde sich die Konfiguration unterscheiden?
server {
server_name example.org;
root /home/me/sites/example.org;
index index.html index.htm index.php;
access_log /var/log/nginx/example.org.access.log;
error_log /var/log/nginx/example.org.error.log;
location = /favicon.ico {
log_not_found off;
access_log off;
}
location = /robots.txt {
allow all;
log_not_found off;
access_log off;
}
# For drush
location = /backup {
deny all;
}
# Prevent user from accessing settings.php directly
location ~ ^/sites/[^/]+/settings.php$ {
deny all;
}
## Replicate the Apache <FilesMatch> directive of Drupal standard
## .htaccess. Disable access to any code files. Return a 404 to curtail
## information disclosure. Hide also the text files.
location ~* ^(?:.+\.(?:htaccess|make|txt|log|engine|inc|info|install|module|profile|po|sh|.*sql|theme|tpl(?:\.php)?|xtmpl)|code-style\.pl|/Entries.*|/Repository|/Root|/Tag|/Template)$ {
return 404;
}
location ~ \..*/.*\.php$ {
return 403;
}
location / {
# This is cool because no php is touched for static content
try_files $uri @rewrite;
}
location @rewrite {
# Some modules enforce no slash (/) at the end of the URL
# Else this rewrite block wouldn't be needed (GlobalRedirect)
#rewrite ^/(.*)$ /index.php?q=$1&$args;
rewrite ^ /index.php last;
}
# Use an SSH tunnel to access those pages. They shouldn't be visible to
# external peeping eyes.
location = /install.php {
allow 127.0.0.1;
deny all;
}
location = /update.php {
allow 127.0.0.1;
deny all;
}
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
#NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_intercept_errors on;
fastcgi_pass unix:/var/run/php5-cgi/php5.sock;
}
## Drupal 7 generated image handling, i.e., imagecache in core. See:
## https://drupal.org/node/371374
location ~* /sites/.*/files/styles/ {
access_log off;
expires 30d;
try_files $uri @rewrite;
}
# Fighting with ImageCache? This little gem is amazing.
location ~ ^/sites/.*/files/imagecache/ {
try_files $uri @rewrite;
}
location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
expires max;
log_not_found off;
}
}
7
multi-sites
nginx
Adam-E
quelle
quelle
Antworten:
Das Hauptproblem, das Drupal 7 mit Nginx hat, ist, dass Drupal für Apache entwickelt wurde und so viele Module davon ausgehen, dass Apache installiert ist benutze Upload Progress weil mod_php nicht installiert ist (nervig).
Trotzdem wurden dank Perusio und anderen viele Module entwickelt, die sich mehr mit Nginx befassen und dessen Funktionalität gut ausnutzen. Bisher habe ich keine Probleme mit Nginx, die von Apache behoben worden wären, und Nginx ist weitaus schneller und hat eine viel geringere Stellfläche. Dies zeigen viele Benchmarks, aber es ist auch meine Erfahrung. Es hat auch eine bessere Integration mit php5-fpm, die auch mod_php übertrifft.
Während sich Drupal weiterentwickelt, wird es agnostischer im Backend. Dies lässt sich an der Datenbankabstraktionsschicht von 7 ablesen, die mehr Datenbank-Backends ermöglicht. Daher gehe ich davon aus, dass zukünftige Versionen für andere Webserver entwickelt werden.
Es gibt also überhaupt keine Fallstricke, die ich gesehen habe. Sie müssen nur ein bisschen mehr auf das achten, was einige der Module tun, oder zumindest, was sie sagen, dass sie tun. Wenn sie .htaccess-Dateien erwähnen, stellen Sie sicher, dass Sie entsprechende Einträge in Ihren Nginx-Dateien haben, die dasselbe tun. Ich habe noch keinen Fall gesehen, in dem Nginx mit einer richtigen Konfiguration fehlschlägt.
Die Nginx-Konfiguration von Perusio ist absolut erstaunlich, aber es dauert eine ganze Weile, bis Sie alles verstanden haben. Sie müssen es für sich anpassen, und es können Probleme auftreten, die behoben werden müssen, wenn Sie nicht standardmäßige Setups für Dinge wie Imagecaching oder Advagg oder andere verwenden. Es wird auch davon ausgegangen, dass Sie mehr als einen PHP-FPM-Pool verwenden. Also müssen Sie durchgehen und herausziehen, was nicht benötigt wird. Es lohnt sich jedoch, sich die Zeit zu nehmen, um alles durchzuarbeiten, da Sie so viel über die Funktionsweise von Nginx lernen werden.
Ich habe auch mehrere Fehler mit meinen Nginx / Drupal-Sites festgestellt, weil ich dazu neige, PHP-Fpm 5.4 oder 5.5 zu verwenden. Die Fehler haben nichts mit Nginx zu tun, aber mit Drupal selbst, da Drupal gerade den Übergang zu PHP 5.3 vollendet. Wenn Sie sich in den Problemwarteschlangen umsehen, finden Sie verschiedene Patches und andere Lösungen, um Module für neuere PHP-Versionen zu reparieren.
Letztendlich würde ich jedem empfehlen, der mit einem neuen Server startet, nginx anstelle von Apache zu verwenden. Es ist einfach besser.
quelle
Ich habe gelesen, dass Nginx nicht alles kann, es ist im Vergleich zu Apache begrenzt. "Apache hat für jede Aufgabe ein Modul". Nach meiner kurzen Erfahrung benutze ich Nginx seit ein paar Monaten mit Drupal und alles funktioniert einwandfrei. Wenn Sie eine Installation mit mehreren Standorten für Drupal und Nginx verwenden, können Sie mehrere Servernamen in derselben Serverkonfiguration festlegen, es können jedoch nicht für jeden Standort unterschiedliche Protokolle erstellt werden. Ich benutze diese Konfiguration ohne (fast) Probleme: https://www.nginx.com/resources/wiki/start/topics/recipes/drupal/
quelle
Ich stimme Ihnen voll und ganz zu, dass Perusios Nginx-Konfiguration für Drupal beeindruckend ist, aber für eine lokale Instanz von Nginx vielleicht übertrieben. Ich habe festgestellt, dass Mulkaves Nginx-Konfigurationsdatei auf GitHub die praktischste und leichteste Konfiguration ist, um Drupal 7 auf Nginx auszuführen .
quelle
quelle