Saya sudah melihat-lihat repositori drupal-dengan-nginx Perusio dan sementara saya pikir itu mengesankan betapa luasnya itu, mungkin agak terlalu canggih bagi saya saat ini, ditambah saya memiliki beberapa situs berbasis Symfony2 yang tinggal di server dan Saya tidak mulai membuat perubahan signifikan sampai saya sepenuhnya memahami konfigurasi.
Jadi saya menemukan ini di blog dan saya pikir itu bisa melakukan pekerjaan. Apakah ada jebakan umum dengan penyajian drupal 7 di atas nginx? Juga, jika instalasi Drupal yang sama untuk memberi daya lebih dari satu situs, apakah konfigurasinya akan berbeda?
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
sumber
sumber
Jawaban:
Masalah utama yang dimiliki Drupal 7 dengan nginx adalah Drupal dirancang untuk Apache, dan begitu banyak modul mengasumsikan bahwa Apache diinstal (dan Anda akan selalu memiliki entri biru kecil pada "Laporan Status" yang memberi tahu Anda bahwa Anda tidak bisa gunakan Unggah Kemajuan karena mod_php tidak diinstal - mengganggu).
Yang sedang berkata, terima kasih kepada perusio dan lainnya, banyak modul telah dibuat yang lebih berhubungan dengan nginx dan memanfaatkan fungsinya dengan baik. Sejauh ini, saya belum mengalami masalah dengan nginx yang akan diperbaiki oleh Apache, dan nginx jauh lebih cepat dan memiliki jejak yang jauh lebih ringan. Ini ditunjukkan oleh banyak tolok ukur, tetapi juga pengalaman saya. Ini juga memiliki integrasi yang lebih baik dengan php5-fpm, yang juga mengungguli mod_php.
Ketika Drupal berkembang, ia menjadi agnostik backend. Anda dapat melihat ini dengan lapisan abstraksi basis data 7 yang memungkinkan backend basis data lebih banyak, jadi saya berasumsi bahwa rilis mendatang akan dirancang dengan mempertimbangkan server web lain.
Jadi, tidak ada jebakan yang pernah saya lihat sama sekali. Anda hanya perlu sedikit lebih memperhatikan apa yang dilakukan beberapa modul, atau setidaknya apa yang mereka lakukan. Jika mereka menyebutkan file .htaccess, maka pastikan Anda memiliki entri yang sesuai di file nginx Anda yang melakukan hal yang sama. Saya belum benar-benar melihat kasus di mana nginx gagal dengan konfigurasi yang tepat.
Konfigurasi nginx Perusio benar-benar luar biasa, tetapi butuh waktu cukup lama untuk melewati semuanya dan memahaminya. Anda AKAN perlu menyesuaikannya untuk diri Anda sendiri, dan Anda mungkin mengalami beberapa masalah yang harus Anda perbaiki jika Anda menggunakan pengaturan non-standar untuk hal-hal seperti imagecaching atau advagg atau yang lainnya. Ini juga mengasumsikan bahwa Anda menggunakan lebih dari satu kumpulan php-fpm. Jadi, Anda harus melewati dan mengeluarkan apa yang tidak diperlukan. Tetapi layak untuk meluangkan waktu untuk menjalani semuanya karena Anda akan belajar banyak tentang cara kerja nginx.
Saya juga mengalami beberapa kesalahan dengan situs nginx / drupal saya karena saya cenderung menggunakan php-fpm 5.4 atau 5.5. Kesalahan tidak ada hubungannya dengan nginx tetapi dengan fungsi Drupal sendiri karena Drupal hanya benar-benar menyelesaikan transisi ke membutuhkan php 5.3. Namun, jika Anda melihat-lihat masalah antrian, Anda akan menemukan beberapa tambalan dan solusi lain untuk memperbaiki modul agar dapat bekerja dengan versi php yang lebih baru.
Pada akhir hari, saya akan merekomendasikan bahwa siapa pun yang memulai dengan server baru menggunakan nginx bukan Apache. Itu lebih baik.
sumber
Saya pernah membaca bahwa Nginx tidak dapat melakukan semuanya, ini terbatas dibandingkan dengan Apache. "Apache memiliki modul untuk setiap tugas". Dalam pengalaman singkat saya, saya telah menggunakan Nginx selama beberapa bulan dengan Drupal dan semuanya berfungsi dengan baik. Jika Anda menggunakan pemasangan multisite untuk Drupal dan Nginx, Anda dapat menetapkan beberapa nama server pada konfigurasi server yang sama, tetapi Anda tidak akan dapat memiliki log yang berbeda untuk setiap situs. Saya menggunakan konfigurasi ini tanpa (hampir) masalah: https://www.nginx.com/resources/wiki/start/topics/recipes/drupal/
sumber
Saya sepenuhnya setuju dengan Anda bahwa konfigurasi nginx Perusio untuk Drupal sangat mengesankan, tetapi mungkin berlebihan untuk contoh lokal nginx. Saya telah menemukan file konfigurasi nginx Mulkave di GitHub menjadi konfigurasi yang paling praktis dan ringan untuk menjalankan Drupal 7 di nginx.
sumber
sumber