He echado un vistazo al repositorio drupal-with-nginx de Perusio y, aunque creo que es impresionante lo extenso que es, puede ser demasiado avanzado para mí en este momento, además tengo varios sitios basados en Symfony2 en vivo en el servidor y No empiezo a hacer cambios significativos hasta que entiendo completamente las configuraciones.
Así que encontré esto en un blog y pensé que podría hacer el trabajo. ¿Hay alguna dificultad común al servir drupal 7 sobre nginx? Además, si la misma instalación de Drupal fuera a alimentar más de un sitio, ¿la configuración sería 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
fuente
fuente
Respuestas:
El principal problema que tiene Drupal 7 con nginx es que Drupal está diseñado para Apache, y muchos módulos asumen que Apache está instalado (y siempre tendrá una pequeña entrada azul en su "Informe de estado" que le dice que no puede use Upload Progress porque mod_php no está instalado, molesto).
Dicho esto, gracias a perusio y otros, se han creado muchos módulos que tratan más con nginx y aprovechan bien su funcionalidad. Hasta ahora, no me he encontrado con ningún problema con nginx que hubiera sido reparado por Apache, y nginx es mucho más rápido y tiene una huella mucho más ligera. Esto se muestra en muchos puntos de referencia, pero también es mi experiencia. También tiene una mejor integración con php5-fpm, que también supera a mod_php.
A medida que Drupal se desarrolla, se vuelve más agnóstico de backend. Puede ver esto con la capa de abstracción de la base de datos de 7 que permite más backends de la base de datos, por lo que supongo que las futuras versiones se diseñarán teniendo en cuenta otros servidores web.
Entonces, no hay trampas que haya visto en absoluto. Solo tiene que prestar un poco más de atención a lo que hacen algunos de los módulos, o al menos a lo que dicen que hacen. Si mencionan archivos .htaccess, asegúrese de tener entradas correspondientes en sus archivos nginx que hagan lo mismo. En realidad, no he visto un caso en el que nginx falla con una configuración adecuada.
La configuración nginx de Perusio es absolutamente increíble, pero lleva bastante tiempo superarlo y comprenderlo. Tendrá que personalizarlo usted mismo, y es posible que tenga algunos problemas que deberá solucionar si usa configuraciones no estándar para cosas como el almacenamiento en caché de imágenes o advagg u otros. También supone que está utilizando más de un grupo php-fpm. Por lo tanto, tendrá que pasar y sacar lo que no se necesita. Pero vale la pena tomarse el tiempo para analizarlo todo porque aprenderá mucho sobre cómo funciona nginx.
También me he encontrado con varios errores con mis sitios nginx / drupal porque tengo tendencia a usar php-fpm 5.4 o 5.5. Los errores no tienen nada que ver con nginx, pero con las funciones de Drupal, ya que Drupal está realmente terminando una transición para requerir php 5.3. Sin embargo, si observa las colas de problemas, encontrará varios parches y otras soluciones para arreglar módulos para que funcionen con versiones más nuevas de php.
Al final del día, recomendaría que cualquiera que esté comenzando con un servidor nuevo use nginx en lugar de Apache. Es solo mejor.
fuente
He leído que Nginx no puede hacer todo, es limitado en comparación con Apache. "Apache tiene un módulo para cada tarea". En mi corta experiencia, he estado usando Nginx durante un par de meses con Drupal y todo funciona bien. Si está utilizando una instalación multisitio para Drupal y Nginx, puede configurar varios nombres de servidor en la misma configuración de servidor, pero no podrá tener registros diferentes para cada sitio. Uso esta configuración sin (casi) ningún problema: https://www.nginx.com/resources/wiki/start/topics/recipes/drupal/
fuente
Estoy completamente de acuerdo con usted en que la configuración nginx de Perusio para Drupal es impresionante, pero tal vez exagerada para una instancia local de nginx. He encontrado que el archivo de configuración nginx de Mulkave en GitHub es la configuración más práctica y liviana para ejecutar Drupal 7 en nginx.
fuente
fuente