Готовые конфигурации Nginx для разных задач

В этой статье я приведу несколько готовых конфигураций Nginx, работающим в паре с Apache. Такая комбинация является рекомендуемой на многих хостингах.

Для обработки статических файлов веб-сервером 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 / {
                        proxy_pass  http://127.0.0.1:11111;
                }

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

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

                # попытаться отдать файл с одним из расширений напрямую минуя apache
                location ~* \.(swf|zip|rar|arj|cab|exe|dll|ico|jpg|jpeg|gif|bmp|png|mp3|avi|mov|mpg|mpeg|txt|amr|mmf|wml|wbmp|mid|midi|3gp|js|css|htm|html?)$
                        access_log /home/username/www/site1/logs/nginx-access.log;
                        charset utf-8;
                        source_charset utf-8;
                        try_files $uri @apache;
                }

                # передать запрос к apache
                location @apache {
                        proxy_pass  http://127.0.0.1:11111;
                }
        }

Для WordPress существует популярное расширение WP Super Cache, позволяющее создавать статическую копию страниц сайта. Это позволяет в 10-ки раз ускорить работу сайтов. Предполагается, что Super Cache настроен и работает.

# конфигурация nginx для гипотетического пользователя хостинга username для сайта номер "один"
       #
       # конфигурация обеспечивает работу со специальным кэшированием WordPress - Super Cache
       # http://wordpress.org/extend/plugins/wp-super-cache/
       #
       # параметр 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;

                # правила, задающие путь к закэшированной странице
                # в отличии от оригинала, здесь учитывается возможность кириллических путей
                set $supercacheuri "";
                set $supercachefile "/home/username/www/site1/public_html/wp-content/cache/supercache/${http_host}${request_uri}index.html";
                if (-e $supercachefile) {
                        set $supercacheuri "/wp-content/cache/supercache/${http_host}${request_uri}index.html";
                }
                if ($request_method = POST) {
                        set $supercacheuri "";
                }
                if ($query_string) {
                        set $supercacheuri "";
                }
                if ($http_cookie ~* comment_author_|wordpress_logged_in|wp-postpass_) {
                        set $supercacheuri "";
                }
                if ($http_x_wap_profile) {
                        set $supercacheuri "";
                }
                if ($http_profile) {
                        set $supercacheuri "";
                }

                # не кэшировать для мобильных браузеров
                if ($http_user_agent ~* (2.0\ MMP|240x320|400X240|AvantGo|BlackBerry|Blazer|Cellphone|Danger|DoCoMo|Elaine/3.0|EudoraWeb|Googlebot-Mobile|hip
top|IEMobile|KYOCERA/WX310K|LG/U990|MIDP-2.|MMEF20|MOT-V|NetFront|Newt|Nintendo\ Wii|Nitro|Nokia|Opera\ Mini|Palm|PlayStation\ Portable|portalmmm|Proxinet|Pr
oxiNet|SHARP-TQ-GX10|SHG-i900|Small|SonyEricsson|Symbian\ OS|SymbianOS|TS21i-10|UP.Browser|UP.Link|webOS|Windows\ CE|WinWAP|YahooSeeker/M1A1-R2D2|iPhone|iPod
|Android|BlackBerry9530|LG-TU915\ Obigo|LGE\ VX|webOS|Nokia5800)) {
                        set $supercacheuri "";
                }
                # не кэшировать для этих браузеров
                if ($http_user_agent ~* (w3c\ |w3c-|acs-|alav|alca|amoi|audi|avan|benq|bird|blac|blaz|brew|cell|cldc|cmd-|dang|doco|eric|hipt|htc_|inno|ipaq|
ipod|jigs|kddi|keji|leno|lg-c|lg-d|lg-g|lge-|lg/u|maui|maxo|midp|mits|mmef|mobi|mot-|moto|mwbp|nec-|newt|noki|palm|pana|pant|phil|play|port|prox|qwap|sage|sa
ms|sany|sch-|sec-|send|seri|sgh-|shar|sie-|siem|smal|smar|sony|sph-|symb|t-mo|teli|tim-|tosh|tsm-|upg1|upsi|vk-v|voda|wap-|wapa|wapi|wapp|wapr|webc|winw|winw
|xda\ |xda-)) {
                        set $supercacheuri "";
                }

                # если URI всё-таки есть, сделать внутренний редирект на него
                if ($supercacheuri) {
                        rewrite ^ $supercacheuri break;
                }

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

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

                # запретить доступ к скриптам .php в каталогах, использующихся для заливки файлов
                location ~* /(?:uploads|files)/.*\.php$ {
                        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;
                }

                # запретить все прямые обращения к несуществующим файлам .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;
                }
        }

Рецепт конфигурации для Drupal:

# конфигурация 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;
                }
        }

Был ли наш пост полезен?

Нажмите на звезду, чтобы оценить мои труды!

Средний рейтинг: 1 / 5. Количество голосов: 5

Пока голосов нет. Проголосуй первым!

Мне жаль, что пост вам не помог 🙁

Позвольте мне исправиться.

Поделитесь, что можно улучшить?

Похожие посты