Rzuciłem okiem na repozytorium drupal-with-nginx Perusio i choć wydaje mi się, że imponujące jest jego rozległość, w tej chwili może być dla mnie trochę zbyt zaawansowane, a ponadto mam kilka witryn opartych na Symfony2 na serwerze i Nie zaczynam wprowadzać znaczących zmian, dopóki nie w pełni zrozumiem konfiguracje.
Znalazłem to na blogu i pomyślałem, że to może zadziałać. Czy są jakieś typowe pułapki związane z serwowaniem drupala 7 przez Nginx? Ponadto, gdyby ta sama instalacja Drupala miała zasilać więcej niż jedną stronę, czy konfiguracja byłaby inna?
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
źródło
źródło
Odpowiedzi:
Główny problem Drupala 7 z nginx polega na tym, że Drupal jest zaprojektowany dla Apache, a tak wiele modułów zakłada, że Apache jest zainstalowany (i zawsze będziesz miał mały niebieski wpis w „Raporcie stanu”, który mówi, że nie możesz użyj Postępu przesyłania, ponieważ mod_php nie jest zainstalowany - irytujące).
To powiedziawszy, dzięki perusio i innym, stworzono wiele modułów, które lepiej radzą sobie z nginx i dobrze wykorzystują jego funkcjonalność. Do tej pory nie napotkałem żadnego problemu z nginx, który zostałby naprawiony przez Apache, a nginx jest znacznie szybszy i ma znacznie mniejszą powierzchnię. Wskazuje na to wiele testów, ale to także moje doświadczenie. Ma także lepszą integrację z php5-fpm, co również przewyższa mod_php.
W miarę rozwoju Drupala staje się on coraz bardziej agresywny. Możesz to zobaczyć dzięki warstwie abstrakcji bazy danych 7, która pozwala na więcej backendów bazy danych, więc zakładam, że przyszłe wydania będą projektowane z myślą o innych serwerach WWW.
Więc nie ma w ogóle żadnych pułapek. Musisz tylko zwrócić nieco większą uwagę na to, co robią niektóre moduły, a przynajmniej na to, co mówią. Jeśli wspominają pliki .htaccess, upewnij się, że masz odpowiednie wpisy w plikach nginx, które robią to samo. Tak naprawdę nie widziałem przypadku, w którym nginx zawodzi przy prawidłowej konfiguracji.
Konfiguracja Nginx w Perusio jest absolutnie niesamowita, ale zajmuje to sporo czasu, aby przejść przez to wszystko i zrozumieć. Będziesz musiał dostosować go dla siebie i możesz napotkać pewne problemy, które musisz rozwiązać, jeśli używasz niestandardowych ustawień do takich zadań, jak imagecaching lub advagg lub kilka innych. Zakłada również, że używasz więcej niż jednej puli php-fpm. Musisz więc przejść i wyciągnąć to, czego nie potrzebujesz. Ale warto poświęcić czas, aby przejść przez to wszystko, ponieważ dowiesz się wiele o tym, jak działa nginx.
Wystąpił również szereg błędów w moich witrynach nginx / drupal, ponieważ mam tendencję do korzystania z php-fpm 5.4 lub 5.5. Błędy nie mają nic wspólnego z nginx, ale z samymi funkcjami Drupala, ponieważ Drupal właśnie kończy przejście na wymaganie php 5.3. Jeśli jednak rozejrzysz się po kolejkach problemów, znajdziesz kilka poprawek i innych rozwiązań, aby naprawić moduły współpracujące z nowszymi wersjami php.
Na koniec polecam wszystkim, którzy zaczynają od nowego serwera, używać nginx zamiast Apache. Po prostu lepiej.
źródło
Czytałem, że Nginx nie może zrobić wszystkiego, jest ograniczony w porównaniu z Apache. „Apache ma moduł do każdego zadania”. Z mojego krótkiego doświadczenia korzystam od Nginx od kilku miesięcy z Drupalem i wszystko działa dobrze. Jeśli korzystasz z instalacji na wielu serwerach dla Drupal i Nginx, możesz ustawić wiele nazw serwerów dla tej samej konfiguracji serwera, ale nie będziesz mieć różnych dzienników dla każdej witryny. Używam tej konfiguracji bez (prawie) żadnego problemu: https://www.nginx.com/resources/wiki/start/topics/recipes/drupal/
źródło
Całkowicie się z tobą zgadzam, że konfiguracja Perusio nginx dla Drupala jest imponująca, ale być może przesada w przypadku lokalnej instancji nginx. Odkryłem, że plik konfiguracyjny Nginx Mulkave na GitHub jest najbardziej praktyczną i lekką konfiguracją do uruchamiania Drupala 7 na Nginx.
źródło
źródło