Добрый день!<br><br>Настраивал кеширование сайта на wordpress с помощью модуля ngx_http_fastcgi_module, но столкнулся с некоторыми проблемами.<br>Проблемы связаны с тем, что сайт использует адреса страниц с русскими буквами. Чтобы управлять кешированием со стороны wordpress используется плагин nginx-helper, для работы которого необходимо чтобы при обращении на адрес <a href="http://example.com/purge/news/001">http://example.com/purge/news/001</a> очищался кеш страницы <a href="http://example.com/news/001">http://example.com/news/001</a> (и то же самое при наличии аргументов). <br>
<br>Это удалось настроить таким образом, как показано ниже в конфиге и оно работает для всех адресов, кроме тех, в которых есть русские буквы. Проблема заключается в том, что страницы с русскими адресами попадают в кеш с ключём, где uri закодирован в виде %D0%B8%D0%BC%D1%8F_%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86%D1%8B, а когда я пытаюсь очистить кеш такой страницы по адресу /purge/имя_страницы, в выделение location ~ /purge(/.*) попадает незакодированный uri "имя_страницы" и очистить кеш не получается - т.к. я неправильно обращаюсь к странице по ключу.<br>
<br>Я перепробывал уже множество вариантов с различными переменными, но так и не получил нужного результата. Возможно есть какое-нибудь элегантное решение проблемы?<br><br><br>Linux example 2.6.32-042stab049.7 #1 SMP Thu Mar 1 18:03:05 MSK 2012 x86_64 GNU/Linux<br>
nginx version: nginx/1.2.6<br><br>конфиг:<br><br>fastcgi_cache_path /tmp/fcgi levels=1:2 keys_zone=MAGE:32m max_size=64m inactive=10h;<br><br>server {<br> listen 80;<br> server_name <a href="http://example.com">example.com</a> <a href="http://www.example.com">www.example.com</a>;<br>
charset utf-8;<br> error_log off; access_log off;<br> <br> root /home/user/<a href="http://example.com">example.com</a>;<br> index index.php index.html index.htm;<br> <br> set $no_cache 0;<br>
<br> # POST requests and urls with a query string should always go to PHP<br> if ($request_method = POST) {<br> set $no_cache 1;<br> } <br><br> if ($query_string != "") {<br> set $no_cache 0;<br>
} <br><br> # Don't cache uris containing the following segments<br> if ($request_uri ~* "(/wp-admin/|/xmlrpc.php|/wp-(app|cron|login|register|mail).php|wp-.*.php|/feed/|index.php|wp-comments-popup.php|wp-links-opml.php|wp-locations.php|sitemap(_index)?.xml|[a-z0-9_-]+-sitemap([0-9]+)?.xml)") {<br>
set $no_cache 1;<br> } <br><br> # Don't use the cache for logged in users or recent commenters<br> if ($http_cookie ~* "comment_author|wordpress_[a-f0-9]+|wp-postpass|wordpress_no_cache|wordpress_logged_in") {<br>
set $no_cache 1;<br> }<br> <br> location / {<br> # This is cool because no php is touched for static content.<br> # include the "?$args" part so non-default permalinks doesn't break when using query string<br>
try_files $uri $uri/ /index.php?$args;<br> }<br> # all other .php files<br> location ~ \.php$ {<br><br> try_files $fastcgi_script_name =404;<br> include fastcgi_params;<br> fastcgi_pass unix:/var/run/fpm-v.sock;<br>
<br> fastcgi_cache_bypass $no_cache;<br> fastcgi_no_cache $no_cache;<br><br> fastcgi_index index.php;<br> fastcgi_intercept_errors off;<br> fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;<br>
fastcgi_temp_path /tmp/fcgi2 1 2;<br> fastcgi_cache MAGE;<br> fastcgi_cache_key "$scheme$request_method$host$request_uri";<br> fastcgi_ignore_headers "Cache-Control" "Expires" "Set-Cookie";<br>
fastcgi_cache_min_uses 1;<br> fastcgi_cache_valid 30m;<br> fastcgi_cache_use_stale updating error timeout invalid_header http_500;<br> }<br><br> location ~ /purge(/.*) {<br> #default_type text/plain;<br>
#echo "fastcgi_cache_purge MAGE $scheme$request_method$host$1$is_args$args";<br> #echo "fastcgi_cache_key $scheme$request_method$host$request_uri"; <br> fastcgi_cache_purge MAGE "$scheme$request_method$host$1$is_args$args";<br>
} <br><br> location ~* ^.+\.(ogg|ogv|svg|svgz|eot|otf|woff|mp4|ttf|rss|atom|jpg|jpeg|gif|png|ico|zip|tgz|gz|rar|bz2|doc|xls|exe|ppt|tar|mid|midi|wav|bmp|rtf)$ {<br> access_log off; log_not_found off; expires max;<br>
}<br><br>}<br>