求助:关于使用 FastCGI 缓存 WordPress 的问题

2016-10-14 22:11:57 +08:00
 dcd

WordPress 安装了一个 WPTouch 插件,同一个网址,当移动设备和 PC 访问的时候会显示不同的页面。

Nginx 启用了 FastCGI 缓存,根据 UA 生成不同的缓存文件。

现在的问题是,当 A 手机访问的时候会生成缓存文件 A , B 手机访问的时候会生成缓存文件 B ;而我希望所有的移动设备只生成一个缓存文件 A , PC 端访问生成文件 B 。

Nginx 配置如下:

fastcgi_cache_path /home/www/wp-content/cache levels=1:2 keys_zone=WORDPRESS:250m inactive=7d max_size=1G;
#fastcgi_temp_path /home/www/wp-content/temp;
fastcgi_cache_key "$scheme$request_method$host$request_uri$mobile_request";
fastcgi_cache_use_stale error timeout invalid_header http_500;
fastcgi_ignore_headers Cache-Control Expires Set-Cookie;
 
server {
    listen 80;
    server_name abc.com;
    index index.html index.htm index.php;
    root  /home/www;
   
    set $skip_cache 0;
    set $mobile_request 0;
    if ($http_user_agent ~* '(iPhone|iPod|incognito|webmate|Android|dream|CUPCAKE|froyo|BlackBerry|webOS|s8000|bada|IEMobile|Googlebot\-Mobile|AdsBot\-Google)') {
        set $mobile_request 1;
    }
    if ($request_method = POST) {
        set $skip_cache 1;
    }   
    if ($query_string != "") {
        set $skip_cache 1;
    }   
    if ($request_uri ~* "/wp-admin/|/xmlrpc.php|wp-.*.php|/feed/|index.php|sitemap(_index)?.xml") {
        set $skip_cache 1;
    } 

    if ($http_cookie ~* "wordpress_[a-f0-9]+|wp-postpass|wordpress_no_cache|wordpress_logged_in") {
        set $skip_cache 1;
    }  

    location / {
        try_files $uri $uri/ /index.php?$args;
        rewrite /wp-admin$ $scheme://$host$uri/ permanent;
    }

    location ~ [^/]\.php(/|$) {
        try_files $uri =404;
        fastcgi_pass unix:/dev/shm/php-fpm.sock;
        #fastcgi_pass 127.0.0.1:9000;
        fastcgi_index index.php;
        include fastcgi.conf;
        fastcgi_cache_bypass $skip_cache;
        fastcgi_no_cache $skip_cache;
        fastcgi_cache WORDPRESS;
        fastcgi_cache_valid 200 301 302 7d;
        add_header X-UA-Detect $scheme$request_method$host$request_uri$mobile_request;
        add_header X-Frame-Options deny;
        add_header X-Content-Type-Options nosniff;
        add_header X-Cache "$upstream_cache_status From $host";
    }

    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;
    }

    location ~ /\. { deny all; access_log off; log_not_found off; }
    location = /robots.txt { access_log off; log_not_found off; }
    access_log /home/www/wp-content/logs/access.log;
    error_log /home/www/wp-content/logs/error.log;
}

求各位大能帮忙看看该如何配置,感激不尽!

3202 次点击
所在节点    NGINX
8 条回复
allenhu
2016-10-14 22:36:04 +08:00
你不累吗?我只用了 supercache
dcd
2016-10-14 22:38:00 +08:00
@allenhu 嘿嘿,不折腾成功誓不罢休!
qwer1234asdf
2016-10-14 22:57:17 +08:00
我啥 cache 也没用。。
qwer1234asdf
2016-10-14 22:57:38 +08:00
顺便说下,一个插件也没装。。。
Technetiumer
2016-10-14 23:08:18 +08:00
拿 CDN 缓存整个网站,包括 HTML ,不是更好

CloudFlare 设置页面规则缓存全部,包括 HTML 和 Ajax 请求,把 CloudFlare 当服务器,然而大陆访问 CloudFlare 并不快,如果百度云加速有页面规则,可以参考。

另外,自适应的模板大法好
dcd
2016-10-14 23:14:13 +08:00
@qwer1234asdf
@Technetiumer

其实缓不缓存都无所谓,只是奇怪那里配置出错,使得`httpGETabc.com/11`在不同 UA 散列值会不同。
hahasong
2016-10-15 00:02:44 +08:00
现在是 2016 年了,大家都在用 fpm
wdlth
2016-10-15 00:25:17 +08:00
现在是 2016 年了,大家都在用 lua

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/312900

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX