Drupal 7 siteleri için ortak bir nginx conf var mı?


15

Perusio'nun nginx ile drupal deposuna bir göz attım ve ne kadar geniş olduğunu etkileyici olsa da, şu anda benim için biraz fazla gelişmiş olabilir, ayrıca sunucuda birkaç Symfony2 tabanlı sitem var ve Yapılandırmaları tam olarak anlayana kadar önemli değişiklikler yapmaya başlamam.

Bunu bir blogda buldum ve işini yapabileceğini düşündüm. Nginx üzerinde drupal 7'ye hizmet eden yaygın tuzaklar var mı? Ayrıca, aynı Drupal kurulumu birden fazla sahaya güç sağlamaksa, yapılandırma farklı olabilir mi?

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
farkında olduğum tuzaklar yok. Bu nginx yapılandırması zaten her / sites / * /
multisite

@tenken güzel. Kesinlikle deneyeceğim. İnternette bulduğum yapılandırmaların çoğu, nginx'in yüklü olmadığını veya hiçbir sitenin önceden yapılandırılmadığını varsayıyordu, bu yüzden biraz temkinliyim. Teşekkürler
Adam-E

Yanıtlar:


7

Drupal 7'nin nginx ile ilgili temel sorunu, Drupal'ın Apache için tasarlanması ve pek çok modülün Apache'nin kurulu olduğunu varsayar (ve "Durum Raporunuzda" her zaman küçük bir mavi girişiniz olur. mod_php yüklü olmadığı için Yükleme İlerlemesini kullanın - sinir bozucu).

Bununla birlikte, perusio ve diğerleri sayesinde, nginx ile daha fazla ilgilenen ve işlevselliğini iyi kullanan birçok modül oluşturuldu. Şimdiye kadar, Apache tarafından düzeltilen nginx ile ilgili herhangi bir sorunla karşılaşmadım ve nginx çok daha hızlı ve çok daha hafif bir ayak izine sahip. Bu birçok kriterle gösterilir, ama aynı zamanda benim deneyimim. Ayrıca mod_php'den daha iyi performans gösteren php5-fpm ile daha iyi entegrasyona sahiptir.

Drupal geliştikçe, arka uç agnostik hale geliyor. Daha fazla veritabanı arka uçları sağlayan 7'nin veritabanı soyutlama katmanı ile bunu görebilirsiniz ve bu nedenle gelecekteki sürümlerin diğer web sunucuları göz önünde bulundurularak tasarlanacağını varsayıyorum.

Yani, gördüğüm hiçbir tuzak yok. Bazı modüllerin ne yaptığına ya da en azından söylediklerine biraz daha fazla dikkat etmeniz gerekiyor. .Htaccess dosyalarından bahsediyorlarsa, nginx dosyalarınızda aynı şeyi yapan karşılık gelen girişlerin bulunduğundan emin olun. Aslında nginx'in uygun bir yapılandırma ile başarısız olduğu bir durum görmedim.

Perusio'nun nginx konfigürasyonu kesinlikle şaşırtıcı, ancak hepsini anlamak ve anlamak biraz zaman alıyor. Kendiniz için özelleştirmeniz gerekecek ve imagecaching veya advagg gibi şeyler için standart olmayan kurulumlar kullanırsanız düzeltmeniz gereken bazı sorunlarla karşılaşabilirsiniz. Ayrıca birden fazla php-fpm havuzu kullandığınızı varsayar. Bu yüzden geçip ihtiyacınız olmayan şeyleri çıkarmanız gerekecek. Ancak, her şeyin üstesinden gelmek için zaman ayırmaya değer çünkü nginx'in nasıl çalıştığı hakkında çok şey öğreneceksiniz.

Ben de php-fpm 5.4 veya 5.5 kullanma eğilimi var çünkü benim nginx / drupal siteleri ile birkaç hatalar karşılaştım. Hatalar nginx ile ilgisi yoktur, ancak Drupal sadece gerçekten php 5.3 gerektiren bir geçiş bitiyor gibi Drupal fonksiyonları ile kendilerini. Bununla birlikte, sorun kuyruklarına bakarsanız, php'nin yeni sürümleriyle çalışmak üzere modülleri düzeltmek için birkaç düzeltme eki ve diğer çözümler bulacaksınız.

Günün sonunda, taze bir sunucu ile başlayan herkesin Apache yerine nginx kullanmasını tavsiye ederim. Sadece daha iyi.


4

Nginx'in her şeyi yapamayacağını okudum, Apache ile karşılaştırıldığında sınırlı. "Apache'nin her görev için bir modülü var". Kısa deneyimimde, Dginal ile birkaç aydır Nginx kullanıyorum ve her şey iyi çalışıyor. Drupal ve Nginx için çok siteli bir kurulum kullanıyorsanız, aynı sunucu yapılandırmasında birden çok sunucu adı ayarlayabilirsiniz, ancak her site için farklı günlüklere sahip olamayacaksınız. Bu yapılandırmayı (neredeyse) herhangi bir sorun olmadan kullanıyorum: https://www.nginx.com/resources/wiki/start/topics/recipes/drupal/


4
Apache Microsoft Word gibidir, bir milyon seçeneğe sahiptir, ancak sadece altıya ihtiyacınız vardır. Nginx bu altı şeyi yapar ve beşini Apache'den 50 kat daha hızlı yapar. - Chris Lea nginx ve Wordpress'te
SGhosh


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;
    }
}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.