понедельник, 8 июля 2013 г.

Конфиг Nginx-а для Drupal-а и других движков

Данный пример конфига является примером некоторых конструкций и параметров настройки Nginx-а.



 # конфигурация nginx для гипотетического пользователя хостинга username для сайта номер "один"
       #
       # параметр listen и proxy_pass генерируется системой автоматически по внутренним параметрам
       server {
                listen 192.168.0.1:80;               # IP-адрес сервера
                proxy_buffer_size         8k;       # параметр изменяется в панели управления
                client_max_body_size   16m;    # параметр изменяется в панели управления
                client_body_buffer_size 512k;

                # кэш имён файлов для disable_symlinks
                open_file_cache          max=1000 inactive=20s; 
                open_file_cache_valid    30s;
                open_file_cache_min_uses 2;
                open_file_cache_errors   on;

                # имена сайта
                server_name example.com;
                server_name www.example.com

                # отключение лишних журналов
                access_log  off;
                log_not_found off;

                # корневая папка для статических файлов
                root /home/username/www/site1/public_html;
                index index.html;

                # запрет символьных ссылок на "чужие" файлы
                # если файл находится внутри папки /home/username/www/site1/public_html , 
                # то эту часть не проверять по соображением производительности
                disable_symlinks if_not_owner from=/home/username/www/site1/public_html;
                
                # обработать запрос, не соответствующий уточнениям ниже
                location / {
                        access_log /home/username/www/site1/logs/nginx-access.log;
                        charset utf-8;
                        source_charset utf-8;
                        try_files $uri @apache;
                }

                # запретить махинации с php
                location ~ \..*/.*\.php$ {
                        return 403;
                }
                # запретить доступ к резервным копиям извне
                location = /backup {
                        deny all;
                }

                # запретить доступ к файлам репозиториев, если они случайно оказались в публичном месте
                location ~ /\.svn {
                        deny all;
                }
                location ~ /\.git {
                        deny all;
                }
                location ~ /\.hg {
                        deny all;
                }

                # запретить доступ к файлам .htaccess и .htpasswd
                location ~ /\.ht {
                        deny all;
                }

                # отдать напрямую favicon.ico
                location = /favicon.ico {
                        access_log /home/username/www/site1/logs/nginx-access.log;
                }
                
                # отдать напрямую robots.txt
                location = /robots.txt {
                        allow all;
                        access_log /home/username/www/site1/logs/nginx-access.log;
                }

                # попытаться отдать файл с одним из расширений напрямую минуя apache
                location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
                        access_log /home/username/www/site1/logs/nginx-access.log;
                        charset utf-8;
                        source_charset utf-8;
                        expires 24h;
                }

                # попытаться отдать кэш изображений напрямую
                location ~ ^/sites/.*/files/imagecache/ {
                        try_files $uri @apache;
                }
                
                # попытаться отдать стили напрямую
                location ~ ^/sites/.*/files/styles/ {
                        try_files $uri @apache;
                }

                # запретить все прямые обращения к несуществующим файлам .php
                location ~ \.php$ {
                        try_files $uri =404;
                        proxy_pass  http://127.0.0.1:11111;
                }
                
                # передать запрос к apache
                location @apache {
                        proxy_pass  http://127.0.0.1:11111;
                }

        } 

IT-записки

comments powered by Disqus