проблема с кирилличными uri при кешировании
VovansystemS
vovansystems at gmail.com
Mon Dec 17 10:00:49 UTC 2012
Добрый день!
Настраивал кеширование сайта на wordpress с помощью модуля
ngx_http_fastcgi_module, но столкнулся с некоторыми проблемами.
Проблемы связаны с тем, что сайт использует адреса страниц с русскими
буквами. Чтобы управлять кешированием со стороны wordpress используется
плагин nginx-helper, для работы которого необходимо чтобы при обращении на
адрес http://example.com/purge/news/001 очищался кеш страницы
http://example.com/news/001 (и то же самое при наличии аргументов).
Это удалось настроить таким образом, как показано ниже в конфиге и оно
работает для всех адресов, кроме тех, в которых есть русские буквы.
Проблема заключается в том, что страницы с русскими адресами попадают в кеш
с ключём, где 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
"имя_страницы" и очистить кеш не получается - т.к. я неправильно обращаюсь
к странице по ключу.
Я перепробывал уже множество вариантов с различными переменными, но так и
не получил нужного результата. Возможно есть какое-нибудь элегантное
решение проблемы?
Linux example 2.6.32-042stab049.7 #1 SMP Thu Mar 1 18:03:05 MSK 2012 x86_64
GNU/Linux
nginx version: nginx/1.2.6
конфиг:
fastcgi_cache_path /tmp/fcgi levels=1:2 keys_zone=MAGE:32m max_size=64m
inactive=10h;
server {
listen 80;
server_name example.com www.example.com;
charset utf-8;
error_log off; access_log off;
root /home/user/example.com;
index index.php index.html index.htm;
set $no_cache 0;
# POST requests and urls with a query string should always go to PHP
if ($request_method = POST) {
set $no_cache 1;
}
if ($query_string != "") {
set $no_cache 0;
}
# Don't cache uris containing the following segments
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)")
{
set $no_cache 1;
}
# Don't use the cache for logged in users or recent commenters
if ($http_cookie ~*
"comment_author|wordpress_[a-f0-9]+|wp-postpass|wordpress_no_cache|wordpress_logged_in")
{
set $no_cache 1;
}
location / {
# This is cool because no php is touched for static content.
# include the "?$args" part so non-default permalinks doesn't break
when using query string
try_files $uri $uri/ /index.php?$args;
}
# all other .php files
location ~ \.php$ {
try_files $fastcgi_script_name =404;
include fastcgi_params;
fastcgi_pass unix:/var/run/fpm-v.sock;
fastcgi_cache_bypass $no_cache;
fastcgi_no_cache $no_cache;
fastcgi_index index.php;
fastcgi_intercept_errors off;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_temp_path /tmp/fcgi2 1 2;
fastcgi_cache MAGE;
fastcgi_cache_key "$scheme$request_method$host$request_uri";
fastcgi_ignore_headers "Cache-Control" "Expires" "Set-Cookie";
fastcgi_cache_min_uses 1;
fastcgi_cache_valid 30m;
fastcgi_cache_use_stale updating error timeout invalid_header
http_500;
}
location ~ /purge(/.*) {
#default_type text/plain;
#echo "fastcgi_cache_purge MAGE
$scheme$request_method$host$1$is_args$args";
#echo "fastcgi_cache_key
$scheme$request_method$host$request_uri";
fastcgi_cache_purge MAGE
"$scheme$request_method$host$1$is_args$args";
}
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)$
{
access_log off; log_not_found off; expires max;
}
}
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.nginx.org/pipermail/nginx-ru/attachments/20121217/82be71b1/attachment.html>
Подробная информация о списке рассылки nginx-ru