Я посмотрел на репозиторий Perusio drupal-with-nginx, и, хотя я думаю, что он впечатляет, насколько он обширный, в данный момент он может быть слишком сложным для меня, плюс у меня есть несколько сайтов на базе Symfony2, работающих на сервере, и Я не начинаю вносить существенные изменения, пока полностью не пойму конфигурации.
Так что я нашел это в блоге и подумал, что это может сработать. Существуют ли какие-либо распространенные подводные камни при обслуживании drupal 7 над nginx? Кроме того, если одна и та же установка Drupal предназначена для питания более чем одного сайта, конфигурация будет другой?
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
Адам-E
источник
источник
Ответы:
Основная проблема, которую Drupal 7 имеет с nginx, заключается в том, что Drupal предназначен для Apache, и поэтому многие модули предполагают, что Apache установлен (и у вас всегда будет небольшая голубая запись в «Отчете о состоянии», которая говорит вам, что вы не можете использовать Upload Progress, потому что mod_php не установлен - раздражает).
Тем не менее, благодаря perusio и другим, было создано много модулей, которые больше работают с nginx и хорошо используют его функциональность. До сих пор я не сталкивался с какой-либо проблемой nginx, которая была бы исправлена Apache, и nginx намного быстрее и занимает гораздо меньше места. Это показано многими тестами, но это также и мой опыт. Он также лучше интегрирован с php5-fpm, который также превосходит mod_php.
По мере развития Drupal он становится все более независимым от бэкэнда. Вы можете убедиться в этом на уровне абстракции базы данных 7, который позволяет использовать больше баз данных, и поэтому я предполагаю, что будущие выпуски будут разрабатываться с учетом других веб-серверов.
Так что я не вижу никаких подводных камней. Вам просто нужно уделить немного больше внимания тому, что делают некоторые модули, или, по крайней мере, тому, что они говорят. Если они упоминают файлы .htaccess, убедитесь, что в ваших файлах nginx есть соответствующие записи, которые делают то же самое. На самом деле я не видел случая, когда nginx завершился неудачно с правильной конфигурацией.
Конфигурация Perusio nginx просто потрясающая, но требуется время, чтобы пройти через все это и понять это. Вам нужно будет настроить его для себя, и вы можете столкнуться с некоторыми проблемами, которые вам нужно будет исправить, если вы используете нестандартные настройки для таких вещей, как кеширование изображений или advagg или некоторые другие. Также предполагается, что вы используете более одного пула php-fpm. Так что вам нужно пройти и вытащить то, что не нужно. Но стоит потратить время на то, чтобы пройти через все это, потому что вы так много узнаете о том, как работает nginx.
Я также столкнулся с несколькими ошибками на своих сайтах nginx / drupal, потому что у меня есть тенденция использовать php-fpm 5.4 или 5.5. Ошибки не имеют ничего общего с nginx, но с самими функциями Drupal, так как Drupal только что завершил переход на php 5.3. Однако если вы осмотрите очереди проблем, вы найдете несколько исправлений и других решений для исправления модулей для работы с более новыми версиями php.
В конце дня я бы порекомендовал всем, кто начинает с нового сервера, использовать nginx вместо Apache. Это просто лучше.
источник
Я читал, что Nginx не может делать все, он ограничен по сравнению с Apache. «В Apache есть модуль для каждой задачи». По моему короткому опыту я использую Nginx в течение нескольких месяцев с Drupal, и все работает отлично. Если вы используете многосайтовую установку для Drupal и Nginx, вы можете установить несколько имен серверов в одной и той же конфигурации сервера, но вы не сможете иметь разные журналы для каждого сайта. Я использую этот конфиг без (почти) любой проблемы: https://www.nginx.com/resources/wiki/start/topics/recipes/drupal/
источник
Я полностью согласен с вами, что конфигурация Perginio для nginx для Drupal впечатляет, но, возможно, излишняя для локального экземпляра nginx. Я обнаружил, что файл конфигурации nginx Mulkave на GitHub является наиболее практичной и легкой конфигурацией для запуска Drupal 7 на nginx.
источник
источник