конфиг nginx для drupal 6


Как мы уже писали, мы переехали с Drupal 6 на статический генератор сайтов. Недавно просматривая старый репозиторий наткнулся на конфиг nginx и решил им заделиться, т.к. в свое время мы потратили немало времени на компоновку конфига nginx для drupal и доведение его до рабочего состояния.

В принципе, конфиг должен подойти и для новых версий Drupal, но я его не тестировал. Drupal 6 в свое время был выбран за стабильность и безопасность, а также его можно было практически бесконечно кастомизировать. Nginx был выбран за нетребовательность к ресурсам, и, как следствие, дешевизну хостинга и за скорость работы.

Вот весь конфиг целиком. Для лучшего понимания, что и зачем включено, рекомендую ознакомиться с официальной документацией.

server {
    listen *:80;
    server_name  www.prolinux.org prolinux.org;
    if ($host !~* ^www\.) {
        return 301 https://www.$host$request_uri;
    }
    return 301 https://$host$request_uri;
}
server {
# SSL config
    listen *:443;
    ssl on;
    ssl_certificate /home/www/blog/prolinux_chain.pem;
    ssl_certificate_key /home/www/blog/prolinux_startssl_dec.key;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
# HSTS enabled
    add_header Strict-Transport-Security 'max-age=604800';
## end SSL
    server_name  www.prolinux.org prolinux.org;
    if ($host !~* ^www\.) {
        return 301 https://www.$host$request_uri;
    }
    access_log /home/www/blog/logs/nginx-access.log;
    error_log /home/www/blog/logs/nginx-error.log;
    root   /home/www/blog/htdocs/;
    index  index.php;
    if (!-e $request_filename) {
        rewrite ^/(.*)$ /index.php?q=$1 last;
    }
    location = /favicon.ico {
        log_not_found off;
        access_log off;
    }
    location = /robots.txt {
        allow all;
        log_not_found off;
        access_log off;
    }
    location / {
        try_files $uri @rewrite;
        error_page 404 = @rewrite;
    }
    location @rewrite {
        rewrite ^/(.*)$ /index.php?q=$1 last;
    }
    location ~ \.php$ {
        fastcgi_pass unix:/var/run/php5-fpm.sock;
        fastcgi_index index.php;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        include fastcgi_params;
    }
    location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
        expires max;
        log_not_found off;
    }
    location ~ /\.git {
        deny all;
    }
    location ~ /\.ht {
        deny all;
    }
    location /db {
        deny all;
        return 403;
    }
}

Хочу обратить внимание на @rewrite блок. Он нужен для работы красивых ссылок, т.е. ссылок не /node/180, а вида /moya-statiya.

Также был изменен глобальный nginx.conf с целью повысить производительность. Но не буду углубляться об этом. Скажу только, что, в частности, были подтюнены такие параметры:

  • worker_rlimit_nofile
  • worker_processes
  • worker_connections
  • server_tokens
  • open_file_cache
  • sendfile
  • tcp_nopush
  • tcp_nodelay
  • keepalive_timeout
  • keepalive_requests
  • gzip_min_length
  • gzip_buffers
  • proxy_cache_path
  • types_hash_max_size
comments powered by Disqus