网站性能优化记录
服务器环境:Linux、Nginx、PHP、WordPress、Sakurairo 主题
服务器类型:轻量应用服务器
优化目标:提高网站访问速度、降低资源占用、增强基础安全防护、减少异常访问对服务器的影响。
1. Linux 系统层优化
1.1 增加 Swap 交换空间
服务器为轻量应用服务器,默认未配置 Swap。在内存较小的情况下,PHP、MySQL、Nginx 或 WordPress 后台任务可能会导致内存瞬间升高,严重时触发 OOM,导致服务异常退出。
free -h
dd if=/dev/zero of=/swapfile bs=1M count=2048
chmod 600 /swapfile
mkswap /swapfile
swapon /swapfile
设置开机自动挂载
echo '/swapfile none swap sw 0 0' >> /etc/fstab
调整 Swap 使用优先级
echo 'vm.swappiness = 60' >> /etc/sysctl.conf
sysctl -p
验证结果
free -h
swapon --show
cat /proc/sys/vm/swappiness
1.2 开启防火墙,仅放行必要端口
为了减少暴露面,只开放网站运行和远程维护所需端口,例如 HTTP、HTTPS 和自定义 SSH 端口
systemctl enable firewalld --now
firewall-cmd --state
放行必要端口:
firewall-cmd --permanent --add-service=http
firewall-cmd --permanent --add-service=https
firewall-cmd --permanent --add-port=端口/tcp
firewall-cmd --reload
查看当前规则:
firewall-cmd --list-all
1.3 修改 SSH 默认端口
将 SSH 从默认 22 端口修改为自定义端口,减少互联网上针对默认端口的自动化扫描和暴力破解请求。
vim /etc/ssh/sshd_config
修改或添加:
Port 12345
防火墙放行新端口后,重启 SSH 服务:
firewall-cmd --permanent --add-port=12345/tcp
firewall-cmd --reload
systemctl restart sshd
验证监听端口:
ss -lntp | grep sshd
确认新端口可连接后,再移除旧端口放行规则:
firewall-cmd --permanent --remove-service=ssh
firewall-cmd --reload
1.4 SSH 配置密钥登录,关闭密码登录和空密码登录
为了增强远程登录安全性,使用 SSH 密钥登录,关闭密码登录和空密码登录。
在客户端生成密钥:
ssh-keygen -t ed25519 -C "server-login"
将公钥上传到服务器:
ssh-copy-id -p 12340 root@服务器IP
修改 SSH 配置:
vim /etc/ssh/sshd_config
配置内容:
PubkeyAuthentication yes
PasswordAuthentication no
PermitEmptyPasswords no
PermitRootLogin prohibit-password
检查配置语法:
sshd -t
重启 SSH:
systemctl restart sshd
1.5 限制 SSH 登录尝试次数和连接数
为了防止攻击者大量并发连接 SSH,占用系统资源,对 SSH 登录时间、认证次数和并发连接数进行限制。
vim /etc/ssh/sshd_config
添加
raceTime 20:客户端连接后必须在 20 秒内完成认证。
MaxAuthTries 3:每个连接最多尝试 3 次认证。
MaxSessions 2:限制单个 SSH 连接可打开的会话数量。
MaxStartups 3:30:10:限制未认证连接数量,超过后按比例拒绝,最多允许 10 个。
ClientAliveInterval 300:每 300 秒检测一次客户端是否在线。
ClientAliveCountMax 2:连续 2 次无响应后断开连接。
检查并重启:
sshd -t
systemctl restart sshd
1.6 安装 Fail2ban,自动封禁异常 IP
为了自动处理 SSH 暴力破解、Nginx 异常访问、WordPress 扫描等行为,安装 Fail2ban 并配置规则。
dnf install epel-release -y
dnf install fail2ban -y
systemctl enable fail2ban --now
创建本地配置文件:
vim /etc/fail2ban/jail.local
示例配置:
[sshd]
enabled = true
port = 71234
filter = sshd
logpath = /var/log/secure
maxretry = 3
findtime = 300
bantime = 3600
[nginx-sensitive]
enabled = true
port = http,https
filter = nginx-sensitive
logpath = /var/log/nginx/access.log
maxretry = 3
findtime = 300
bantime = 86400
创建 Nginx 敏感路径过滤规则:
vim /etc/fail2ban/filter.d/nginx-sensitive.conf
比如
[Definition]
failregex = ^<HOST> -.*"(GET|POST).*(/xmlrpc\.php|/wp-config\.php|/\.git|/readme\.html|/license\.txt|/wp-admin/install\.php).*" .*
ignoreregex =
重启 Fail2ban:
systemctl restart fail2ban
查看状态:
fail2ban-client status
fail2ban-client status sshd
fail2ban-client status nginx-sensitive
1.7 配置定时任务监控服务器状态并异常报警
2. Nginx 优化
2.1 配置 SSL 证书
为了支持 HTTPS 访问,提高访问安全性,配置 SSL 证书并开启 HTTP 到 HTTPS 的跳转。
将证书文件放入指定目录:
mkdir -p /etc/nginx/ssl
Nginx 配置示例:
server {
listen 80;
server_name threcial.cn www.threcial.cn;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl http2;
server_name threcial.cn www.threcial.cn;
ssl_certificate /etc/nginx/ssl/fullchain.pem;
ssl_certificate_key /etc/nginx/ssl/privkey.pem;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
root /www/wwwroot/threcial.cn;
index index.php index.html index.htm;
}
检查配置并重载:
nginx -t
systemctl reload nginx
2.2 Nginx 层面禁止访问敏感路径
WordPress 经常被扫描的敏感文件包括 xmlrpc.php、.git、wp-config.php、readme.html、license.txt、备份文件等。通过 Nginx 直接拦截,减少请求进入 PHP 和 WordPress 的次数。
在站点配置中添加:
location = /xmlrpc.php {
deny all;
access_log off;
log_not_found off;
}
location ~* /(\.git|\.svn|\.env|\.DS_Store) {
deny all;
access_log off;
log_not_found off;
}
location ~* /(wp-config\.php|readme\.html|license\.txt|composer\.(json|lock)|package\.json) {
deny all;
access_log off;
log_not_found off;
}
location ~* \.(bak|old|backup|sql|tar|gz|zip|7z|rar)$ {
deny all;
}
禁止上传目录执行 PHP:
location ~* /wp-content/uploads/.*\.php$ {
deny all;
}
检查并重载:
nginx -t
systemctl reload nginx
2.3 配置静态资源缓存
为图片、CSS、JS、字体等静态资源设置浏览器缓存,减少重复请求,提高页面二次访问速度。
实际操作:
location ~* \.(jpg|jpeg|png|gif|ico|webp|svg|css|js|woff|woff2|ttf|eot)$ {
expires 30d;
add_header Cache-Control "public, no-transform";
access_log off;
}
检查并重载:
nginx -t
systemctl reload nginx
2.4 开启 Gzip 压缩
对文本类资源进行压缩传输,减少 HTML、CSS、JS、JSON 等文件体积。
实际操作:
gzip on;
gzip_proxied any;
gzip_min_length 10k;
gzip_comp_level 6;
gzip_types text/plain text/css application/xml application/json application/javascript text/javascript;
检查配置:
nginx -t
systemctl reload nginx
3. PHP 优化
3.1 调整 PHP 参数,降低单进程资源占用
WordPress 对 PHP 依赖较重,如果 PHP 参数过大,会导致轻量服务器内存占用过高。因此根据服务器配置调整 PHP 参数。
编辑 PHP 配置文件:
vim /etc/php.ini
示例配置:
memory_limit = 128M
max_execution_time = 60
max_input_time = 60
post_max_size = 32M
upload_max_filesize = 32M
max_file_uploads = 20
重启 PHP-FPM:
systemctl restart php-fpm
验证配置:
php -i | grep memory_limit
php -i | grep max_execution_time
3.2 优化 PHP-FPM 进程数量
根据轻量服务器内存大小,调整 PHP-FPM 子进程数量,避免并发过高时内存被打满。
实际操作:
vim /etc/php-fpm.d/www.conf
示例配置:
pm = dynamic
pm.max_children = 8
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 4
pm.max_requests = 500
重启服务:
systemctl restart php-fpm
查看 PHP-FPM 进程:
ps -ef | grep php-fpm
3.3 开启 OPcache
开启 PHP OPcache,缓存 PHP 编译后的字节码,减少 WordPress 每次请求时重复编译 PHP 文件的开销。
实际操作:
编辑 OPcache 配置:
vim /etc/php.d/10-opcache.ini
示例配置:
opcache.enable=1
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=10000
opcache.revalidate_freq=60
opcache.validate_timestamps=1
重启 PHP-FPM:
systemctl restart php-fpm
验证:
php -i | grep opcache.enable
4. WordPress 优化
4.1 修改 WordPress 登录页地址
WordPress 默认登录地址 /wp-login.php 和 /wp-admin 容易被扫描和爆破。通过插件或规则修改登录入口,减少无效请求。
在 WordPress 后台安装登录地址修改插件,例如 WPS Hide Login 类插件,设置新的登录地址:
原地址:/wp-login.php
新地址:/自定义登录路径
同时在 Nginx 中限制默认登录入口访问:
location = /wp-login.php {
deny all;
}
如果仍需保留部分访问,可以改为仅允许指定 IP:
location = /wp-login.php {
allow 你的固定IP;
deny all;
include fastcgi_params;
fastcgi_pass unix:/run/php-fpm/www.sock;
}
重载 Nginx:
nginx -t
systemctl reload nginx
4.2 创建页面缓存,提高访问速度
WordPress 动态页面每次访问都需要经过 Nginx、PHP、数据库和主题渲染。通过页面缓存,将动态页面生成静态 HTML,提高访问速度。
实际操作:
在 WordPress 后台安装并启用缓存插件,例如 WP Super Cache、W3 Total Cache 或 LiteSpeed Cache。
以页面缓存为例,开启:
启用缓存功能
启用页面静态化
启用移动端缓存
启用已知用户不缓存
启用压缩页面
设置缓存过期时间
检查缓存目录是否生成缓存文件:
ls -lh wp-content/cache/
如果使用 Nginx,需要确认伪静态和缓存规则正常,不要让缓存插件生成的规则与 Nginx 配置冲突。
4.3 创建本地字体库
主题或插件默认可能从外部 CDN 加载字体,国内访问容易变慢。将字体文件下载到本地服务器,由本地 Nginx 提供访问。
创建字体目录:
mkdir -p /www/wwwroot/threcial.cn/wp-content/uploads/fonts
上传字体文件,例如:
woff
woff2
ttf
在主题 CSS 或自定义 CSS 中引用本地字体:
@font-face {
font-family: 'LocalFont';
src: url('/wp-content/uploads/fonts/font.woff2') format('woff2');
font-weight: normal;
font-style: normal;
font-display: swap;
}
设置字体文件缓存:
location ~* \.(woff|woff2|ttf|eot)$ {
expires 30d;
add_header Cache-Control "public";
access_log off;
}
5. 优化总结
本次优化主要从系统层、Nginx 层、PHP 层和 WordPress 层进行处理。
系统层面:
增加 Swap,配置防火墙,修改 SSH 端口,关闭密码登录,限制 SSH 连接数,并使用 Fail2ban 自动封禁异常 IP,提高服务器稳定性和基础安全性。
Nginx 层面:
配置 HTTPS,拦截敏感路径,禁止访问高风险文件,开启静态资源缓存和 Gzip 压缩,减少恶意请求和重复资源加载。
PHP 层面:
调整 PHP 参数和 PHP-FPM 进程数量,开启 OPcache,减少 PHP 资源占用,提高 WordPress 动态页面处理效率。
WordPress 层面:
修改后台登录地址,配置页面缓存,创建本地字体库,并优化 Sakurairo 主题静态资源,减少数据库查询和外部资源请求。
整体效果:
网站访问速度提升,移动端加载更稳定,服务器资源占用降低,同时增强了对 SSH 爆破、WordPress 扫描和敏感路径访问的防护能力。
Comments NOTHING