(图文无关,实在找不到更好的图了)
关于为何要写
很简单,最近没啥想更新的了,水篇文章。
对WordPress本身
劝退
WordPress的缺点就是它应用太过广泛了。如果不搞些安全措施,你会发现log里全是failed login。
如果可以,我个人更建议搞个纯静态博客,例如Hexo之类。我是尾大不掉,先就在WordPress上捆着得了。
关于Gutenberg区块编辑器
建议目前先禁用,等五年再说。这玩意儿用起来真的很操蛋。
具体多操蛋?其实很简单来着,如下。
关于加强安全
这个嘛……我倒是有俩方向,一个是CDN做好限制,一个是服务器做好限制。前者是防摸到真实IP就DDoS,后者就是防bot的漏洞扫描扫到站点攻破。
然而,事实证明我的防线全炸。原因是这样的:虽然说我的VPS,IPv4 NAT只给了个443和40000~65535端口,但是IPv6是有公网IP,且没有防线啊!更操蛋的是,我家和学校都没有IPv6,广电,广大炮,广断网,广没六,广五十兆,超级小广,广just works,要IPv6甚至需要且只能翻墙!!!!!!我甚至根本用不了IPv6来登录我的博客!
所以登录白名单选择天津和西安的所有IPv4地址(我天津和西安双线往返),IPv6全部拉黑(广电,广大炮,广断网,广没六,广五十兆,超级小广,广just works)。
哦对了,记得选个能重命名wp-login和禁用xmlrpc登录的插件。别问为什么。
对承载它的东西
VPS
选择什么Web服务器
看你心情。
Apache2主要优势在跨平台,Windows Server都能用,但是Nginx不行。配置文件如下。
apache2配置文件
#<VirtualHost *:80>
# RewriteEngine On
# RewriteCond %{REQUEST_URI} !^/\.well\-known/acme\-challenge/
# RewriteRule ^(.*)$ https://%{HTTP_HOST}$1 [R=301,L]
#</VirtualHost>
<VirtualHost *:443>
#RewriteEngine On
#RewriteBase /
#RewriteRule ^index.php$ – [L]
#RewriteCond %{REQUEST_FILENAME} !-f
#RewriteCond %{REQUEST_FILENAME} !-d
#RewriteRule . /index.php [L]
SSLEngine on
#LoadModule ssl_module modules/mod_ssl.so
#LoadModule socache_shmcb_module modules/mod_socache_shmcb.so
ServerName tuskede0.top
ServerAdmin [email protected]
DocumentRoot /you/guess
<Directory /you/guess>
Options FollowSymLinks
AllowOverride All
DirectoryIndex index.php
Require all granted
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
SSLCertificateFile /etc/letsencrypt/live/tuskede0.top/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/tuskede0.top/privkey.pem
# enable HTTP/2, if available
Protocols h2 http/1.1
# HTTP Strict Transport Security (mod_headers is required) (63072000 seconds)
#Header always set Strict-Transport-Security "max-age=63072000"
<Files "xmlrpc.php">
Require all denied
</Files>
</VirtualHost>
SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1
SSLCipherSuite ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-CHACHA20-POLY1305
SSLHonorCipherOrder off
SSLSessionTickets off
SSLUseStapling On
SSLStaplingCache "shmcb:logs/ssl_stapling(32768)"
Nginx主要图一个快,但是php需要一个php-fpm服务。配置文件如下。
nginx配置文件
# generated 2025-01-22, Mozilla Guideline v5.7, nginx 1.27.3, OpenSSL 3.4.0, intermediate config
# https://ssl-config.mozilla.org/#server=nginx&version=1.27.3&config=intermediate&openssl=3.4.0&guideline=5.7
server {
listen 443 ssl;
listen [::]:443 ssl;
server_name tuskede0.top;
root /you/guess/;
index index.php;
http2 on;
ssl_certificate /etc/letsencrypt/live/tuskede0.top/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/tuskede0.top/privkey.pem;
# HSTS (ngx_http_headers_module is required) (63072000 seconds)
add_header Strict-Transport-Security "max-age=63072000" always;
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
location = /favicon.ico {
log_not_found off;
access_log off;
}
location = /robots.txt {
allow all;
log_not_found off;
access_log off;
}
location / {
try_files $uri $uri/ /index.php?$args;
}
location ~ \.php$ {
try_files $uri =404;
fastcgi_pass unix:/run/php/php-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|woff2)$ {
expires max;
log_not_found off;
}
}
# intermediate configuration
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ecdh_curve X25519:prime256v1:secp384r1;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-CHACHA20-POLY1305;
#ssl_prefer_server_ciphers on;
# see also ssl_session_ticket_key alternative to stateful session cache
ssl_session_timeout 1d;
ssl_session_cache shared:MozSSL:10m; # about 40000 sessions
# curl https://ssl-config.mozilla.org/ffdhe2048.txt > /path/to/dhparam
#ssl_dhparam "/etc/letsencrypt/ssl-dhparams.pem"
# OCSP stapling
ssl_stapling on;
ssl_stapling_verify on;
# verify chain of trust of OCSP response using Root CA and Intermediate certs
ssl_trusted_certificate /etc/letsencrypt/live/tuskede0.top/fullchain.pem;
# replace with the IP address of your resolver;
# async 'resolver' is important for proper operation of OCSP stapling
resolver 127.0.0.1;
# If certificates are marked OCSP Must-Staple, consider managing the
# OCSP stapling cache with an external script, e.g. certbot-ocsp-fetcher
# HSTS
server {
listen 80 default_server;
listen [::]:80 default_server;
return 301 https://$host$request_uri;
}
而OpenLiteSpeed则是对WordPress有优化,但是它不跟随Debian Testing进度,对追新用户不太友好;几乎是全GUI配置,对小白用户来说配置容易,但是这是个降低效率的傻逼办法(具体体现在从Apache2到Nginx理论上只需要复制(预制)配置文件,停掉apache2,启动nginx和php-fpm就好;但openlitespeed需要先停服务器停止占用80和443,然后再配置);lsphp本身是个裁剪版的php,不能运行phar(lsphp不会认为这是个可执行的php文件)。(如果是要用wp-cli,建议用系统给的php,而非lsphp执行)
别找我要openlitespeed配置文件,点触摸板点的手要麻了,没预制菜可吃。
选择系统
看你心情。是的,梅开二度。
我是选择了Debian,主要原因是实在不熟悉CentOS,从7更新到8根本升不上去(也可能是8中道崩殂,7的包相比8要新得多)。
Debian的优势在文档手把手教你配,但是对于那些想追求一些自由度的人来说得多学学。例如Debian Wiki给的安装WordPress教程是LAMP方案的,而非更快的LNMP。实际上经验都是相通的。
CentOS主要优势是RHEL文档。没开玩笑,真的。对于大多数RHEL-based或RHEL-like发行版来说,RHEL的文档真的是万能教材,就是IBM之前发现红帽公司某天图标绿绿的,名字还有点怪(成了GreenHat),就一枪崩掉了CentOS,还顺带把那些给它戴绿帽的发行版也毙掉了ABI兼容。
之后提到的默认发行版为Debian Testing。我服务器毕竟不是求稳如死狗的,这狗至少得动。
选择对象缓存(NoSQL)
我选择不费脑子,对于个人博客来说Memcached,对于需要高并发、多端部署之类的Redis。这俩我都配过,单机配置都不需要脑子。
参考文章:
但是,在低内存场景下,不要选择Memcached!这玩意儿把我可怜的1GB内存占满了,我还以为是上游问题,强制重启切换回Redis就无事发生了。
配置自动更新
对于一个个人博客来说,适当追新没嘛问题。可惜我除了实在伤心会猛敲oma full-upgrade和yay -Syyu –noconfirm排解心情之外就不会显得没事跑更新去了,所以我配置了自动更新。
一般的,WordPress的自动更新不需要你担心。
对于Debian来说,有这么一个包叫unattended-upgrades,这玩意儿是走systemd的,最好再配置一下apt。自动重启的话我没啥意见,最多拖慢点访问速度(重启就不到10秒,除非有邻居下片)。(上游修了这个问题)

我更改的/etc/apt/apt.conf.d/50unattended-upgrades配置
// Automatically reboot *WITHOUT CONFIRMATION* if
// the file /var/run/reboot-required is found after the upgrade
Unattended-Upgrade::Automatic-Reboot "true";
SSL
简单,上certbot。自动续期美滋滋。
个人空间
这个嘛……预制菜,看看就好了。对于那些什么都不想管的,个人空间是一个比较好的选择了,但是它自由度实在不高。
SSL
部分提供商会要求你自己找腾讯云之类要个证书,但是WordPress上也有插件能配SSL。基本上按它要求来就好,至于插件提示不行但实际可以的忽略就好。提供者为Let’s Encrypt。
当然你也可以套个CloudFlare,那玩意儿就是走灵活(Flexable)加密(浏览器到CloudFlare加密,CloudFlare到服务器不加密)了。
发表回复