Dei uma olhada no repositório drupal-with-nginx do Perusio e, embora seja impressionante o quão extenso, ele pode ser um pouco avançado para mim no momento, além de ter vários sites baseados no Symfony2 ao vivo no servidor e Não começo a fazer alterações significativas até entender completamente as configurações.
Então, eu achei isso em um blog e achei que poderia fazer o trabalho. Existem armadilhas comuns em servir o drupal 7 sobre o nginx? Além disso, se a mesma instalação do Drupal alimentasse mais de um site, a configuração seria diferente?
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
fonte
fonte
Respostas:
O principal problema que o Drupal 7 tem com o nginx é que o Drupal foi projetado para o Apache, e muitos módulos assumem que o Apache está instalado (e você sempre terá uma pequena entrada azul no seu "Relatório de status" que indica que você não pode use o Upload Progress porque o mod_php não está instalado - é irritante).
Dito isto, graças ao perusio e outros, muitos módulos foram criados para lidar mais com o nginx e aproveitar bem sua funcionalidade. Até agora, não encontrei nenhum problema com o nginx que teria sido corrigido pelo Apache, e o nginx é muito mais rápido e tem uma pegada muito mais leve. Isso é mostrado por muitos benchmarks, mas também é minha experiência. Ele também possui uma melhor integração com o php5-fpm, que também supera o mod_php.
À medida que o Drupal se desenvolve, ele se torna mais agnóstico. Você pode ver isso com a camada de abstração de banco de dados do 7, que permite mais back-ends de banco de dados, e por isso presumo que lançamentos futuros serão projetados com outros servidores da Web em mente.
Portanto, não há armadilhas que eu já tenha visto. Você só precisa prestar um pouco mais de atenção ao que alguns dos módulos fazem, ou pelo menos ao que eles dizem que fazem. Se eles mencionarem arquivos .htaccess, verifique se você possui entradas correspondentes nos arquivos nginx que fazem a mesma coisa. Na verdade, eu não vi um caso em que o nginx falha com uma configuração adequada.
A configuração nginx do Perusio é absolutamente incrível, mas leva um bom tempo para passar por tudo e entender. Você precisará personalizá-lo por conta própria e poderá encontrar alguns problemas que precisará corrigir se usar configurações não padrão para coisas como armazenamento de imagens, advagg ou outros. Ele também pressupõe que você esteja usando mais de um pool de php-fpm. Então, você precisará passar e retirar o que não é necessário. Mas vale a pena dedicar algum tempo para analisar tudo, porque você aprenderá muito sobre como o nginx funciona.
Também encontrei vários erros nos meus sites nginx / drupal porque tenho a tendência de usar o php-fpm 5.4 ou 5.5. Os erros não têm nada a ver com nginx, mas com as próprias funções do Drupal, pois o Drupal está realmente finalizando uma transição para exigir o php 5.3. Se você examinar as filas de problemas, no entanto, encontrará várias correções e outras soluções para corrigir os módulos para trabalhar com versões mais recentes do php.
No final do dia, eu recomendaria que qualquer pessoa que estivesse iniciando com um servidor novo usasse o nginx em vez do Apache. É apenas melhor.
fonte
Eu li que o Nginx não pode fazer tudo, é limitado em comparação com o Apache. "O Apache possui um módulo para todas as tarefas". Na minha curta experiência, uso o Nginx há alguns meses com o Drupal e tudo funciona bem. Se você estiver usando uma instalação multisite para Drupal e Nginx, poderá definir vários nomes de servidor na mesma configuração de servidor, mas não poderá ter logs diferentes para cada site. Eu uso essa configuração sem (quase) qualquer problema: https://www.nginx.com/resources/wiki/start/topics/recipes/drupal/
fonte
Concordo plenamente com você que a configuração do nginx do Perusio para o Drupal é impressionante, mas talvez exagere em uma instância local do nginx. Eu achei o arquivo de configuração nginx do Mulkave no GitHub a configuração mais prática e leve para executar o Drupal 7 no nginx.
fonte
fonte