之前一年的时间博客都是搭在阿里云,学生套餐,Windows08的系统,诟病太多,速度也提不上;

这次换到腾讯云,学生套餐,使用的Ubuntu 16.04,换了 PHP7,速度提升了好多;

标准 LAMP 搭建不说了,只记录下碰到的问题,可能会有些乱,尽量条理;

源码压缩包上传至 Linux 服务器

并不需要开启 ftp,使用 Xshell 连上远程服务器,安装 lrzsz,利用 rz 上传;

sudo apt-get install lrzsz
sudo rz

Windows 上 MySQL dump

直接 mysqldump -hhostname -uusername -ppassword databasename > backupfile.sql 报错超时;

不纠结直接上 adminer.php 来代替 phpmyadmin;

在界面中傻瓜式操作来 dump;

同理在 Linux 上也是上传 adminer.php 来临时导入 SQL;

Linux 上 adminer.php 导入 sql文件 限制2m

dump 下来的 sql文件 接近3m,刚超过限制,限制上传;

但可以从服务器本身导入,默认文件名 adminer.sql[.gz] ,将sql文件改名上传至 adminer.php 同目录下,运行文件;

20170408232647.png

Apache2 配置

1、主要配置在 /etc/apache2/sites-available/000-default.conf,默认配置格式可提前复制几份,以备之后子站来使用;

2、禁止跨站设置,在 <VirtualHost *:80> </VirtualHost> 中添加下面这句,意味着仅允许访问这两个目录(防菜刀中跨站):

php_admin_value open_basedir "/var/xxx/:/tmp/"

3、禁止在上传目录(/wp-content/uploads/)执行脚本,在 /etc/apache2/apache2.conf 中添加:

<Directory /var/xxxxxxxxxx/wp-content/uploads>
  # 禁止解析 php 文件
  php_admin_flag engine off
  # 禁止用户下载 php 文件
  <filesmatch ".+\.ph(p[345]?|t|tml)$">
   Order deny,allow
   Deny from all
  </filesmatch>
</Directory>

访问带 php 这类后缀的文件即给出403禁止,即使不存在的页面也会报403,加以混淆;

4、/etc/apache2/ports.conf 为监听端口设置,默认 *:80;

修改完成后添加重写模块并重启 apache2;

sudo a2enmod rewrite 
sudo service apache2 restart

php.ini 设置

1、禁止banner头中暴露 PHP 版本号:

expose_php = Off

2、禁止危险函数(大马、菜刀命令执行):

disable_functions = shell_exec,system,passthru ...

重启 apache2;

MySQL 新建专用用户

mysql - uroot - pxxx 进入MySQL交互界面;

新建一个数据库用户,名为test,密码为123456,同时授权test操作当前库的任何权限;

grant all privileges on 库名.* to [email protected] identified by '123456';

MySQL root 用户更改密码

为了避免 root 密码被猜解,更改高强度密码使其复杂化:

SET PASSWORD FOR 'root'@'localhost' = PASSWORD('新密码');

重启 apache2;

博客源码权限控制

Linux 权限要求很高,况且是 Ubuntu;

1、将 /var/xxx/wp-content/uploads 目录设置为 757

因为 Wordpress 上传图片、文件都是在服务器 uploads 目录;

Apache2 的www-data 使用的是其他用户的权限,即 7(rwx);

x权限可以进入 uploads 文件夹;

w权限可以在 uploads 下创建基于年份-日期的文件夹;

20170409001420.png

2、将 /var/xxx/wp-content/upgrade 目录给予权限7

因为在后台安装东西需要使用;

至于 plugins/ themes/ 插件,模板文件夹,具体使用时在赋予权限吧;

3、根目录下 wp-includes 目录以及新建的文件夹,设置为 751

即去掉其他用户的读r权限,使其对外403,防止敏感信息泄露;

利用 crontab 来定时备份数据

配置文件:/etc/crontab

分     小时    日     月      星期      命令
0-59   0-23   1-31   1-12     0-6     command     (取值范围,0表示周日一般一行对应一个任务)

记住几个特殊符号的含义:
“*”代表取值范围内的数字,
“/”代表”每”,
“-”代表从某个数字到某个数字,
“,”分开几个离散的数字

备份脚本:http://blog.csdn.net/xiaoxian8023/article/details/42305417

WordPress安装插件提示“输入FTP账户密码”

由于服务器没有开启FTP,这里可以在 wp-config.php 文件中添加脚本绕过:

define("FS_METHOD","direct");
define("FS_CHMOD_DIR", 0777);
define("FS_CHMOD_FILE", 0777);

由于涉及权限问题,这里安装完成插件后即恢复原状;

WordPress安装插件显示“无法创建目录”

网上方法很多,也是权限的问题:

sudo chmod 777 /var/xxxxxx/wp-content/plugins
sudo chmod 777 /var/xxxxxx/wp-content/upgrade

但实际操作并不行,查阅了好多资料,还是新建了 FTP(vsftpd)来达到目的…

参考:https://www.zivers.com/post/240.html

但使用完后停止服务:

service vsftpd stop

使用 Let’s Encrypt 的 SSL

傻瓜式操作,按步骤来即可:https://github.com/certbot/certbot

由于每次申请的证书有效期只有 90 天,这里可以设置 crontab 来自动续天数;

脚本参考:https://blog.l1n3.net/svr_config/use_letsencrypt_to_active_https

设置 HTTPS 后全站的图片全部挂掉

由于站点设置成了 https,而图片连接还都是 http,全部躺枪;

这里由于我有数据库备份,直接 SQL 来 replace;

UPDATE wp_posts SET post_content = replace(post_content, 'http://www.bodkin.ren','https://www.bodkin.ren');
UPDATE wp_posts SET guid = replace(guid, 'http://www.bodkin.ren','https://www.bodkin.ren');

为了保险,修改了主体目录下 function.php 文件来重定向:

/* 替换图片链接为 https */
function https_image_replacer($content){
	if( is_ssl() ){
		/*已经验证使用 $_SERVER['SERVER_NAME']也可以获取到数据,但是貌似$_SERVER['HTTP_HOST']更好一点*/
		$host_name = $_SERVER['HTTP_HOST'];
		$http_host_name='http://'.$host_name.'/wp-content/uploads';
		$https_host_name='https://'.$host_name.'/wp-content/uploads';
		$content = str_replace($http_host_name, $https_host_name, $content);
	}
	return $content;
}
add_filter('the_content', 'https_image_replacer');

参考:http://www.mobibrw.com/2016/3047

默认打开网站仍然使用 HTTP

.htaccess 中利用 301 重定向到 https:

RewriteCond %{SERVER_PORT} !^443$
RewriteCond %{HTTP_USER_AGENT} !MSIE/[1-8]\. [NC]
RewriteCond %{HTTP_HOST} www.bodkin.ren
RewriteRule ^.*$ https://www.bodkin.ren%{REQUEST_URI} [L,R=301]

这里就可以实现默认打开网站直接跳转到HTTPS访问;

虽然可以在登录和后台也跳转HTTPS,但为了保险,需开启登录和后台的强制 SSL;

在根目录的 wp-config.php 最后添加:

/* 强制后台和登录使用 SSL */
define('FORCE_SSL_LOGIN', true);
define('FORCE_SSL_ADMIN', true);

除此之外,修改“设置”→“常规”里的“站点地址”和“WordPress 地址”也为 HTTPS;

参考:https://www.logcg.com/archives/961.html

模板设置的banner图片仍为HTTP

这导致访问带banner图片的页面时,URL旁边的小绿锁不会出现;

提示内含不安全的链接,图片的http链接…

chrome的锁子会变灰,Firefox的锁子会变黄,坚持访问会在锁子上划一道;

直接禁用模板的图片设置,将选好的banner图片上传到服务器覆盖掉模板自带的图片;

刷新缓存,小绿锁出现了;

遗憾

Memcached 没有装上,Memcached 虽然适配了 PHP7.0,但是没有源,只能基于源码来装;

这里一直链接不出来,咸鱼GG;

参考:https://www.logcg.com/archives/1747.html

后记

将域名解析到 Linux 服务器 IP 上,至此博客就完全从阿里云迁移到了腾讯云;

虽然是同配置的服务器,但可能是系统的因故,或是 PHP7 的机制,现在的速度还是有明显提升的;