ПРОЕКТЫ 


  АРХИВ 


Apache-Talk @lexa.ru 

Inet-Admins @info.east.ru 

Filmscanners @halftone.co.uk 

Security-alerts @yandex-team.ru 

nginx-ru @sysoev.ru 


  СТАТЬИ 


  ПЕРСОНАЛЬНОЕ 


  ПРОГРАММЫ 



ПИШИТЕ
ПИСЬМА












     АРХИВ :: nginx-ru
Nginx-ru mailing list archive (nginx-ru@sysoev.ru)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

проблема с кирилличными uri при кешировании


  • To: nginx-ru@xxxxxxxxx
  • Subject: проблема с кирилличными uri при кешировании
  • From: VovansystemS <vovansystems@xxxxxxxxx>
  • Date: Mon, 17 Dec 2012 13:00:49 +0300
  • Dkim-signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:date:message-id:subject:from:to:content-type; bh=/HHLGS2oWWk3OEgk5SaE6xEF0FJO7v+XFIb2f6fwcVE=; b=CYaFwWXxXcm+W/TgYT9HjpigUvib8q3XnRUYbrBl0gvYoZ1vR7DzfecfR0+JWIiNRR cVcCGol2NGsyZhP9e3Lqsk62KuPH3Io6w37omhNgfDmnpwAfnGjrB8jWtiMz8WpRMM70 t7Do19uweZGh5UsK9b4WPtV6lS5YxmndeeiNkFyqhzZ7Zm4sCK7NB4oQUAdgxG7MqEqF WJaedwYOqzcraR/H1MWmfDtgNbzqVTQdW+DWTDb4me/TqnpkuxDO2ISAIxhyXOz5sd9P 6yoLwpy558v7l6znZSV3GLVbSr5I6qksi0ZaJ9o1t2CTIEIX9+RrBzX79fk6XECsTUIc Iv/g==

Добрый день!

Настраивал кеширование сайта на 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;
    }

}
_______________________________________________
nginx-ru mailing list
nginx-ru@xxxxxxxxx
http://mailman.nginx.org/mailman/listinfo/nginx-ru


 




Copyright © Lexa Software, 1996-2009.