Как мы уже писали, мы переехали с 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