Рецепт конфигурации nginx для WordPress кэширование Super Cache
Материал из DiPHOST.Ru wiki system
Рецепт nginx "WordPress"
Коллекция рецептов nginx нашего хостинга
Для WordPress существует популярное расширение WP Super Cache, позволяющее создавать статическую копию страниц сайта. Это позволяет в 10-ки раз ускорить работу сайтов. Предполагается, что Super Cache настроен и работает.
Так выглядит конфигурация nginx сайта для хостинга:
# конфигурация 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; } }