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 설정은 이미 각 / sites / * / 멀티 사이트 디렉토리를 개별적으로 처리하고 있습니다.
tenken

@tenken 좋은. 나는 그것을 시험해 볼 것이다. 내가 인터넷에서 찾은 대부분의 구성은 nginx가 설치되지 않았거나 사이트가 이미 구성되어 있지 않다고 가정했기 때문에 약간 신중합니다. 감사합니다
Adam-E

답변:


7

Drupal 7과 nginx의 주요 문제점은 Drupal이 Apache 용으로 설계되었으며 많은 모듈이 Apache가 설치되어 있다고 가정한다는 것입니다. mod_php가 설치되어 있지 않기 때문에 업로드 진행을 사용하십시오-성가신).

그러나 perusio 및 기타 기능 덕분에 nginx를 더 많이 다루고 기능을 잘 활용하는 많은 모듈이 만들어졌습니다. 지금까지 아파치에 의해 수정 된 nginx에는 아무런 문제가 없었으며 nginx는 훨씬 빠르며 발자국이 훨씬 적습니다. 이것은 많은 벤치 마크에서 보여 주지만 내 경험이기도합니다. 또한 php5-fpm과 더 잘 통합되어 있으며 mod_php보다 성능이 뛰어납니다.

Drupal이 개발됨에 따라 백엔드에 무관심 해지고 있습니다. 더 많은 데이터베이스 백엔드를 허용하는 7의 데이터베이스 추상화 계층에서 이것을 볼 수 있으므로 향후 릴리스는 다른 웹 서버를 염두에두고 설계 될 것이라고 가정합니다.

따라서 내가 본 함정은 없습니다. 일부 모듈의 기능 또는 최소한 그들이하는 기능에 조금 더주의를 기울여야합니다. 그들이 .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에 비해 제한적입니다. "아파치에는 모든 작업을위한 모듈이 있습니다." 짧은 경험으로 Drupal과 함께 몇 달 동안 Nginx를 사용했으며 모든 것이 잘 작동합니다. Drupal 및 Nginx에 다중 사이트 설치를 사용하는 경우 동일한 서버 구성에서 여러 서버 이름을 설정할 수 있지만 각 사이트마다 다른 로그를 가질 수는 없습니다. 나는 거의 모든 문제 없이이 구성을 사용합니다 : https://www.nginx.com/resources/wiki/start/topics/recipes/drupal/


4
Apache는 Microsoft Word와 비슷하지만 백만 개의 옵션이 있지만 6 개만 필요합니다. Nginx는이 6 가지 작업을 수행하며, 그중 5 개는 Apache보다 50 배 빠릅니다. — nginx와 Wordpress에 관한 Chris Lea
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;
    }
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.