WordPress迁移更换域名 固定链接404 修改SSH端口

WordPress迁移可以分为以下几种情况:仅更改域名,仅更改服务器,变更域名和服务器。下面就以这三种情况,可以实现的方式有很多,选取了一种适合自己的,把需要进行的操作记录下来,方便整理回顾。下面出现$的统一为命令,请注意本文所有操作是基于基础环境为CentOS7+Nginx+Mysql+PHP+Wordpress,其它环境需要酌情修改。文章末尾也包含了如何备份网站,备份文件导出,修改常用SSH登录端口以及防火墙端口设置的更改,以及iptables防火墙命令示例。

更改域名

新域名添加解析,把新申请的域名new.com在域名解析中添加A记录,填写需要指向的服务器IP地址:

1
2
       A             IP             3603 
www A IP 3603 //修改域名后,域名解析成功需要几分钟到几小时不等

vps中添加vhost:

1
2
$ lnmp vhost del  //登入vps,删除旧vhost
$ lnmp vhost add //添加新vhost #LNMP添加、删除虚拟主机及伪静态使用教程

修改文章页面中的旧域名,在wordpress中搜索Velvet Blues Update URLs插件,用新域名替换旧的域名。

修改wordpress域名,进入后台在常规设置中,修改新域名,也可以进入数据库后台修改:在网页中输入你的ip/phpmyadmin,找到wordpress的数据库中的wp-options修改home和siteurl中的域名为新域名。

添加HTTPS,如果要添加https,和正常新域名添加是一样的,可以看添加HTTPS的文章。

更改服务器

下面操作的前提是新VPS已经布置好wordpress所需要的环境LNMP,关于安装lnmp这篇文章已经说的很清楚了,或者可以参考LNMP的指导文档。安装好LNMP环境后,不需要安装worpress,因为备份文件里面有网站的数据,php加速最新的LNMP中可以选择。
建议修改phpmyadmin目录(数据库后台管理),删除LNMP测试页,开启BBR加速,修改默认SSH端口22

为了安全,建议将phpmyadmin目录重命名为不容易猜到的目录。

1
2
# cd /home/wwwroot/default
# mv phpmyadmin hereispma

此安装成功页面是IP访问时的默认页面(非域名),建议删除或改名:

1
2
# rm -rf index.html 或者
# mv index.html random-name.html

开启BBR加速

BBR是Google提出的一个开源的TCP拥塞控制算法,应用于Linux4.9+内核上,对提升网速效果显著。因此,对于KVM架构的VPS,博主倾向于在正式部署生产环境之前,首先开启BBR。但这并不意味着你一定要这么做。倘若你的VPS线路已经很不错,完全可以跳过这一步。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#切换到root目录:
cd ~
#下载安装脚本:
wget --no-check-certificate https://github.com/teddysun/across/raw/master/bbr.sh
#如提示wget: command not found,可执行命令

yum install wget
#进行安装。

#安装BBR:
chmod +x bbr.sh && ./bbr.sh

#按要求输入y后,自动重启VPS。
#重新登入后,查看结果:
sysctl net.ipv4.tcp_available_congestion_control

#出现形如以下字样时,说明BBR开启成功。
net.ipv4.tcp_available_congestion_control = bbr cubic reno

修改SSH端口:

1
2
3
4
5
6
7
8
#首先,编辑配置文件:
vi /etc/ssh/sshd_config
#找到
Port 22
这行(默认端口22),把前面的 # 去掉,然后再添加一个新的端口(不超过65535),比如 Port 56789:
#保存,重启SSH
service sshd restart
#使用新的端口登入和上面一样打开修改sshd_config,删除掉22端口这一栏,就可以了。

备份网站文件:

1
2
3
4
5
6
//为了方便管理,先建立一个文件夹专门存放备份数据,比如/home/backup/
$ mkdir /home/backup
//压缩整站并移动到 /home/backup/ 文件夹下,文件命后加了日期,方便管理
$ cd /home/wwwroot //进去wordpress网站根目录
$ tar -czf smile.com-20180101.tar.gz smile.com //压缩全站文件
$ mv smile.com-20180101.tar.gz /home/backup/ //移动到刚才建立的备份文件夹

备份网站数据库:

1
2
3
4
5
6
//打开 /home/backup/ 文件夹,将数据库备份在这里,
$ cd /home/backup
//输入root 数据库密码,即可查看当前数据库列表
$ lnmp database list
//选择需要备份网站的对应数据库,sjksmile为例:
$ mysqldump -uroot -p sjk_smile > sjk_smile-20180101.sql

输入数据库密码,即可完成数据库备份。
可键入命令$ ls查看当前目录下已经存在了备份好的文件。

wordpress备份迁移:

1
2
3
4
5
6
7
8
9
#首先,创建screen会话:
screen -S lawnmower

#如提示 screen: command not found ,可执行命令
yum -y install screen 安装。

#如果安装过程中出现异常中断,重新登入VPS后,输入 # screen -r lnmp 恢复安装界面。
#由于LNMP1.5/1.4版本可一键设置SSL,所以推荐优先安装1.5版本:
wget -c http://soft.vpser.net/lnmp/lnmp1.5-full.tar.gz && tar -zxf lnmp1.5-full.tar.gz && cd lnmp1.5-full && ./install.sh

尝试过这两种方式:
1、使用FileZilla进行可视化操作,先登入旧VPS,下载备份目录/home/backup中备份到本地电脑,然后登入新VPS新建个同样目录/home/backup,上传备份到此目录,可能速度会慢一点,如果网站比较小的话300M以内,需要10分钟上传。
2、使用命令行从就VPS推送备份到新VPS。

1
2
3
4
5
6
7
8
9
#假设新VPS的IP为 8.8.8.8,SSH端口为 22,则打开备份目录,选择需要的文件备份和数据库备份上传:
#进入备份文件夹
$ cd /home/backup
#显示所有文件
$ ls
#推送网站文件备份到新VPS,回车后,按要求输入新的VPS登陆密码。
$ scp -P 22 smile.com-20180101.tar.gz root@8.8.8.8:/home/
#推送数据库备份到新VPS
$ scp -P 22 sjksmile-20180101.sql root@8.8.8.8:/home/

接下来,SSH登入新的VPS,然后解压或替换网站域名目录。

恢复网站文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#移动网站备份到/home/wwwroot
$ cp /home/smile.com-20180101.tar.gz /home/wwwroot
#进入/home/wwwroot目录
$ cd /home/wwwroot
#解压网站备份文件
$ tar -zxf smile.com-20180101.tar.gz
#删除网站备份压缩包
$ rm -rf smile.com-20180101.tar.gz

#搬家后解压的文件可能存在权限的问题,建议赋予根目录文件的可写权限。
$ chmod -R 755 /home/wwwroot
$ chown -R www /home/wwwroot
假设提示某个.ini文件没有权限,无法赋予权限,可以先执行下面命令,去除不可修改属性,
$chattr -i /提示无权限文件的路径

重新授权后,导入数据库。如果导入数据库出现error字样,或者显示数据库不存在,可以在网页上登phpmyadmin数据库后台,新建数据库(需要和备份WordPress的数据库名字一致),然后在尝试导入。

恢复数据库文件:

1
2
3
4
#恢复数据库到新的VPS
$ cd /home
$ ls
$ mysql -uroot -p sjksmile<sjksmile-20180101.sql

vps中添加vhost:该步骤和仅更改域名一样,也需要在新VPS重新添加,可看1-2步。

新IP添加解析:

1
2
3
4
5
把新IP在域名解析中添加A记录,填写需要指向的服务器IP地址
A IP 3603
www A IP 3603
#修改域名后,域名解析成功需要几分钟到几小时不等
#在域名没有变化的情况下,不需要其它设置,迁移就完成了。

主题显示问题:LNMP安装包默认禁用了scandir函数,这会导致WordPress后台看不到安装的主题,以及当前主题总显示 “有新的翻译可用” 的提醒。所以,需要开启此函数。

1
2
3
4
5
6
7
$ vi /usr/local/php/etc/php.ini
回车,然后查找scandir函数。
$ ?scandir
回车,然后按delete键删除,接下来需要保存并退出vi命令。
$ :wq
回车。然后重启一下LNMP:
$ lnmp restart

固定链接404,官方给出了新的开启wordpress固定链接的方法,也简单的多。这里假设,在nginx的conf文件夹下创建个wordpress.conf ,将下面的代码粘贴进去:

1
2
3
4
5
6
7
8
9
10
location / {
try_files $uri $uri/ /index.php?$args;
}
rewrite /wp-admin$ $scheme://$host$uri/ permanent;

#修改 conf/vhost/domain.conf 虚拟机nginx配置文件,在root 那行下面添加一行:
include wordpress.conf;

#接着重启nginx就可以正常访问了
service nginx restart

修改SSH端口:

1
2
3
4
5
6
7
8
9
10
11
12
13
#首先,编辑配置文件:
vi /etc/ssh/sshd_config
#找到 #Port 22 这行(默认端口22),把前面的 # 去掉,然后再添加一个新的端口(不超过65535),比如 Port 56789:

#保存,重启SSH即可:
service sshd restart

#接下来,在防火墙 /etc/sysconfig/iptables 里开启此端口:
iptables -A INPUT -p tcp -m tcp --dport 56789 -j ACCEPT

#保存并重启防火墙:
service iptables save
service iptables restart

或者,也可以编辑 /etc/sysconfig/iptables 文件,复制端口 22 的规则,粘贴在其下另起一行。
按 :wq 保存退出后,重启防火墙。
查看防火墙状态,看看端口是否开启成功:

1
service iptables status

现在,使用新的端口连接SSH。

若成功登录,则再次编辑 /etc/ssh/sshd_config,将里面的 Port 22 前加 # 保存后,重启SSH即可。

CentOS7防火墙中开启相关端口:

CentOS7.X中默认的防火墙 firewalld 而非CentOS6.X中的 iptables 。如果你也像博主一样感觉用着很不爽,需要换回 iptables 的,可以参考如下设置。

1
2
3
4
5
6
7
8
9
#关闭firewall并禁止开启启动:
service firewalld stop
systemctl disable firewalld.service

#安装iptables:
yum -y install iptables-services

#修改iptables配置:
vi /etc/sysconfig/iptables

粘贴如下内容(可按需要自行增删;如已更改SSH端口,22端口对应行可删除):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp --dport 56789 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 21 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 3306 -j DROP
-A INPUT -p tcp -m tcp --dport 443 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 11211 -j DROP
-A INPUT -p udp -m udp --dport 11211 -j DROP
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT

按 :wq 保存退出后,重启iptables,并设置为开机启动:

1
2
service iptables restart
systemctl enable iptables.service