之前使用的是阿里云轻量云服务器,今年年底到期,因为阿里云主机续费就是大大大大大大坑,因此迁移主机是迟早都要解决的问题。正好最近6.18促销活动,新用户购买ECS-T5突发20%性能的云主机400多元3年,1核2G-3M-40G,难道这不香吗?可惜最长只能买3年。
买!买!买!
6月15日下单购买了ECS-T5,3年。
购买之后,确实不会怎么玩。首先熟悉了一下控制台大概的内容,有点无从下手,各种功能点来点去。尝试编译LAMP源码看看好不好玩的,于是用putty连上服务器,各种操作之后编译了最新版的apache2.4.43与php7.4.7,但是apache无法解析php………烦,没时间搞了。
服务器闲置了1天之后,进入控制台看看吧,然后控制台提示存在xxx个漏洞,建议修复#@¥@#%。然后反正没有部署任何东西,编译的源码又由于配置不合适没法工作,就让他修复一下吧。又这样闲置了一天,在本地的主机研究了编译apache与php源码,解决了各种问题,终于成功工作了。正准备在ECS上面再次编译,测试的时候,却发现putty无法连接ECS服务器!进入控制台重启ECS服务器,重启了很长时间,才成功重启,但是依然无法连接服务器,ping服务器公网地址也无响应。
不得不说阿里云那个云安全中心修复漏洞实在是太坑人了。centos系统居然被他给修坏了,怪不得修复漏洞的时候总提示建立快照,谁不知道建立快照呢,快照又得收费,而且怎么计费我实在是看不懂。为了避免不必要的麻烦,后续搞不清楚的按时,按量付费的,一律不玩。所以,快照功能,对于我等于没有的功能。现在云安全中心修漏洞修坏了系统,幸运的是我没有部署有用的东西到服务器,直接重新初始化硬盘,问题解决了。
云安全中心只是免费试用7天,之后如果需要,是要收费才能使用的。第一印象就给我修坏系统,即使免费使用,我也不用。
废话之后,切入正题。
为何从LAMP迁移至LNMP
自从购买了ECS-T5之后,才着手尝试编译apache与php源码,遇到各种乱七八糟的问题,各种找资料解决,之后成功的运行起来后发现,也就那样。运行WordPress的速度也许是快了点点 30ms 左右(非常不准确的估计,心理作用占比更大),最重要的是不小心 yum update 之后从centos7.3升级到centos7.8,apache居然无法启动了,提示libonig.so.2 …@#$#%$^ 反正我用 find / -name libonig.so 只找到 libonig.so 与 libonig.so.5 没有找到 libonig.so.2。哎……!2天时间折腾编译apache与php,浪费,没意义,直接 yum install 不香吗?yum install 版本太老,就用centos scl软件集,虽然不是最新的版本,已经是非常新的稳定版本了。所以,再次在本地测试使用 scl 软件集,干脆尝试 nginx + php + mysql 组合。
不试不知道,试过才知道,也就那样!!nginx1.18.0 + rh-php73 + rh-mysql80 貌似比编译好的 apache2.4.43 + php7.4.7 + mysql8 快了点点 (20ms可能也是心理作用)
最重要的是,没有配置过 nginx 却比 apache 更容易接受,就凭这点,我决定了转投 nginx
从LAMP迁移至LNMP的操作记录
一、备份旧网站数据库与网站文件
我之前已经设置好每天自动备份MySQL与wp-content目录,下载到本地准备上传到新环境。
二、搭建LNMP环境并导入旧网站备份
系统选择的是阿里云centos7.6镜像。
1、安装NMP环境
在安装NMP环境之前,先升级一下系统,据说有漏洞,那么就在centos里升级吧。
查看当前系统版本
cat /etc/redhat-release #查看centos系统版本
cat /proc/version #查看linux内核版本
既然选择的是centos7.6,就肯定不需要更新到7.8,所以更新时不升级系统与内核。
修改yum的配置文件,不更新centos系统版本与Linux内核版本
vi /etc/yum.conf
在[main]的最后添加
exclude=kernel* #不更新Linux内核版本
exclude=centos-release* #不更新centos系统版本
修改保存 yum.conf 之后,执行更新。
yum update #执行更新
顺利的话,会更新一堆的东西。报警告等无法更新的话,那就别更新了,不如直接ECS选高版本的系统。比如要使用centos7的版本,直接在ECS控制台选7版本最高版本号的那个使用即可。
更新完成之后,reboot 一下,开始部署NMP环境。
检查并关闭防火墙与 selinux ,因为ECS自带内外网出入端口自定义。(这样处理不知合理与否)
安装 Software Collections 软件集 centos-release-scl
因为之前修改了 yum.conf 排除了 centos 更新系统版本,会导致无法安装 centos-release-scl ,所以,要再次修改 yum.conf
vi /etc/yum.conf
在[main]的最后添加
exclude=kernel* #不更新Linux内核版本
#exclude=centos-release* #把这行注释掉
然后执行安装 centos-release-scl
yum install -y centos-release-scl
安装好 centos-release-scl 之后再把 yum.conf 改回禁止更新centos系统版本即可。
安装 epel、webtatic 源
rpm -Uvh https://mirror.webtatic.com/yum/el7/epel-release.rpm
rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm
安装 nginx
创建 nginx 安装源
vi /etc/yum.repos.d/nginx.repo #创建安装源
#编辑nginx.repo内容如下
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
先安装 yum-utils
yum install yum-utils -y
再安装 nginx
yum install nginx -y
安装 rh-mysql80
yum install rh-mysql80 -y
安装 rh-php73
yum install -y rh-php73 rh-php73-php rh-php73-php-fpm rh-php73-php-gd rh-php73-php-mbstring \
rh-php73-php-intl rh-php73-php-pecl-apcu rh-php73-php-mysqlnd rh-php73-php-pecl-redis \
rh-php73-php-opcache rh-php73-php-imagick rh-php73-php-bcmath rh-php73-php-gmp \
2、配置NMP
MySQL初始化
启动 rh-mysql80
service rh-mysql80-mysqld start
启用 bash 命令
scl enable rh-mysql80 bash
查看 mysql 版本
mysql -V
设置开机启动 mysql
systemctl enable --now rh-mysql80-mysqld
创建 mysql 启动脚本
vi /etc/profile.d/rh-mysql80.sh
#rh-mysql80.sh内容如下
source /opt/rh/rh-mysql80/enable
export X_SCLS="`scl enable rh-mysql80 'echo $X_SCLS'`"
设置 mysql 字符集
vi /etc/opt/rh/rh-mysql80/my.cnf.d/mysql-server.cnf
[mysqld]
character-set-server=utf8mb4 # 在[mysqld]下加入此行
重启 mysql
service rh-mysql80-mysqld stop
service rh-mysql80-mysqld start
初始化 mysql 数据库
mysql_secure_installation
然后按照步骤设置即可。我的设置:y,1,输入root密码,y,y,y,y,y
查看 mysql 数据库字符集
mysql -u root -p #以root身份登录数据库
show variables like '%character%';
+--------------------------+---------------------------------------------------+
| Variable_name | Value |
+--------------------------+---------------------------------------------------+
| character_set_client | utf8mb4 |
| character_set_connection | utf8mb4 |
| character_set_database | utf8mb4 |
| character_set_filesystem | binary |
| character_set_results | utf8mb4 |
| character_set_server | utf8mb4 |
| character_set_system | utf8 |
| character_sets_dir | /**************************************/charsets/ |
+--------------------------+---------------------------------------------------+
然后创建 mysql 数据库数据表,用户、密码(与之前旧网站的数据表、用户、密码一样,以便导入旧数据,不知是否合理)
将旧网站备份的数据库文件上传到服务器,然后导入数据库
#选择数据表
use db1; # db1 为数据表名称
#导入数据
source /sqlbak/db1_bak.sql; # db1_bak.sql 为数据库备份文件名称
配置 php-fpm
修改 php-fpm 配置文件
vi /etc/opt/rh/rh-php73/php-fpm.d/www.conf
# 用户 = nginx ,组 = nginx
; RPM: apache user chosen to provide access to the same directories as httpd
user = nginx #安装好默认值apache
; RPM: Keep a group allowed to write in log dir.
group = nginx #安装好默认值apache
启动 php-fpm
service rh-php73-php-fpm start
设置 php-fpm 开机启动
systemctl enable --now rh-php73-php-fpm
隐藏 php 版本号
vi /etc/opt/rh/rh-php73/php.ini
; Decides whether PHP may expose the fact that it is installed on the server
; (e.g. by adding its signature to the Web server header). It is no security
; threat in any way, but it makes it possible to determine whether you use PHP
; on your server or not.
; http://php.net/expose-php
expose_php = Off #默认On,修改为Off
配置 nginx
查看 nginx 版本,以及确认 http_ssl_module 模块
nginx -V
修改 nginx 辅配置文件 支持 SSL
vi /etc/nginx/conf.d/default.conf
server {
listen 80;
server_name www.域名.com;
#80端口访问跳转443端口
rewrite ^(.*)$ https://${server_name}$1 permanent;
}
server {
#开启ssl https访问
listen 443 ssl;
server_name www.域名.com;
ssl on;
#root html;
#index index.html index.htm;
ssl_certificate /证书/实际/路径/ssl证书名.pem;
ssl_certificate_key /证书/实际/路径/ssl证书名.key;
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
#charset koi8-r;
#access_log /var/log/nginx/host.access.log main;
location / {
root /usr/share/nginx/html;
#增加支持php
index index.html index.php;
#解决除了首页外,所有页面404的问题。
try_files $uri $uri/ /index.php?$query_string;
if (!-e $request_filename){
rewrite ^/(.*) /index.php last;
}
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
location ~ \.php$ {
# root html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /网站/根目录/路径/html$fastcgi_script_name;
include fastcgi_params;
}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
}
隐藏 nginx 版本号
vi /etc/nginx/nginx.conf
# 主配置文件 http {内容}
http {
server_tokens off; #隐藏nginx版本号
}
启动 nginx 并设置开机启动
systemctl start nginx
systemctl enable nginx
所有配置基本完成,reboot ,测试网站。
上传网站文件备份至对应目录,测试网站正常运行,一切都是那么的熟悉!响应速度完全上了一个档次!!(→_→)
记录可能有错漏,有时间再优化一下,因为阿里云控制台又给我找出了安全漏洞 (@_@;)

