私は Perusioのdrupal-with-nginxリポジトリ を確認しましたが、それがどれほど広範であるかは印象的だと思いますが、現時点では少し高度すぎるかもしれません。加えて、いくつかのSymfony2がありますベースのサイトはサーバー上に存在し、構成を完全に理解するまで重要な変更を開始しません。
だから私はこれを blog で見つけ、それが仕事をするかもしれないと考えました。 nginxでdrupal 7を提供する場合の一般的な落とし穴はありますか?また、同じ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;
}
}
Drupal 7がnginxに伴う主な問題は、DrupalはApache用に設計されているため、多くのモジュールがApacheがインストールされていることを前提としています(そして、 mod_phpがインストールされていないためにアップロードの進捗状況を使用できないことを示す「ステータスレポート」の小さな青色のエントリ-迷惑)。
そうは言っても、perusioなどのおかげで、nginxをより多く扱い、その機能をうまく活用する多くのモジュールが作成されました。これまでのところ、Apacheで修正されるnginxの問題は発生していません。nginxの方がはるかに高速で、フットプリントがはるかに軽いです。これは多くのベンチマークで示されていますが、私の経験でもあります。また、mod5-phpよりも優れたphp5-fpmとの統合が向上しています。
Drupalが発展するにつれ、バックエンドにとらわれなくなります。これは、より多くのデータベースバックエンドを可能にする7のデータベースアブストラクションレイヤーで確認できます。したがって、将来のリリースは他のWebサーバーで設計されると思います念頭に置いて。
したがって、私が見た落とし穴はまったくありません。いくつかのモジュールが何をしているか、少なくともモジュールが何を言っているかにもっと注意を払う必要があります。彼らが.htaccessファイルについて言及している場合は、nginxファイルに同じことを行う対応するエントリがあることを確認してください。 nginxが適切な構成で失敗するケースは実際には見ていません。
Perusioのnginx設定は本当に素晴らしいですが、すべてを理解して理解するにはかなりの時間がかかります。自分用にカスタマイズする必要があります。また、イメージキャッシュやアドバッグなどの非標準のセットアップを使用する場合は、修正が必要な問題が発生する可能性があります。また、複数のphp-fpmプールを使用していることも前提としています。だから、あなたは通り抜けて、必要でないものを引き出す必要があるでしょう。しかし、nginxがどのように機能するかについては多くを学ぶことができるので、時間をかけてすべてを実行することは価値があります。
また、php-fpm 5.4または5.5を使用する傾向があるため、nginx/drupalサイトでいくつかのエラーに遭遇しました。エラーはnginxとは何の関係もありませんが、Drupal自体はDrupalとして機能しますが、実際にはphp 5.3を必要とする移行を終了しています。問題を回避する場合ただし、キューには、新しいバージョンのphpで動作するようにモジュールを修正するためのパッチやその他のソリューションがいくつかあります。
結局のところ、新しいサーバーから始める人には、Apacheではなくnginxを使用することをお勧めします。それだけです。
Nginxはすべてを実行できるわけではないことを読みました。Apacheと比較すると制限があります。 「Apacheにはすべてのタスク用のモジュールがあります」。私の短い経験では、Nginxを2か月間Drupalで使用しており、すべてが正常に動作します。マルチサイトインストールをDrupalおよびNginxを使用すると、同じサーバー構成で複数のサーバー名を設定できますが、サイトごとに異なるログを作成することはできません。この構成は、(ほとんど)問題なく使用できます https://www.nginx。 com/resources/wiki/start/topics/recipes/drupal /
Perusioのnginx設定Drupalは印象的ですが、おそらくnginxのローカルインスタンスには過剰です。私は Mulkaveのnginx設定ファイルをGitHub は、nginxでDrupal 7を実行するための最も実用的で軽量な構成です。
server {
listen *:80;
access_log /var/log/nginx/test.access.log;
error_log /var/log/nginx/test.error.log;
root /srv/test;
index index.html index.htm index.php;
# Enable compression, this will help if you have for instance advagg module
# by serving Gzip versions of the files.
gzip_static on;
location = /favicon.ico {
log_not_found off;
access_log off;
}
location = /robots.txt {
allow all;
log_not_found off;
access_log off;
}
# This matters if you use drush prior to 5.x
# After 5.x backups are stored outside the Drupal install.
#location = /backup {
# deny all;
#}
# Very rarely should these ever be accessed outside of your lan
location ~* \.(txt|log)$ {
allow 192.168.0.0/16;
deny all;
}
location ~ \..*/.*\.php$ {
return 403;
}
# No no for private
location ~ ^/sites/.*/private/ {
return 403;
}
# Block access to "hidden" files and directories whose names begin with a
# period. This includes directories used by version control systems such
# as Subversion or Git to store control files.
location ~ (^|/)\. {
return 403;
}
location / {
# This is cool because no php is touched for static content
try_files $uri @rewrite;
}
location @rewrite {
# You have 2 options here
# For D7 and above:
# Clean URLs are handled in drupal_environment_initialize().
rewrite ^ /index.php last;
# For Drupal 6 and bwlow:
# 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;
}
# Fighting with Styles? This little gem is amazing.
# This is for D6
#location ~ ^/sites/.*/files/imagecache/ {
# This is for D7 and D8
location ~* files/styles {
access_log off;
expires 30d;
try_files $uri @rewrite;
}
location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
expires max;
log_not_found off;
}
location ~ [^/]\.php(/|$) {
fastcgi_index index.php;
include fcgi.conf;
fastcgi_pass unix:/var/run/ajenti-v-php-fcgi-test-php-fcgi-0.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
}