使用Nginx+Redis为Wordpress访问加速

环境:宝塔面板,Nginx,PHP,Wordpress,Redis

插件:Nginx-Help, Redis Object Cache , WPRedis

一、首先,需要给Nginx配置以下4个模块

srcache-nginx-module
redis2-nginx-module
HttpRedisModule
set-misc-nginx-module

宝塔面板,后台切换Nginx可以选择 nginx openresty ,自带以上模块

下面用来确认已经配置4个模块,会返回已经安装

nginx -V 2>&1 | grep 'srcache-nginx-module\|redis2-nginx-module\|redis-nginx-module\|set-misc-nginx-module' -o

二、在宝塔面板PHP配置中添加Redis扩展

三、在站点的Nginx配置文件的最上面,在server { }外面添加下面的代码

upstream redis {
            server 127.0.0.1:6379;
            keepalive 512;
    }

server { }里添加下面的代码

  set $skip_cache 0;
 
    #POST请求直接调用后端
    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 ~* "comment_author|wordpress_[a-f0-9]+|wp-postpass|wordpress_no_cache|wordpress_logged_in") {
            set $skip_cache 1;
        }
 
   location /redis-fetch {
        internal  ;
        set  $redis_key $args;
        redis_pass  redis;
    }
 
    location /redis-store {
        internal  ;
        set_unescape_uri $key $arg_key ;
        redis2_query set $key $echo_request_body;
        redis2_query expire $key 14400; 
        redis2_pass  redis;
    } 
 
 
     location ~ [^/]\.php(/|$){
        set $key "nginx-cache:$scheme$request_method$host$request_uri";
        try_files $uri =404;
    
 
        srcache_fetch_skip $skip_cache;
        srcache_store_skip $skip_cache;
 
        srcache_response_cache_control off;
 
        set_escape_uri $escaped_key $key;
 
        srcache_fetch GET /redis-fetch $key;
        srcache_store PUT /redis-store key=$escaped_key;
 
        more_set_headers 'X-Cache $srcache_fetch_status';
        more_set_headers 'X-Store $srcache_store_status';
        add_header X-Cache "$srcache_fetch_status From $host";
        add_header X-Frame-Options SAMEORIGIN; # 只允许本站用 frame 来嵌套
        add_header X-Content-Type-Options nosniff; # 禁止嗅探文件类型
        add_header X-XSS-Protection "1; mode=block"; # XSS 保护   
    
        fastcgi_pass unix:/tmp/php-cgi-72.sock;     #这里php版本不一样请注意修改
        fastcgi_index index.php;
        include fastcgi.conf;
    }

保存,重启Nginx

四、在Wordpress插件管理中搜索安装 Nginx-Help, Redis Object Cache , WP Redis

激活Nginx-Help,进入设置,启用Enable purge ,在Caching Method选择Redis cache,在Redis Settings中修改Predix值,这里不要和其它站点冲突, 在Purging Options 中选择所需的缓存清理选项。

保存即可。

安装Redis Object Cache用于缓存刷新,好像也可以使用WP Redis

就这样,结束 。

参考文章: 大鸟博客 https://www.daniao.org/5403.html

WordPress 伪静态规则:Apache、Nginx,和二级目录规则设置

Apache 伪静态规则:

<ifmodule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    RewriteRule ^index\.php$ - [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /index.php [L]
</ifmodule>

在网站根目录下新建 .htaccess文件,将上面的代码放入保存即可,Apache根目录和子目录一样。

Nginx 伪静态规则:

location / {
    if (-f $request_filename/index.html){
        rewrite (.*) $1/index.html break;
    }
    if (-f $request_filename/index.php){
        rewrite (.*) $1/index.php;
    }
    if (!-f $request_filename){
        rewrite (.*) /index.php;
    }
}

Nginx 二级目录伪静态:

将”二级目录“替换为你的真实目录路径

location /二级目录/ {
    if (-f $request_filename/index.html){
        rewrite (.*) $1/index.html break;
    }
    if (-f $request_filename/index.php){
        rewrite (.*) $1/index.php;
    }
    if (!-f $request_filename){
        rewrite (.*) /二级目录/index.php;
    }
}

Nginx打开目录浏览功能(autoindex),中文乱码问题解决

Nginx默认是不允许列出整个目录的。如需此功能,打开nginx.conf文件或你要启用目录浏览虚拟主机的配置文件,在server或location 段里添加上autoindex on;来启用目录流量,下面会分情况进行说明。

另外Nginx的目录流量有两个比较有用的参数,可以根据自己的需求添加:

autoindex_exact_size off;
默认为on,显示出文件的确切大小,单位是bytes。
改为off后,显示出文件的大概大小,单位是kB或者MB或者GB

autoindex_localtime on;
默认为off,显示的文件时间为GMT时间。
改为on后,显示的文件时间为文件的服务器时间

1、整个虚拟主机开启目录流量

在server段添加

location / {
autoindex on;
autoindex_localtime on; #之类的参数写这里
}

2、单独目录开启目录流量

2.1:直接二级目录开启目录流量

location /down/ {
autoindex on;
}

2.2:虚拟目录开启目录流量

location /down/ {
alias /home/wwwroot/lnmp/test/;
autoindex on;
}

详细参照: http://nginx.org/en/docs/http/ngx_http_autoindex_module.html

如果想希望做出漂亮的目录列表,支持header,footer则可以安装三方插件:
http://wiki.nginx.org/NginxNgxFancyIndex

重启nginx,使其生效。

via: https://www.vpser.net/build/nginx-autoindex.html

nginx设置目录浏览及中文乱码问题解决方案

但是如果有中文目录的话会出现乱码问题,所以还需要在下面添加这一句:

charset utf-8,gbk;

apache 目录浏览开启关闭
关闭:Options FollowSymLinks
开启:Options Indexes FollowSymLinks