Wordpress的坑
写在前面:这篇是给纯纯的新手看的,看完这篇建一个安全的自有站完全ok。
——muyu1900
1.建站
1.1服务器
国内服务器可选择的有阿里云、腾讯云、华为云、青云等,阿里云现在市场份额国内第一,相比其他家各个节点都是价格最便宜。但是目前阿里云亚太地区服务器会绕道日本、新加坡,就比较烦,偶尔丢包,平均下来80ms。我有提交工单给到阿里那边,对方反馈是运营商问题。腾讯、青云这两家亚太区是直连,非常赞,当然价格就会贵一些。
国外能选谷歌、亚马逊这些大牌,谷歌有墙。亚马逊能免费一年。如果要vps还能选搬瓦工。当然只是国内业务的话最好就选国内服务器。不想备案就选亚太区点。如果是准备做个跨境独立站这种,建议再仔细对比下价格跟服务,我推荐亚马逊云。
1.2环境
想完全省事的看这里:现在选服务器配置前一般会有个镜像选择,系统、环境一应俱全,你只需要下一步下一步完成付款就能得到一个wordpress安装完成且环境配置好的服务器。具体参照各提供商云服务器选购页面。这里特别说下,镜像提供一般都是免费的,但个别会有个每月服务费显示收费,字很小,不明显,大家选择的时候注意下即可。因为手动安装确实没什么难度,随便搜搜到处都是方法。
想一般省事的看这里:利用宝塔windows面板一键安装IIS组件、PHP环境、MySQL数据库。阿里云有步骤,照着来就行了。为什么说一般省事呢,因为环境安装完后期调试修改的时候,直接在面板里修改就好了,对于不熟悉命令行操作,也不知道怎么改的小伙伴非常方便。并且相关的方案搜索起来也很多。
想稍微折腾下的看这里:手动部署LNMP环境,手动部署LAMP环境。L代表linux, N代表nginx , A代表apache, M代表mysql, P 代表php。这些都是配置一个web环境所需的。以上链接都是阿里云官方的帮助链接,更新日期为2020年9月,蛮新的,而且非常详细,照着一步步来就好了。
因为涉及到手动部署,这里写几个可能会常用到的linux命令。
创建一个在aaaa/bbbbb路径下名叫ccccc的文件夹:mkdir /aaaa/bbbbb/ccccc
查找名叫php.ini的文件:find / -name php.ini
在aaaa目录下查找以.php后缀名结尾的文件:find /aaaa -iname ".php"
scp远程上传下载:
scp username@servername:/aaa/bbbb/wenjian.txt /111/2222
把servername上的/aaa/bbbb/wenjian.txt文件下载到本地的/111/2222
scp /111/2222/wenjian.txt username@servername:/aaa/bbbb/
把本地的路径为/111/2222/的wenjian文件上传至服务器为servername的/aaa/bbbb/下
vi编辑模式:用vi 命令打开文件后,按 i 开始编辑文档,按 esc 退出编辑状态,接着输入
:q! 表示不保存文档,退出vi
:wq 表示保存文档,退出vi
1.3安装
同样的,阿里云有最完整的教程,这里是链接。
2.优化
到这里,wordpress已经安装完成,如果你有域名并且解析至服务器,那么现在输入域名已经可以访问了。(国内节点请先域名备案)。没有域名的同学可以使用公网IP访问,能打开即表示安装成功。那么在使用前我们还需对它变更一些设置、优化,方便日后能安全便捷的使用及维护。
2.1安全
2.1.1不用默认设置
比如默认后台登陆地址:wp-admin wp-login
wordpress的后台默认登陆地址均为:你的域名/wp-login.php,我们需要改变它,毕竟你自己的网站,后台登陆地址你自己知道就好。我们需要修改主题文件下的functions.php文件,这里就需要find命令。
find / -name functions.php
窗口就会列出所有名为functions.php的文件。找到wordpress主题下的 即/themes下。
vi命令打开,按 i 进入编辑状态,添加如下代码:
add_action('login_enqueue_scripts','login_protection');
function login_protection(){
if($_GET['自定义'] != '自定义1')header('Location: https://随便什么域名/');
}
意思就是,登陆地址变为 https://你的域名/wp-login.php?自定义=自定义1
如果不是这个地址,那么将跳转到 https://随便什么域名/ 这个地址。
按 esc 退出编辑,输入 :wq 保存并退出。
数据库默认前缀 : wp_ 及 默认用户名:admin在 wordpress安装过程中可更改,参考前文。
2.1.2保持wordpress更新
如果点击更新提示,无法创建目录,这是由于权限问题。千万不要按照网上写的 给予目录 777 权限。解决办法是
1.参考FTP创建,在后台更新那里输入你创建好的FTP账号。
2.手动更新。备份完成后,停用插件。下载新版本wordpress 解压。删除其中wp-content文件及子文件。将新版本复制上传至原网站根目录,替换所有。再次登陆后台,会提示更新数据库,更新即可。
如果FTP没有弄好,手动上传也没做好,那么建议宁可不更新也不要给予777权限更新。
2.1.3定期备份
如果之前服务器选择了宝塔面板的,备份功能会自动含在里面。如果是手动安装环境,建议用插件来满足数据定期备份需求。
2.1.4静态化
打开nginx配置文件: vim /etc/nginx/nginx.conf
location位置下 添加如下
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 : systemctl restart nginx
2.2https
现在谷歌浏览器已经把没有ssl证书的网站标记为不安全网站了,所以哪怕是为了好看,你的网站也必须要有ssl证书。ssl证书有付费免费的。这里只说免费的。
2.2.1阿里云
阿里云仅提供免费的单域名https证书,免费版一年有效期,不支持自动化申请和部署,也就是说快到期了你要自己重新申请然后部署。这是申请链接。
2.2.2腾讯云
和阿里云一样,免费版提供单域名,最长一年,不支持自动化。这是申请链接。
2.2.3certbot
certbot是一个脚本类型的Let's Encrypt证书申请客户端,需要有命令行使用经验,有效期90天。支持自动化,但是需要添加额外插件,对新手来说有一定难度。这是申请链接。
2.3.4acme.sh
acme.sh也是申请的Let's Encrypt证书。它支持自动化,有效期90天,相比certbot操作起来要简单一些。这里是项目地址。其中有中文社区。
2.3.5ohttps.com
ohttps.com类似于acme.sh,但是更加友好。可自动部署至多个节点,这点比acme.sh强。所以最推荐的是ohttps.com。这是申请链接。
以上只是证书申请,申请下来后还需要做配置安装。这里以acme.sh在nginx上为例:
安装到home目录下:~/.acme.sh/
生成有两种方式:http和DNS
acme.sh 会智能的从nginx服务器中完成验证 无需指定网站根目录:
acme.sh --issue -d 你的域名 --nginx
DNS方式:先acme.sh --issue --dns -d 你的域名 然后会生成解析记录,将这条记录添加至域名控制面板txt记录中,等待解析完成。
再重新生成证书:acme.sh --renew -d 你的域名
安装证书:一开始我们安装时在home目录下,我们不直接使用该目录下文件,因此需要拷贝出来。这里需要新建文件夹命令:mkdir 假设在ssl文件夹下: mkdir /etc/nginx/ssl
以nginx为例:
acme.sh --install-cert -d 你的域名 \
--key-file /etc/nginx/ssl/key.pem \
--fullchain-file /etc/nginx/ssl/cert.pem \
--reloadcmd "service nginx force-reload"
这里对应之前生成的填写即可。
升级acme.sh到最新版:acme.sh --upgrade
自动升级:acme.sh --upgrade --auto-upgrade
关闭自动更新:acme.sh --upgrade --auto-upgrade 0
debug:acme.sh --issue ..... --debug
nginx配置:
确认开通443接口
打开nginx配置文件:vim /etc/nginx/nginx.conf nginx已经写好了ssl格式,只要把注释取消掉,指定网站根目录地址,指定证书地址即可。
对照修改即可:
server {
listen 443 ssl http2 default_server;
listen [::]:443 ssl http2 default_server;
server_name 你的域名 www.你的域名;
root /usr/share/nginx/html/wordpress;#你网站根目录
ssl_certificate "/etc/nginx/ssl/域名.cer";
ssl_certificate_key "/etc/nginx/ssl/l域名.key";
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 10m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
include /etc/nginx/default.d/*.conf;
location / {
index index.php index.html index.htm;
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;
}
}
location ~ .php$ {
root /usr/share/nginx/html/wordpress;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params; #Nginx调用fastcgi接口处理PHP请求。
client_max_body_size 500m;
}
error_page 404 /404.html;
location = /404.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}
这里比较容易出错,比如配置完了发现ssl成功了,但是首页403,甚至自动下载index。比较坑的地方在于nginx调用fastcgi接口处理php,如果不在443下写上,那么就会打不开网站。
2.3插件
推荐几个常用插件:
Akismet Anti-Spam* 恶评管理
Autoptimize 优化css js 等 加速网站
*Phoenix Media Rename 图片重命名
*ShortPixel 图像优化器 图片优化
*UpdraftPlus-备份/恢复 备份恢复
*Yoast SEO * SEO相关
*wp101.net中文下载镜像 中文下载镜像
当然诸如前文中提到的隐藏wp-admin \wp-login 也有插件来解决
3.维护
到这一步网站已经完全能用了,接下来你可以根据想法自行填充网站内容,做SEO准备。你可能的日常为上传内容、维护用户、打击黑站、做好收录、勾搭友链等等。不要经常更换网站主题,首页风格不要频繁做大的调整,因为这些都会影响SEO,关于SEO以后再写。
4.补充
4.1修改默认上传大小
wordpress默认新媒体上传大小为2m,这显然不够。我们需要在php.ini中修改默认上传大小。
find / -name php.ini
vi 路径/php.ini
i进入编辑:
upload_max_filesize = 200M
post_max_size = 200M
upload_max_filesize = 200M
esc退出,输入 :wq 保存退出。
重启php:service php-fpm restart
这样即可修改为默认200m上传。
4.2图片上传自动裁剪2560pix
Wordpress5.3之后的版本增加了一项功能,它会把用户上传的超过2560的图片自动裁剪至最大2560.这种一刀切的做法显然不适合所有人。当你的网站需要清晰展示高质量甚至是原图时,自动裁剪无疑是个麻烦。推荐使用Jonathan Desrosiers的Disable "BIG Image" Threshold插件。简单方便且直接。
激活插件后上传图片将不会再有自动裁剪的情况出现,但是经过测试,最大像素为13000,无法超过这个尺寸。所以你的图片有超过该尺寸的需求,请向社区提问。