为了网站访问速度以及之后展示摄影照片,近期把服务器从香港迁移到了上海。过程中踩了不少坑,以此来记录一下。
运行环境
网站基于WordPress搭建,WordPress需要PHP,MySQL以及Apache(或者Nginx)。
旧服务器使用CentOS加宝塔面板,使用简单方便,堪称傻瓜式操作。。缺点就是占用资源,还会可能出现漏洞,推荐小白或者不喜欢折腾的用户使用。
项目 | 旧服务器 | 新服务器 |
配置 | 1C1G30M | 1C2G5M |
系统 | CentOS(BT-Panel) | Aliyun Linux 2.19.03 |
地理位置 | 香港 | 上海 |
WordPress | 5.7 | |
PHP | 7.4 | |
Nginx | 1.18 | 1.16 |
MySQL | MySQL 5.6 | 阿里云 云数据库RDS(MySQL 8.0) |
OSS | 阿里云OSS | |
CDN | 无 | 阿里云CDN/DCDN加速 |
相较于旧的,新服务器移除了宝塔面板,系统和服务更加精简,且使用了CDN加速,缺点就是大陆服务器需要备案,一套流程走下来费时费力。。
安装Nginx
注意:以下内容基于Aliyun Linux系统,不过CenOS应该也能用。
老规矩,先更新软件。
yum update
自带的yum源就有nginx,直接安装即可。
yum -y install nginx
安装完成之后使用以下命令添加到开机启动项。
systemctl enable nginx
然后启动nginx服务。
systemctl start nginx
其他命令:
// 关闭Nginx systemctl stop nginx // 重启Nginx systemctl restart nginx
启动Nginx之后,打开浏览器,地址栏输入服务器的IP并回车,不出意外就能看到成功安装Nginx的提示了。
安装PHP
这一步稍显麻烦,首先查看是否有适合的php版本:
yum list php
然后发现只有5.4的版本,这肯定是不行的,推荐使用php 7以上。
安装remi
yum install http://rpms.remirepo.net/enterprise/remi-release-7.rpm
重建yum缓存,可以提高检索速度。
yum clean all yum makecache
进入正题,安装php全家桶。
yum install -y php74-php-fpm php74-php-cli php74-php-bcmath php74-php-gd php74-php-json php74-php-mbstring php74-php-mcrypt php74-php-mysqlnd php74-php-opcache php74-php-pdo php74-php-pecl-crypto php74-php-pecl-mcrypt php74-php-pecl-geoip php74-php-recode php74-php-snmp php74-php-soap php74-php-xmll
注意,这行是安装php7.4的。如果想安装7.3版本,将上述命令中的74替换成73即可。然后
然后开机启动。
systemctl enable php74-php-fpm
启动php服务。
systemctl start php74-php-fpm
这里面最坑的就是php74-php-fpm这个服务名。。特么的试了好多次才试出来,不知道是不是系统是阿里云的原因。
如果是CentOS,这个服务名应该是php-fpm.service
配置Nginx
到这一部,已经装好了Nginx和PHP,但是还有一些问题。
新建一个名为info.php的文件,内容如下:
<?php phpinfo(); ?>
将该文件上传到网站根目录/usr/share/nginx/html,然后使用浏览器打开 服务器IP/info.php ,正常情况下会显示php的详细信息,但是现在会发现浏览器把info.php文件下载下来了。。
原因是Nginx配置错误。
打开nginx的配置文件 /etc/nginx/ngin.conf,里面有如下配置:
server { listen 80 default_server; listen [::]:80 default_server; server_name _; root /usr/share/nginx/html; # Load configuration files for the default server block. include /etc/nginx/default.d/*.conf; location / { } error_page 404 /404.html; location = /404.html { } error_page 500 502 503 504 /50x.html; location = /50x.html { } }
其中root /usr/share/nginx/html; 就是指网站的根目录。
在server { } 区块内添加如下代码:
location ~ .*\.php$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; }
这段代码意思是让php后缀的文件传入后端php服务处理,添加之后重启nginx服务。
systemctl restart nginx
再次访问 IP/info.php,页面也正常显示。
其中Loaded Configuration File是php的配置信息目录,以后修改WordPress的文件上传大小限制会用得到。
配置MySQL数据库
为了追求安全和性能,这次不再在本地搭建MySQL,转而使用阿里云的数据库服务。
登录阿里云RDS,创建完用户和数据库之后登陆DMS后台,将备份的sql文件进行导入。
(如果是第一次搭建网站,这一步可以略过)
如果新网站的域名和旧的不一样,或者域名还未解析(比如我的还在备案,无法解析到大陆服务器),就要手动改一下数据库里存储的网站地址,不然打开新网站会自动跳转到旧网站。
在DMS后台使用以下命令查询:
SELECT * FROM `wp_options`
点击开启编辑,将siteurl和home字段改为新的服务器地址。
如果用的其他数据库管理a系统没有可视化界面,也可以使用命令行修改:
UPDATE `数据库名`.`wp_options` SET `option_value`='新网站地址' WHERE `option_id`=1; UPDATE `数据库名`.`wp_options` SET `option_value`='新网站地址' WHERE `option_id`=2;
另外记得将服务器IP地址加入白名单,否则无法访问。
设置完毕之后可以在服务器上ping一下数据库地址,如果能ping通,代表能正常访问。
导入WordPress
打开备份好的WordPress目录里的wp-config.php文件,修改数据库配置。
// ** MySQL settings - You can get this info from your web host ** // /** The name of the database for WordPress */ define( 'DB_NAME', '数据库名' ); /** MySQL database username */ define( 'DB_USER', '用户名' ); /** MySQL database password */ define( 'DB_PASSWORD', '密码' ); /** MySQL hostname */ define( 'DB_HOST', '数据库地址' ); /** Database Charset to use in creating database tables. */ define( 'DB_CHARSET', 'utf8mb4' ); /** The Database Collate type. Don't change this if in doubt. */ define( 'DB_COLLATE', '' );
然后将所有文件上传到服务器根目录。
(如果是第一次搭建网站,直接使用WordPress官网下载的文件即可)
上传完毕后使用浏览器打开网址,可能会出现403错误,这个时候需要继续修改nginx配置。
打开nginx.conf,在location / { } 区块内添加代码如下:
location / { index index.php index.html index.htm; }
然后重启nginx,再次打开网址就正常了。
如果什么都看不到,可能是数据库配置出了问题,建议删除网站根目录的wp-config.php文件,重新打开网址一步步配置。
其他的坑
WordPress-设置-固定链接只能只用朴素类型,其他其他的类型时打开文章或分类出现403,404错误。
这个也是因为nginx配置问题,
打开nginx.conf,在location / { } 区块内添加代码如下:
location / { index index.php index.html index.htm; try_files $uri $uri/ /index.php?$args; }
然后重启nginx就可以了。
更新插件/系统或上传文件提示没有权限,要输入FTP账号。
这个就更坑了。。本质上是Linux系统的权限问题,WordPress没有访问自身文件夹的权限,解决方法有两个:
1.将网站根目录权限改为777;
网上很多教程都是这么建议的,讲道理,但凡有点安全方面的尝试,就不会这么做。
2.创建FTP服务和账号;
这个可以用,但是太麻烦了。。
2.将网站根目录所有者改为WordPress
简单好用,就它了。蛋疼的事情来了,我需要知道WordPress的user名是什么,但这个user名既不是WordPress又不是root,更不是nginx,也不是网上说的www,www-data。
最终试了一圈,嘿!居然是 apache
apache???我不是用的nginx吗??
结果就是,使用chown命令赋予权限。
chown -R apache:apache 网站根目录
设置完成后可使用ll命令查看:
使用www.域名方式访问网站报403错误
比如我的网站域名是 vki.cc,本意是想使用 www.vki.cc 也能访问网站。于是在域名解析那里使用 cname 将 www.vki.cc 指向 vki.cc,就有了403错误。
尝试了下,将解析方式改为A记录指向服务器IP就能访问了。
虽然可能造成CDN无法加速,不过问题不大。
主机记录为@时,记录类型 cname 与邮箱解析 MX 冲突
换句话说,如果我使用CDN服务,就不能同时以 vki.cc 访问网站和使用 vki.cc 域名邮箱。
这是我没有料到的,以前没有用CDN的时候,域名直接A记录指向服务器IP,同时使用域名邮箱没有问题。现在这两个冲突,只能选一个,只好放弃邮箱了Orz
搜了一下,有些域名服务商使用link表什么的骚操作可以避免冲突,不过我邮箱用得少,而且转出域名太麻烦,就懒得折腾了,有兴趣可以了解下。
CDN加速
这个有空写个文章详细说,先放两张结构图吧,一个前,一个后。
未使用CDN
使用CDN