上一篇老四写了一些关于建站部署,网站迁移的一些知识,详情戳《记一次网站迁移全过程,单服务器单 IP 双域名搭建 lnmp 架构实现 WordPress 与 Discuz! 并存》了解。其实由于经验不足,老四也是一直在探索当中。建站部署之后我们更多的就是需要关注网站的一些安全以及性能优化,毕竟如果初次建站服务器的配置一般都比较低,随着网站的发展我们也希望用当前的配置来满足最大的访问量,所以优化是必不可少的一步。此篇文章根据上篇文章的基础,进行优化补充,主要写一些建站后的站点优化工作,关于 WordPress 的,希望能对某些站长有一些帮助。
网站优化数据库篇
其实数据库的优化我们一般不需要做太多,经常做一下表的优化和表的修复就好(repair 和 optimize 命令)。剩下的按照 PhpMyAdmin 的建议来即可,另外不建议开启 MySQL 的查询缓存,没什么用。另外新手们经常可能遇到数据库的问题类似于「mysql.sock(Can’t connect to local MySQL server through)」这样 MySQL 本地套接字文件丢失的问题。关于这个问题,老四再一次完善了《如何彻底解决mysql.sock(Can’t connect to local MySQL server through)丢失的问题?非网上各种瞎哔哔的解决方式》这篇文章,那里面有一个终极杀招就是写脚本来监控 mysql.sock 文件,当文件丢失的时候进行重启操作,详情可以前往参考一下。
PHPMyAdmin 配置教程
安装教程我就不说什么了,网上一大堆,简单的写一下 PHPMyAdmin 使用之前的配置项,保证使用安全。
- 找到 phpmyadmin/libraries/config.default.php,将该文件拷贝至 phpmyadmin 目录下并重命名为 config.inc.php,该文件里有以下几项需要配置。
- $cfg[‘PmaAbsoluteUri’] = ‘访问地址’; // phpmyadmin 所在的地址
$cfg[‘Servers’][$i][‘host’] = ‘localhost’; // 设定 MySQL 所在的主机名或IP地址
$cfg[‘Servers’][$i][‘auth_type’] = ‘cookie’; // 在本机调试用 config,否则不用 cookie,这里建议用 cookie
$cfg[‘Servers’][$i][‘user’] = ‘user’; // 设定 MySQL 的用户名
$cfg[‘Servers’][$i][‘password’] = ‘password’; // 设定 MySQL 的用户密码
$cfg[‘DefaultLang’] = ‘zh-utf-8’; // 设定默认语言 - 将 phpmyadmin 根目录改名,为了安全,以防爆破,请求地址就是加上「/自定义根目录名称」即可。
服务器相关优化
设置 Swap 分区
Linux 中的 Swap 分区概念类似于 Windows 中的虚拟内存,就是拿磁盘中的一块存储空间来当做内存使用,这样的话可以保证内存使用超标的时候不崩溃,但是因为内存与硬盘传输速度差距极大的原因,我们并不能将 Swap 分区设置的太大,反而影响性能。
首先使用 free -m 查看服务器是否设置了 swap 分区,如下图所示,如果下面 swap 那一行值全为 0 的话就代表还没有设置 Swap 分区。https://ae01.alicdn.com/kf/HTB1PD..dlGw3KVjSZFw762Q2FXaJ.png
设置方法如下:
- 进入 var 文件目录
- 获取 512MB 的文件块(一般设置为内存的一半或相等即可)
- 创建 Swap 文件
- 激活 Swap 文件
- 为了安全,建议修改一下权限
- 将 swapfile 添加到 fstab 文件中,开机自动启动
- 我们要尽量避免使用 Swap 分区,设置使系统尽可能的优先使用物理内存。
1 2 3 4 5 6 7 8 9 |
[gaolaosi@localhost ~]# cd /var [gaolaosi@localhost ~]# dd if=/dev/zero of=swapfile bs=1M count=512 [gaolaosi@localhost ~]# /sbin/mkswap swapfile [gaolaosi@localhost ~]# /sbin/swapon swapfile [gaolaosi@localhost ~]# chmod 0600 /var/swapfile [gaolaosi@localhost ~]# echo "/var/swapfile swap swap defaults 0 0" >> /etc/fstab [gaolaosi@localhost ~]# cat /proc/sys/vm/swappiness # 查看下 swappiness 的默认值,通常返回值是60 [gaolaosi@localhost ~]# vi /etc/sysctl.conf # 设置值为 10 [gaolaosi@localhost ~]# reboot 重启服务器 |
Nginx 相关优化
其实 lnmp 体系中 Nginx 的优化如果涉及到具体的参数调优,一般都是大流量进来,进行激进的优化。如果初建站的话,只需要配置一下基本的设置就好。除了基本的配置以外,老四还会写一下配置 Nginx fastcgi_cache 缓存来为网站加速。
- 使用 Nginx 开启 gzip 压缩
- worker_processes 设置为服务器的 CPU 核心数
- 设置 events
- 隐藏 nginx 版本号
以上是基本的配置,除此之外还有一个日志格式化的自定义,因为这个就是与自定义行为了,所以老四就不写了,也不算是优化,如果不会呢就是用默认的日志打印格式即可。以上四点的配置示例参考下面代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
worker_processes 2; worker_rlimit_nofile 65535; events { # 防止在同一一个时刻只有一个请求的情况下,出现多个睡眠进程会被唤醒但只能有一个进程可获得请求的尴尬,如果不优化,在多进程的nginx会影响以部分性能。 accept_mutex on; # 打开同时接受多个新网络连接请求的功能。 multi_accept on; # 使用 epoll 事件驱动,因为 epoll 的性能相比其他事件驱动要好很多 use epoll; # 使用 ulimit -n 可以查看当前操作系统支持的最大文件句柄数,默认为为 1024 worker_connections 1024; } http { include mime.types; default_type application/octet-stream; # 隐藏版本号配置 server_tokens off; sendfile on; keepalive_timeout 65; gzip on; server { } } |
配置 Nginx fastcgi_cache 缓存
缓存顾名思义就是把我们的 wp 站点的文章缓存起来,因为每一篇文章、页面或者类目基本都是不怎么变化的,即使变化我们即使更新缓存就好了。所以设置缓存能让我们尽最大可能的避免进行数据库的交互,从而提高网站的响应性能。Nginx 一直都是支持缓存机制的,只不过是清除缓存的功能只有商业版才有。
一、配置 Nginx fastcgi_cache 缓存加速模块:ngx_cache_purge
添加 Nginx 模块需要重新编译 nginx,老四之前的 Nginx 安装时编译安装,安装步骤可以参考文章开头页的那篇文章。添加 ngx_cache_purge 模块步骤如下:
- 下载 ngx_cache_purge-2.3.tar.gz
- 解压
- 配置模块安装
- 编译安装
1 2 3 4 5 |
[gaolaosi@localhost ~]# wget http://labs.frickle.com/files/ngx_cache_purge-2.3.tar.gz [gaolaosi@localhost ~]# tar -zxvf ngx_cache_purge-2.3.tar.gz [gaolaosi@localhost ~]# ./configure --add-module=ngx_cache_purge路径 [gaolaosi@localhost ~]# sudo make [gaolaosi@localhost ~]# sudo make install |
二、nginx.conf 配置文件新增如下配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
http { # nginx-fastcgi 缓存配置 fastcgi_cache_path 缓存目录 levels=1:2 keys_zone=命名空间名称自起:250m inactive=1d max_size=1G; # fastcgi_temp_path 缓存目录/temp; fastcgi_cache_key "$scheme$request_method$host$request_uri"; fastcgi_cache_use_stale error timeout invalid_header http_500; # 忽略一切 ocache 申明,避免不缓存伪静态等 fastcgi_ignore_headers Cache-Control Expires Set-Cookie; 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 ~ .*\.(php|php5)?(\/.*)*$ { # fastcgi 缓存配置 fastcgi_cache_bypass $skip_cache; fastcgi_no_cache $skip_cache; add_header X-Cache "$upstream_cache_status From $host"; fastcgi_cache 命名空间名称自起; fastcgi_cache_valid 200 301 302 1d; } } } |
三、配置 Nginx-Helper 插件
以上 Nginx 的缓存配置就算是配置好了,重启之后可以找一个页面进行测试,刷新两次,发现响应信息中如果存在「X-Cache: HIT」就代表成功了。这里面 X-Cache 的值有三个:
- MISS 表示未命中
- BYPASS 表示缓存黑名单
- HIT 表示缓存命中
接下来就是配置清除缓存的插件,Nginx-Helper,前面说过,因为 Nginx 只有商业版才支持,所以我们基本不用,但是 WordPress 中为我们提供了一个非常不错的专门清除 Nginx 缓存的插件(后台搜索即可安装),安装之后进行一下配置就可以了。
这里有个注意点需要注意一下,这个 Nginx-Helper 插件默认的清除路径是「/var/run/nginx-cache」,如果你上面的配置文件配置的是这个缓存目录那就不需要修改,如果不是,那就需要在 WordPress 根目录下的 wp-config.php 中新增如下代码:
1 2 |
// 根据实际情况定义缓存的存放路径 define( 'RT_WP_NGINX_HELPER_CACHE_PATH','缓存目录'); |
另外,在注意一下,很多人都愿意将缓存目录设置在「/tmp」目录当中,但是某些 CentOS 版本安装了 PHP 之后,这个目录进行存在类似 systemd-private-0191511d5b2b4f7c824db0b83b251053-php-fpm.service-C1DFOW 这样的目录,php-fpm 在管理 php 的时候将一些临时服务放在了这里,所以将该目录进行了保护,也就是说当使用 php 语法操作这个目录的时候实际上会转换为一个乱码七糟的路径导致文件找不到,这样会导致清除缓存失败,自己注意一下。
PHP 相关优化
其实 PHP 优化我觉得没有太多需要优化的,可能我了解也不多,遇到的问题也少一些,设置了一下两点:
- max_execution_time = 300
- memory_limit = 128M
前者表示允许脚本最大执行时间 300 秒,后者表示允许单个脚本允许使用的最大内存 128M(通常 1G 内存以下设置 64M 或 128M 即可)。
WordPress 优化
去掉谷歌字体
目录:wp-includes\script-loader.php
新增如下代码:
1 2 3 4 5 6 |
function coolwp_remove_open_sans_from_wp_core() { wp_deregister_style( 'open-sans' ); wp_register_style( 'open-sans', false ); wp_enqueue_style('open-sans',''); } add_action( 'init', 'coolwp_remove_open_sans_from_wp_core' ); |
关闭日志自动修订,自动保存草稿等没啥用的功能
这些功能真心没什么用,如果用自带编辑器进行创作的话注意一下及时保存就好,没必要自动保存,确实很拖慢网站速度,所以我们把它干掉。
禁用文章修订历史版本
wp 根目录下的 wp-config.php 文件最上方新增如下代码:
1 2 3 4 5 |
// 禁用历史修订版本 define('WP_POST_REVISIONS', false); // 自动保存时间设置为一天 define('AUTOSAVE_INTERVAL', false); |
禁用自动保存功能
一、打开 wp-admin/post.php 文件,注释下图所示代码:
二、打开 wp-admin/post-new.php 文件,注释下图所示代码:
三、禁用自动草稿功能
打开 wp-admin/includespost.php 文件,按照如下图示修改:
1 2 3 4 5 6 |
global $current_user,$wpdb; $post = $wpdb->get_row( "SELECT * FROM $wpdb->posts WHERE post_status = 'auto-draft' AND post_type = '$post_type' AND post_author = $current_user->ID ORDER BY ID ASC LIMIT 1" ); if (!($post) ) { $post_id = wp_insert_post( array( 'post_title' => __( 'Auto Draft' ), 'post_type' => $post_type, 'post_status' => 'auto-draft' ) ); $post = get_post( $post_id ); } |
本文会随着老四的优化经验不断更新,如果有路过的大佬也请不吝指点批评,让我们共同进步。
更博不易,如果觉得文章对你有帮助并且有能力的老铁烦请捐赠盒烟钱,点我去赞助。或者扫描文章下面的微信/支付宝二维码打赏任意金额(点击「给你买杜蕾斯」),也可扫描小站放的支付宝领红包二维码,线下支付享受优惠的同时老四也可以获得对应赏金,老四这里抱拳谢谢诸位了。捐赠时请备注姓名或者昵称,因为您的署名会出现在赞赏列表页面,您的捐赠钱财也会被用于小站的服务器运维上面,再次抱拳感谢。