वहाँ Drupal 7 साइटों के लिए एक आम nginx विश्वास है?


15

मैंने पेरुशियो के ड्रुपल-साथ-नेग्नेक्स रिपॉजिटरी पर एक नज़र डाली है और जबकि मुझे लगता है कि यह प्रभावशाली है कि यह कितना व्यापक है, यह फिलहाल मेरे लिए थोड़ा उन्नत हो सकता है, साथ ही मेरे पास सर्वर पर कई सिम्फनी 2 आधारित साइटें हैं। जब तक मैं कॉन्फ़िगरेशन को पूरी तरह से नहीं समझ लेता, तब तक मैं महत्वपूर्ण बदलाव करना शुरू नहीं करता।

इसलिए मैंने इसे एक ब्लॉग पर पाया और लगा कि यह काम कर सकता है। क्या नगनेक्स पर ड्रुपल 7 परोसने के साथ कोई सामान्य नुकसान है? इसके अलावा, यदि एक ही ड्रुपल इंस्टॉलेशन एक से अधिक साइटों को पावर करने के लिए था, तो क्या कॉन्फ़िगरेशन किसी भी अलग होगा?

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 विन्यास पहले से ही प्रत्येक / साइटों / * /
बहुआयामी

@ अच्छा लगा। मैं निश्चित रूप से इसे आज़माऊंगा। नेट पर मुझे मिलने वाले अधिकांश कॉन्फ़िगरेशन यह मान रहे थे कि नगनेक्स स्थापित नहीं था या कोई साइट पहले से कॉन्फ़िगर नहीं की गई है, यही वजह है कि मैं थोड़ा सतर्क हूं। साभार
एडम-ई

जवाबों:


7

Drupal 7 में nginx के साथ मुख्य समस्या यह है कि Drupal अपाचे के लिए डिज़ाइन किया गया है, और इतने सारे मॉड्यूल यह मानते हैं कि Apache स्थापित है (और आपके पास हमेशा "स्टेटस रिपोर्ट" पर थोड़ी नीली प्रविष्टि होगी जो आपको बताती है कि आप नहीं कर सकते हैं अपलोड प्रगति का उपयोग करें क्योंकि mod_php स्थापित नहीं है - कष्टप्रद)।

कहा जा रहा है, पेरुशियो और अन्य लोगों के लिए धन्यवाद, कई मॉड्यूल बनाए गए हैं जो नगनेक्स के साथ अधिक व्यवहार करते हैं और इसकी कार्यक्षमता में अच्छी तरह से टैप करते हैं। अब तक, मैं nginx के साथ किसी भी समस्या में नहीं चला हूं जो Apache द्वारा तय किया गया होगा, और nginx कहीं अधिक तेज़ है और इसमें बहुत हल्का पदचिह्न है। यह कई बेंचमार्क द्वारा दिखाया गया है, लेकिन यह मेरा अनुभव भी है। इसका php5-fpm के साथ बेहतर एकीकरण भी है, जो mod_php को बेहतर बनाता है।

जैसे-जैसे द्रुपाल विकसित होता है, वह अधिक बैकएंड अज्ञेय बन रहा है। आप इसे 7 के डेटाबेस अमूर्त परत के साथ देख सकते हैं जो अधिक डेटाबेस बैकएंड की अनुमति देता है, और इसलिए मैं मानता हूं कि भविष्य के रिलीज को अन्य वेब सर्वर के साथ डिजाइन किया जाएगा।

इसलिए, कोई नुकसान नहीं है जो मैंने बिल्कुल देखा है। आपको बस कुछ अधिक ध्यान देना होगा कि कुछ मॉड्यूल क्या करते हैं, या कम से कम वे जो कहते हैं, वे करते हैं। यदि वे .htaccess फ़ाइलों का उल्लेख करते हैं, तो सुनिश्चित करें कि आपकी nginx फ़ाइलों में संबंधित प्रविष्टियाँ हैं जो समान कार्य करती हैं। मैंने वास्तव में एक ऐसा मामला नहीं देखा है जहाँ nginx एक उचित कॉन्फ़िगरेशन के साथ विफल हो जाता है।

पेरूसियो का नगनेक्स कॉन्फ़िगरेशन बिल्कुल अद्भुत है, लेकिन इसे सभी के माध्यम से प्राप्त करने और इसे समझने में काफी समय लगता है। आपको इसे अपने लिए अनुकूलित करने की आवश्यकता होगी, और आप कुछ समस्याओं में भाग सकते हैं जिन्हें आपको ठीक करने की आवश्यकता होगी यदि आप इमेजकास्टिंग या एडवाग या कुछ अन्य जैसी चीजों के लिए गैर-मानक सेटअप का उपयोग करते हैं। यह भी मानता है कि आप एक से अधिक php-fpm पूल का उपयोग कर रहे हैं। तो आप के माध्यम से जाने के लिए और क्या जरूरत नहीं है बाहर खींचने की आवश्यकता होगी। लेकिन यह समय के लिए यह सब के माध्यम से जाने के लिए इसके लायक है क्योंकि आप बहुत कुछ सीखेंगे कि नगनेक्स कैसे काम करता है।

मैंने अपने nginx / drupal साइटों के साथ कई त्रुटियों में भाग लिया है, क्योंकि मेरे पास php-fpm 5.4 / 5.5 का उपयोग करने की प्रवृत्ति है। त्रुटियों का नगनेक्स के साथ कोई लेना-देना नहीं है लेकिन ड्रुपल कार्यों के साथ खुद को ड्रुपल के रूप में वास्तव में php 5.3 की आवश्यकता के लिए एक संक्रमण खत्म कर रहा है। यदि आप समस्या की कतारों के आसपास देखते हैं, तो, आपको php के नए संस्करणों के साथ काम करने के लिए मॉड्यूल को ठीक करने के लिए कई पैच और अन्य समाधान मिलेंगे।

दिन के अंत में, मैं सलाह दूंगा कि जो कोई भी एक ताज़ा सर्वर के साथ शुरुआत कर रहा है, वह अपाचे के बजाय नग्नेक्स का उपयोग करे। यह बेहतर है।


4

मैंने पढ़ा है कि Nginx सब कुछ नहीं कर सकता, यह Apache के साथ तुलना में सीमित है। "अपाचे में प्रत्येक कार्य के लिए एक मॉड्यूल है"। अपने छोटे से अनुभव में मैं ड्रुपल के साथ कुछ महीनों के लिए नग्नेक्स का उपयोग कर रहा हूं और सब कुछ ठीक काम करता है। यदि आप Drupal और Nginx के लिए एक मल्टीसाइट इंस्टॉलेशन का उपयोग कर रहे हैं, तो आप एक ही सर्वर कॉन्फिगर पर कई सर्वर नाम सेट कर सकते हैं, लेकिन आप प्रत्येक साइट के लिए अलग लॉग नहीं कर पाएंगे। मैं बिना किसी समस्या के इस कॉन्फ़िगर का उपयोग करता हूं: https://www.nginx.com/resources/wiki/start/topics/recipes/drupal/


4
Apache Microsoft Word की तरह है, इसमें एक लाख विकल्प हैं लेकिन आपको केवल छह की आवश्यकता है। नग्नेक्स उन छह चीजों को करता है, और यह उनमें से पांच अपाचे की तुलना में 50 गुना तेज करता है। -
नगीनेक्स

2

मैं आपसे पूरी तरह सहमत हूं कि Drupal के लिए Perusio का nginx कॉन्फ़िगरेशन प्रभावशाली है, लेकिन शायद nginx के स्थानीय उदाहरण के लिए ओवरकिल है। मुझे लगता है कि GitHub पर मुल्कवे की नग्नेक्स कॉन्फ़िगरेशन फ़ाइल नगनेक्स पर ड्रुपल 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;
    }
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.