Drupal 7サイトの一般的なnginx confはありますか?


15

Perusioのdrupal-with-nginxリポジトリを見てみましたが、どれほど広大なのかは印象的ですが、現時点では少し高度すぎるかもしれません。さらに、Symfony2ベースのサイトがサーバー上に存在し、構成を完全に理解するまで、大幅な変更を開始しません。

それで、私はブログでこれを見つけて、それが仕事をするかもしれないと思いました。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;
    }
}

1
私が知っている落とし穴はありません。そのnginxの構成は、既に個別に各/サイト/ * /マルチサイトのディレクトリ...治療される
tenken

@tenkenいいね。私は確かにそれを試してみます。ネット上で見つけた構成のほとんどは、nginxがインストールされていないか、サイトが既に構成されていないことを前提としていたため、少し注意が必要です。ありがとう
アダム-E

回答:


7

Drupal 7がnginxで持つ主な問題は、DrupalがApache用に設計されていることです。また、多くのモジュールがApacheがインストールされていることを前提としています(そして、「ステータスレポート」には、 mod_phpがインストールされていないため、Upload Progressを使用してください-迷惑です)。

そうは言っても、perusioなどのおかげで、nginxをより多く処理し、その機能をうまく活用する多くのモジュールが作成されています。これまでのところ、Apacheによって修正されるnginxの問題に遭遇したことはなく、nginxははるかに高速で、フットプリントがはるかに軽いです。これは多くのベンチマークで示されていますが、私の経験でもあります。また、mod5-phpよりも優れているphp5-fpmとの統合も強化されています。

Drupalが開発されると、バックエンドにとらわれないようになります。これは、より多くのデータベースバックエンドを可能にする7のデータベース抽象化レイヤーで見ることができます。したがって、将来のリリースは他のWebサーバーを考慮して設計されると思います。

だから、私が見た落とし穴はまったくありません。いくつかのモジュールが何をするのか、少なくともモジュールが何をするのかについて、もう少し注意を払う必要があります。彼らが.htaccessファイルに言及している場合は、同じことを行うnginxファイルに対応するエントリがあることを確認してください。nginxが適切な設定で失敗するケースは実際には見たことがありません。

Perusioのnginxの構成は驚くべきものですが、すべてを理解して理解するにはかなり時間がかかります。自分用にカスタマイズする必要があります。また、イメージキャッシングやadvaggなどのようなものに非標準のセットアップを使用する場合は、修正する必要があるいくつかの問題が発生する可能性があります。また、複数のphp-fpmプールを使用していることを前提としています。そのため、必要のないものをすべて引き出して引き出す必要があります。しかし、nginxがどのように機能するかについて多くを学ぶので、時間をかけてすべてを理解する価値があります。

また、php-fpm 5.4または5.5を使用する傾向があるため、nginx / drupalサイトでいくつかのエラーに遭遇しました。エラーはnginxとは関係ありませんが、Drupalは本当にPHP 5.3を要求するように移行を終えているため、Drupalの機能自体とは関係ありません。ただし、問題のキューを調べてみると、新しいバージョンのphpで機能するようにモジュールを修正するためのいくつかのパッチやその他のソリューションが見つかります。

結局のところ、新しいサーバーを使用している人はApacheの代わりにnginxを使用することをお勧めします。それはちょうど良いです。


4

Nginxはすべてを実行できるわけではなく、Apacheと比較して制限されていることを読みました。「Apacheにはすべてのタスク用のモジュールがあります」。私の短い経験では、DrupalでNginxを数か月使用してきましたが、すべて正常に動作します。DrupalとNginxのマルチサイトインストールを使用している場合、同じサーバー構成に複数のサーバー名を設定できますが、サイトごとに異なるログを作成することはできません。私はこの設定を(ほとんど)何の問題もなく使用しています:https : //www.nginx.com/resources/wiki/start/topics/recipes/drupal/


4
ApacheはMicrosoft Wordに似ており、100万のオプションがありますが、必要なのは6つだけです。Nginxはこれらの6つのことを行い、そのうち5つはApacheの50倍高速です。— nginxとWordpressのChris Lea
SGhosh

2

PerusioのDrupal用のnginxの設定は印象的ですが、nginxのローカルインスタンスでは多すぎるかもしれません。GitHub上のMulkaveのnginx構成ファイルは、nginxでDrupal 7を実行するための最も実用的で軽量な構成であることがわかりました。


0
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;
    }
}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.