分类
Nginx PHP 笔记

站点优化笔记

本站开通也有好几年了,除了更新几次主题,自定义几个样式和几处微调,没什么做大的改动。这次心血来潮把它优化一波,为后面使用打下基础。

次此优化主要是:

  1. 优化php配置
  2. 优化wordpress一些不适合国情的东西(你懂的)
  3. 优化链接便于搜索引擎收录

优化PHP配置

我本不是phper,安装完后除了更改上传文件大小限制,都是用的默认配置。这次主要开启了缓存,因为我用的是nginx和php-fpm,所以需更改对应的配置文件。

找到 /etc/php/7.4/fpm/php.ini,修改内存和最大文件上传配置:

memory_limit = 1024M

post_max_size = 200M
upload_max_filesize = 1024M
max_file_uploads = 1000

设置opcache缓存:

[opcache]
opcache.enable=1
opcache.enable_cli=1
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=10000
opcache.memory_consumption=128
opcache.save_comments=1
opcache.revalidate_freq=1

打开 /etc/php/7.4/fpm/pool.d/www.conf 设置:

pm = dynamic
pm.max_children = 120
pm.start_servers = 10
pm.min_spare_servers = 10
pm.max_spare_servers = 20

优化Wordpress

1. WordPress使用的Gravatar头像链接在国内访问非常慢,所以需要替换Google CDN,这里推荐使用WP Acceleration for China插件,替换为中科大的CDN。

2. WordPress使用了Google的字体,使用Disable/Remove Google Fonts插件禁用。禁用后会发现站点的字段变成浏览器默认字体,同时速度也快了很多。

3. 禁用Jetpack。该插件是Wordpress官方出品,确实非常好用。使用该插件后,你可以用Wordpress的客户端移动端来写博客,也可以看到每日访问统计。不仅如此,它还有其他很多功能,包括CDN加速。但是Jetpack需要访问Wordpress的网站,对打开后台时速度会有较大影响。我是实在受不了忍痛禁用。

4. 使用WP Super Cache加速。需要注意的是使用访插件必须要用固定链接。该插件可以配置Wordpress缓存,资源CDN等。具体功能不详述。

优化链接

其实早在Wordpress支持Restful Api时就想把固定链接改为自定义。这次为了用WP Super Cache特地把链接都改了。

本站建立时用的默认设置-“朴素”方式的链接。如果文章不多还好,现在有近三百篇文章分享出去,有的也被搜索引擎收录,要更改链接还是得兼容旧的。

我在Nginx上做了处理,支持自定义固定链接和兼容旧的,配置如下:

location / {
    if ($query_string ~ "p=(.*)") {
        set $suffix .html;
        rewrite ^/(.*) http://$server_name/$arg_p$suffix? permanent;
    }
    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;
    }

    root /var/www/wordpress;
    index index.html index.php;
}

通过Nginx改写Url,把旧链接的参数提取出来变成新链接。同时新链接加上.html后缀,做伪静态化,便于搜索引擎收录。

这里需要注意的是,固定链接最好不要包含日期,否则搜索引擎会忽略旧的文章。也不要用标题,因为标题往往包含中文,中文会被encode编码,也不利于收录。

更改了Nginx还需要更改数据库,把wp_posts表中的链接替换(操作时先备份):

show variables like 'sql_mode%';
SET GLOBAL sql_mode = 'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';
SET SESSION sql_mode = 'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';

create table wordpress.wp_posts_bak like wordpress.wp_posts;
insert into wordpress.wp_posts_bak select * from wordpress.wp_posts;

update wordpress.wp_posts set guid=replace(guid, "https://www.wangzhengzhen.com/?p=", "https://www.wangzhengzhen.com/");
update wordpress.wp_posts set guid=concat(guid, '.html');

到这里优化算是结束了。简单测试了一把没问题。

经过上面的优化,虽然没有专门测试,但操作上直观感觉还是快了不少。我想着把资源文件做CDN,也搭好了文件存储服务器,但找到的插件要么收费,要么只支持Amazon的S3,不支持Minio。也有开源的把Wordpress上传文件迁到阿里或腾讯的OSS。因为Minio支持S3标准,应该可以简单拿来小改就能用。

不过我想把资源CDN优化留到下次再做,而且不用插件,直接把Wordpress的资源文件映射出去,只改保存文件后的Url引用。

改资源Url会涉及到原来文章的引用也要修改,因为这次改了固定链接,先用一段时间再看吧。

发表评论

电子邮件地址不会被公开。