WordPress解决百度分享不支持https的方法

最近越来越多的朋友用上了HTTPS,但是不知为何,百度分享迟迟没有支持HTTPS,导致使用了百度分享的网站被浏览器显示警告。

本文就为大家介绍下WordPress解决百度分享不支持HTTPS的方法,同时也介绍下等英博客出品的主题中,对与此事的处理方法。

一、开启HTTPS开关

一般在waitig出品的主题中,都有一个是否开启https的选项,如果你开启了https,则将这个选项打钩。

比如,在wait主题中,是在【高级设置】里:

未分类

二、下载开源代码

waitig 采用的解决方案是github上@hrwhisper提供的,地址是在:https://github.com/hrwhisper/baiduShare 。

在开启了主题配置中的HTTPS开关后,再下载其中的static文件夹,上传到网站根目录,网站即可正常支持HTTPS协议。

配置定时清理优化wordpress数据库

WordPress易操作、易扩展(插件机制),但不如意之处也有,所以我会趁闲暇之余进行优化,我戏称之“Wordpress归真计划”。自动运维系列其实没有太多可写,无非是自动更新升级、自动清理垃圾(文件+数据)、自动提交代码(版本管理)等几个方面。本次分享wp数据库自动清理优化——删除过期无效数据并优化数据表。该想法源于归真计划中的“Kill Plugins”【注1】,要告别的插件是WP Clean Up,先感谢插件作者@BoLiQuan。

  • 指导思想:将插件做的交给系统自动进行,解放人力。
  • 技术核心:SQL+LinuxCrontab

一、数据清理SQL语句

先说三处需要谨慎清理的:

1、草稿数据

发布体【注2】的草稿数据。注意如果你的习惯不是离线写文章,这一条语句请谨慎考虑使用。

$sql.=“DELETE FROM {$table_prefix}posts WHERE post_status = ‘draft’;”;

2、待审评论

这条语句处理的是待审评论数据,如果wordpress设置了评论审核,那么这一条也要谨慎使用,待审评论不一定是垃圾评论。

$sql.=“DELETE FROM {$table_prefix}comments WHERE comment_approved = ‘0’;”;

3、配置表配置项

options表存储着wp和站长的配置数据,请按照自己的情况书写清理语句,清理之前自己做好表备份,通常这种工作处理一次就够了,不必每次都执行。

比如下面的代码是适合我网站的:清除非当前模板主题的配置项;删除无用插件配置项,比如我已经不用了的LoginLockDown(详见:WordPress扫二维码登录后台功能实现案例—WpQrLogin)、BaiduSubmit(已重写自动推送,并融入主题)、WP Backup。

//query current theme name
$themes = $pdo->query(“select option_value from {$table_prefix}options where option_name=’current_theme’ “)->fetch();
//$theme_name = strtolower($themes[0]);
//clear other themes’ options
$sql.=“DELETE FROM {$table_prefix}options WHERE option_name like ‘%theme_mod_%’ AND option_name<>’theme_mod_{$theme_name}’;”;
//unused plugins option
$sql.=“DELETE FROM {$table_prefix}options WHERE option_name like ‘%loginlockdown%’ ;”;
$sql.=“DELETE FROM {$table_prefix}options WHERE option_name like ‘%baidusubmit%’ ;”;
$sql.=“DELETE FROM {$table_prefix}options WHERE option_name like ‘%backwpup%’; “;

—–分割线—–

4、发布体版本

有多少人写文章是多人协作的?你写文章的时候需要对比上一个版本查看自己做了哪些修改?如果都不是,可以使用下面的语句清理发布版本。

$sql.=“DELETE FROM {$table_prefix}posts WHERE post_type = ‘revision’;”;

5、自动草稿

不多解释,请按需使用。我个人习惯离线撰写文章,在线写的时候倾向于自己手动保存,而且我已经移除了wp自动草稿的功能,所以数据库中所有自动草稿数据都是我不需要的。

$sql.=“DELETE FROM {$table_prefix}posts WHERE post_status = ‘auto-draft’;”;

6、回收站

删除的发布体,以后不用自己手动去后台回收站清空了。

$sql.=“DELETE FROM {$table_prefix}comments WHERE comment_approved = ‘trash’;”;

7、无用的发布体元数据(附加数据)

postmeta表中因发布体删除而遗留下来的数据。比如文章的自定义字段,有些人在设计自定义字段面板的时候没有设计delete,就会产生这样的情况。

$sql.=“DELETE pm FROM {$table_prefix}postmeta pm LEFT JOIN {$table_prefix}posts wp ON wp.ID = pm.post_id WHERE wp.ID IS NULL;”;

8、垃圾评论

$sql.=“DELETE FROM {$table_prefix}comments WHERE comment_approved = ‘spam’;”;

9、无用的评论元数据(附加数据)

删除评论遗留的附加数据或者做过评论优化残留的数据况。大多数wp使用者会有Askimet的数据,这些数据记录有助于插件过滤垃圾评论,可去可留。

$sql.=“DELETE FROM {$table_prefix}commentmeta WHERE comment_id NOT IN (SELECT comment_id FROM {$table_prefix}comments);”;
$sql.=“DELETE FROM {$table_prefix}commentmeta WHERE meta_key IN (‘akismet_history’,’akismet_result’,’akismet_user_result’,’akismet_user’);”;

10、无效的关系数据

删除发布体或者分类(待确定)以后残留的数据。

$sql.=“DELETE FROM {$table_prefix}term_relationships WHERE object_id NOT IN (SELECT ID FROM {$table_prefix}posts);”;

11、无用的用户元数据(附加数据)

$sql.=“DELETE FROM {$table_prefix}usermeta WHERE user_id NOT IN (SELECT ID FROM {$table_prefix}users);”;

12、订阅消息

$sql.=“DELETE FROM {$table_prefix}options WHERE option_name LIKE ‘_site_transient_browser_%’ OR option_name LIKE ‘_site_transient_timeout_browser_%’ OR option_name LIKE ‘_transient_feed_%’ OR option_name LIKE ‘_transient_timeout_feed_%’;”;

二、数据表优化SQL

原插件中优化工作很简单,仅使用了OPTIMIZE,但对大多数人而言足够了。它对MyISAM/INNODB引擎的数据表还是很有用的,能够删除冗余数据(包括字段和索引),提高表的查询效率。

$result = $pdo->query(‘SHOW TABLE STATUS FROM `’.DB_NAME.’`’)->fetchAll();
foreach($result as $row){
    $sql.= “OPTIMIZE TABLE {$row[‘Name’]};”;
}

注意:所有语句最终会综合到一起依次执行,所以必须有分隔符,即:每一句SQL语句必须要用分号结尾。

三、自动化的实现

小节标题挺高大上,其实就是个定时计划任务+执行脚本。

1、执行脚本PHP

执行脚本的核心就是文章一二节提到的部分,我们再补充一下数据库操作,略做完善后命名(如gznotes.php);

将文件放到wordpress根目录,然后可以利用php命令直接执行,进行首测(注意:非HTTP访问),命令如下:

[/gznotes.com]# php /YourPath/gznotes.php

/**
* Copyright (c) DingLipeng
* Author       : DingLipeng(Daniel Ting)
* Author URI   : http://www.gznotes.com/
* Created Time : 2017-08-12 16:09
*/
//read db config from wp-config.php
$config_str = file_get_contents(dirname(__FILE__).DIRECTORY_SEPARATOR.’wp-config.php’);
preg_match_all(“!define(s*’DB_.*);|\$table_prefix.*;!”,$config_str,$res);
foreach ( $res[0] as $re ) {
    eval($re);
}
$pdo = null;
try{
    $pdo = new PDO(“mysql:host=”.DB_HOST.“;dbname=”.DB_NAME,DB_USER,DB_PASSWORD);
} catch (PDOException $exception){
    echo “Connect Failed:”.$exception->getMessage();
    exit();
}
$sql = “”;
//============start sql str=====
    //……
//============sql str end=====
$pdo->exec($sql);
//log completed or affected number of rows
exit(“Succn”);

2、定时计划任务Crontab

大多数人用Linux系统的服务器,所以一般都有crontab神器。如果没有请安装(我的是 CentOS 6.8):

[/gznotes.com]# yum –y install vixie-cron

安装完成,记得加入开机启动项

[/gznotes.com]# chkconfig –level 345 crond on

关于crontab使用,引用@蚂蚁快跑 【参考链接1】博文中的几张图片:

未分类

未分类

未分类

未分类

未分类

未分类

WordPress自动运维教程—如何自动清理优化数据库-crontab1

图:Linux Crontab定时计划任务讲解

老规矩,运维放到夜深人静,访客稀少的时候进行,频率方面不用太高,一个周一次就可以,任务形式可以有多种表现,比如可以在/etc/crontab直接书写:

#每周日的凌晨3点

0 3  *  * 0 root /usr/bin/php  /YourPath/gznotes.php >>/YourPath/clean.log

#每隔七天凌晨3点

0 3 */7 * * root /usr/bin/php  /YourPath/gznotes.php >>/YourPath/clean.log

也可以在/etc/cron.weekly中添加执行脚本clean.sh,并赋予执行权限chmod +x  /etc/cron.weekly/wp-cleaner.sh,文件命令如下:

#!/bin/sh

php /YourPath/gznotes.php>>/YourPath/clean.log

#把命令执行的结果追加输出到指定目录下的clean.log文件中

注意:写完后手动执行看下有没有错误,如果像上面命令那样指定了结果输出,那么打开clean.log文件查看执行的结果。

然后,启动crond,查看状态,查看当前用户所有任务列表:

[/gznotes.com]# service crond start

[/gznotes.com]# service crond status

[/gznotes.com]# crontab -l

CentOS 7.2安装LAMP(apache mariadb php)搭建WordPress

导语

WordPress是一个以PHP和MySQL为平台的自由开源的博客软件和内容管理系统。WordPress具有插件架构和模板系统。Alexa排行前100万的网站中有超过16.7%的网站使用WordPress。

一.LAMP环境搭建

LAMP即Linux+Apache+MySQL(MariaDB)+PHP,由于其开源免费,所以是目前非常受欢迎的一组网站解决方案,本文也将采用此方案。

1. Linux选择

笔者选用的是CentOS 7.2这个版本,CentOS实质为无支持版的RHEl,稳定性还是比较高的,当然也可以选择其它发行版,只是后续的操作略有不同,本文将只介绍在CentOS下的操作(系统的安装和本文关系不大,故不再赘述)。

2. 安装Apache

直接yum安装

# yum -y install httpd

安装完成后,启动服务

# systemctl start httpd.service

设置为开机启动

# systemctl enable httpd.service

之后可以在浏览器输入localhost进行测试,由于笔者没有安装GUI,只能在客户端浏览器进行测试,在这之前需要打开80和443端口

首先开启防火墙并设置为开机启动

# systemctl start firewalld.service
# systemctl enable firewalld.service

开启端口(80和443)

# firewall-cmd --permanent --zone=public --add-service=http
# firewall-cmd --permanent --zone=public --add-service=https

重启防火墙

# firewall-cmd --reload

查询已开启端口

# irewall-cmd --list-ports

未分类

客户端测试
未分类

3. 安装并配置数据库(Mariadb)

由于甲骨文公司收购了MySQL后,有将MySQL闭源的潜在风险,所以在CentOS 7中弃用了MySQL,改为支持Mariadb(MySQL的一个分支,与之完全兼容),所以本文也将使用该数据库。

同样还是利用yum命令进行安装,并且配置开机启动

# yum -y install mariadb-server mariadb
# systemctl start mariadb.service
# systemctl enable mariadb.service

配置root密码

# mysql_secure_installation

配置过程中会有几个选项,大家根据自己的需要进行配置就好了

未分类

使用root用户登录mysql

# mysql -u root -p

为WordPress创建数据库

# CREATE DATABASE wordpress;

查看创建结果

未分类

为该数据库创建用户

# CREATE USER username@localhost IDENTIFIED BY 'password';

说明:username – 你将创建的用户名, host – 指定该用户在哪个主机上可以登陆,如果是本地用户可用localhost, 如果想让该用户可以从任意远程主机登陆,可以使用通配符%. password – 该用户的登陆密码,密码可以为空,如果为空则该用户可以不需要密码登陆服务器.

更改用户权限,保存并退出

# GRANT ALL PRIVILEGES ON wordpress.* TO wordpressuser@localhost;
# FLUSH PRIVILEGES;
# exit

重启服务

# systemctl restart mariadb.service

4. 安装PHP及相关组件

首先安装PHP

# yum -y install php

安装相关组件

# yum -y install php-mysql php-gd php-ldap php-odbc php-pear php-xml php-xmlrpc php-mbstring php-snmp php-soap curl curl-devel

安装完成之后我们可以新建一个php页面进行测试

# vim /var/www/html/info.php

编辑为以下内容

未分类

重启httpd服务

# systemctl restart httpd.service

打开网址 http://x.x.x.x/info.php 进行查看(x.x.x.x为vps的ip地址)

未分类
php测试页

二. WordPress安装与配置

安装wget(下载) unzip(解压) net-tools(网络管理)

# yum -y install wget unzip net-tools

下载WordPress

# wget http://wordpress.org/latest.zip

未分类

解压文件,并将其复制到/var/www/html/目录下

# unzip -q latest.zip
# cp -rf wordpress/* /var/www/html/

未分类

编辑配置文件

# cd /var/www/html
# cp wp-config-sample.php wp-config.php
# vim wp-config.php

将其修改为以下格式(其中wordpress为数据库名称,wordpressuser为数据库用户名,10293847为数据库密码)

未分类

保存后退出,重启相关服务

# systemctl restart httpd.service
# systemctl restart mariadb.service

三. WordPress的个人设置

完成以上配置之后,便可以输入http://yourserverip/来访问你的博客了。

  • 选择语言

未分类

  • 填写个人信息

未分类

  • 安装完成

未分类

  • 登录到仪表盘

未分类

至此WordPress已经搭建完成,之后可根据自己的需要进行其它配置。

Wireshark实战分析之TCP协议 挥手数据帧

1、捕获TCP四次挥手数据包

未分类

2、接下来分析四次挥手的过程

第一次挥手(分析524帧,通过FIN/ACK标志确定这个客户端提出挥手的第一次)

未分类

通过第一次挥手客户端发送FIN和ACK标志,表示本次通信已经结束,请求结束连接

3、分析第二次挥手,也就是525帧

未分类

4、分析第三次挥手,也就是526帧

未分类

5、第四次挥手分析,也就是527帧

未分类

到这里TCP四次挥手分析完毕,大家可以实际操作为主,同时结合下图分析

未分类

Wireshark实战分析之TCP协议 握手数据帧

1、TCP首部格式

未分类

  • 源端口: 用来传输数据报的端口

  • 目标端口: 数据包将要发送到的端口

  • 序号: 用来表示一个TCP片段。这个值用来表示数据流中的部分数据没有丢失

  • 确认号: 表示通信中希望从另一个设备得到的下一个数据包的序号

  • 数据偏移: 表示此块数据在整块数据中的偏移

  • 保留: 包括Reserved, Nonce, CWR和ECN-Echo,共6个比特位

  • 标记:用来表示所传输的TCP数据包类型。该字段中可用的标记包括URG, ACK, PSH, RST, SYN, FIN

  • 窗口: TCP接受者缓冲区的大小

  • 检验和: 用来保证TCP首部和数据部分的完整性

  • 紧急指针: 如果设置了URG位,这个值将被检查作为额外的指令

  • 选项: 各种可选的域,可以在TCP数据包中进行指定

上面提到了TCP传输时,可用的标记有URG, ACK, PSH, RST, SYN, FIN。 下面分别介绍这几个标记

  • URG: 紧急标志。此标志表示TCP包的紧急指针域有效,用来保证TCP连接补被中断。

  • ACK: 确认标志。此标志表示应答域有效。1表示应答域有效,0表示无效

  • PSH: 此标志表示Push操作,所谓Push操作就是指在数据包到达接收端以后,立刻传送到应用程序,而不在缓冲区排队。

  • RST: 该标志表示连接复位请求。

  • SYN: 表示同步序号,用来建立连接。SYN标志位和ACK标志位搭配使用。当连接请求时SYN=1, ACK=0。 当连接被响应的时候,SYN=1, ACK=1.

  • FIN: 表示发送端已经达到数据的末尾,也就是说双方的数据传输完成,没有数据可以传输了。此时发送FIN标志位的TCP数据包后,连接将被断开。

2、捕获TCP数据包

未分类

上图是捕获的TCP数据包。接下来对三次握手和四次挥手做详细说明

3、第一次握手(分析461帧)

未分类

从以上的分析可以看出,客户端向服务器发送请求建立连接,当前的序列号为0。

4、第二次握手(分析462帧)

未分类

从第二次的分析可以看到,服务器收到客户端的请求建立连接后,发送给客户端确定包(ACK=1)已经请求建立(SYN=1),当前的序列号为0,并且希望下一次的系列号为1.

5、第三次握手(分析463帧)

未分类

当第三次握手成功后,客户端和服务端就可以建立连接了,就可以传输数据了。

可能这部分有点不好懂,我建议大家实际操作分析,并结合下图分析

未分类

Wireshark实战分析之TCP协议 三次握手

1、TCP是怎么样的协议?

TCP(Transmission Control Protocol)传输控制协议,是一种面向连接的,可靠的,基于IP的传输层协议。它的主要目地是为数据提供可靠的端到端的传输。

2、TCP协议的由来?

上一节学习了UDP协议,可以知道UDP协议非常简单,而且容易实现。但是其可靠性较差,一旦将数据包发出,将无法知道对方是否收到。为了解决这个问题,TCP协议就诞生了。使用TCP协议,可以提供网络的安全性。因为使用TCP协议传输数据时,每发出一个数据包都要求确认。如果其中有一个数据包丢失,就收不到确定包,发送方就知道应该重发这个数据包。这样TCP协议就保证了数据的安全性。

3、TCP三次握手

未分类

上图就是TCP协议三次握手建议的连接。 其中Seq表示请求序列号,Ack表示确认序列号,SYN和ACK为控制位

  • 第一次握手

未分类

第一次握手建立连接时,客户端向服务器发送SYN报文(Seq=x, SYN=1),客户端进去SYN_SENT状态, 等待服务器确定。

  • 第2次握手

首先,服务器收到客户端的请求,向客户端回复一个确认信息(Ack = x + 1)

其次,服务器再次向客户端发送一个SYN包(seq=y)建立连接请求,此时服务器进去SYN_RECV状态

  • 第3次握手

未分类

第三次握手客户端收到服务器的回复(SYN+ACK报文)。此时,客户端向服务器端发送ACK,此包发送完毕后客户端和服务器端进入ESTABLISHED状态。完成三次握手

4、TCP四次断开

在TCP通信中,当每次通信完毕后都会终止连接。该过程包含4个数据包,并且用一个FIN标志来表明连接的终结。

未分类

TCP断开需要四个步骤:

  • 客户端通过发送一个设置了FIN和ACK标志的TCP数据包,告诉服务器通信已经完成

  • 服务器收到客户端的数据后,发送一个ACK数据包来响应客户端

  • 服务器再次向客户端传输一个自己的FIN/ACK数据包

  • 客户端手动啊服务器的FIN/ACK包后,响应服务器一个ACK数据包。然后结束通信。

5、有人机会问, 为什么建立连接只需3步,而断开需要4步?

答: 因为在客户端与服务器建立连接时,当收到客户端发送 的SYN数据后,是把ACK/SYN放在一起发送给客户端的。 但是当断开连接时,当收到客户端发送的FIN数据后,只能说明数据发送完毕,客户端不再发送数据,但是服务还是连接的。只能说明客户端没有数据发送给服务端了,但不代表服务端没有数据要发送给客户端了。当服务器所有的数据都发送完毕后,才会发送FIN/ACK数据,请求断开连接。

Wireshark实战分析之UDP协议

1、什么是UDP协议?

UDP(User Datagram Protocol )用户数据报协议。是OSI七层模型中一种无连接的传输层协议,提供面向事物的简单的不可靠信息传输服务。UDP协议就是一种无连接的网络协议,该协议用来支持那些需要在计算机之间传输数据的网络应用,包括网络视频会议系统在内的众多客户/服务器模式的网络应用。

2、UDP的特点?

  • UDP是一个无连接的协议,也就是传输数据之前源端口与目地端口不建立连接。
  • UDP由于传输补建立连接,因此也就不需要维护连接状态。
  • UDP信息包的标题很短,只有8个字节。
  • UDP使用最大努力交付,即补保证可靠交付。
  • UDP广泛应用在多媒体应用中,如QQ视频,网络电话等。

3、 UDP的首部格式

未分类

可以看到UDP数据报首部部分共有8个字节

  • 源端口: 用来传输数据包的端口
  • 目标端口: 数据包将要被传输到的端口
  • UDP长度: 数据包字节长度
  • 检验和: 用来确保UDP首部和数据部分的完整性
  • 数据: 被UDP封装进去的数据,包含应用层协议的头部和用户发送的数据

4、抓取UDP的数据包

配置好Wireshark登录QQ,就可以获取到UDP协议的数据包

未分类

其中OICQ就是腾讯QQ的协议,此协议是基于UDP协议的。

5、分析UDP协议

随便选中上述包中的一个即可

未分类

virtualbox的Linux虚拟磁盘大小调整及注意事项

安利

由于windows上面使用npm的体验很不好(目录嵌套导致的长目录错误), 所以不得不用linux系统.

然而无论是Debian还是Red Hat的包管理器, 都不能及时的提供最新的软件版本, 如果去官网编译安装的话, 总会由于网络问题中断, 一度很苦恼.

直到有一天, 一位dalao(@anciety)向我推荐了基于Arch Linux的Manjaro, 我才找到了一个真正满意的一款系统(各种意义上)

起因

最近由于安装了很多东西(主要是openvas的nvts feed), 把当初分配的8G空间占满了, 所以需要对虚拟磁盘进行扩充.

本应该是很简单的操作, 但是由于我之前创建过快照, 所以有一个坑, 导致修改后在Gparted中不显示新增的空间, 下面会提到.

正文

1、首先确认你当时创建的是动态分配空间的磁盘, 可以在虚拟机的”设置->存储”中选择控制器下的磁盘文件查看.

2、找到并复制该磁盘文件的路径,如:”F:GuestOSmanjaromanjaro.vdi”

3、找到你VirtualBox的安装目录, 里面有一个”VBoxManage.exe”程序

4、我假设你至少是Win7的系统了, 此时可以在VBox的目录空白处按住Shift单击鼠标右键, 选择”在此处打开命令窗口”.(如果你真的是xp, 请手动运行cmd然后cd到该目录吧..)

5、将命令 “VBoxManage modifyhd <vdi文件路径> –resize <文件大小(MB)>”, 替换为你的, 比如这里我要把磁盘空间提升到20G, 就输入:

VBoxManage modifyhd “F:GuestOSmanjaromanjaro.vdi” –resize 20480

要注意大小的单位只能是mb, 自己要先算好, 不需要单位只写数字.

PS: 如果你不是vdi格式的文件, 可以使用命令转换:

VBoxManage clonehd 源硬盘格式文件 目录硬盘格式文件 –format 目标格式后缀

6、回车执行命令, 很快进度就会到100%, 然后就完成了磁盘的扩容了, 不过这里有一个坑, 如果你建立过快照的话, 当前系统状态是基于你最后那个快照的, 所以你还需要对那个快照进行同样的扩容操作 ,如:

VBoxManage modifyhd “F:GuestOSmanjarosnapshots{xxxxxxxx-xxxx-xxxx-xxxx-xxxx}.vdi” –resize 20480

把里面的xxx换成你对应的文件名即可.

这可真是个大坑, 我当时在百度搜的五六篇文章都没有提到有快照时的情况, 导致我的vbox虽然提示我虚拟空间已经是20G了, 但在系统中查看未使用空间时总是显示一共就8G…然后又去百度vbox扩容后问题, 说的全是怎么用gparted分配空间, 最终在Google上搜vbox resize problem, 找到了一大堆官网的提问, 进去一看好多都是跟我一样的问题, 于是乎…问题解决.

附上参考:

https://www.virtualbox.org/ticket/9103

https://forums.virtualbox.org/viewtopic.php?f=35&t=50661

扩充完毕后, 就可以进行空间分配了, 即将新增的未使用空间添加到你要扩容的分区, 用gparted是一个不错的选择, 图形化, 方便快捷.

7、为虚拟机挂载一个有gparted的live光盘, 我直接用的ubuntu盘, 挂载之后选择live, 然后启动系统, 安装引导程序界面加载完后, 选择”Try Ubuntu”, 即可进入到Ubuntu live

8、打开终端, 运行

sudo gparted

9、选择你要扩容的分区, 我这里是 “/dev/sda1”, 右键 “Resize/Move”, 然后把上面的空间大小选择区域右侧拉到头, 点击 “Resize/Move”, 就可以了, 应该会有个提示提醒你如果操作不当可能会导致引导失败什么的, 点OK, 然后应用设置, 就可以了.

重启之后, 分区大小已扩增。

Virtualbox的centos7 nat和桥接网络配置

在实际配置虚拟机的过程中,网络配置时候一个很繁琐的过程,经常一个点没注意到,就访问不了了。在此,做一个简单的教程以供后续使用时可以参考!

方法一: 使用NAT网络

1. 选择网卡

安装centos7的时候注意选择两个网卡(配置CentOS7虚拟机里面能上外网,而主机与CentOS7虚拟机也能连通)

两个网卡分别为:

  • nat(虚拟机访问互联网,使用10.0.2.x段)
  • host-only(虚拟机和主机互相通信,使用192.168.56.x段)

在偏好设置里面设置网络。如下图配置:

未分类

未分类

2. 虚拟机网络设置

接下来对CentOS7虚拟机网络设置,添加网卡1和网卡2,分别选择连接方式和对应的网卡:

未分类

未分类

注意需要记下两个网卡的mac地址,后面需要在网络配置中使用到(如果第一步安装centos7的时候网络没有选择两个的话)

3. 配置网卡

开机,进入 /etc/etc/sysconfig/network-scripts/目录,可以看到目前只有ifcfg-enp0s3和ifcfg-enp0s8配置文件(如果安装centos7没有选择两个网卡的话,应该只有ifcfg-enp0s3 一个配置文件,如果只有一个配置文件,则另外一个就用这个copy过来改,需要更改UUID的值),如下图:

未分类

3.1 编辑ifcfg-enp0s3文件

vim ifcfg-enp0s3

未分类

注意看,是否已经将ONBOOT=no改为yes(最开始默认为NO,yes意思是,“BOOT开机”时候就能使用这张网卡),再添加BOOTPROTO为dhcp(只有“静态static”和“动态dhcp”两种方式),保存,退出,重启网络。
此时,已经可以ping通baidu的话,就说明虚拟机可以访问外网了

3.2 编辑ifcfg-enp0s8文件

vim ifcfg-enp0s8

未分类

注意:上面的NETMAST拼写错误,应该为NETMASK
注意此时宿主机要能ping通虚拟机的话,需要再配置一下

vi /etc/sysconfig/network
NETWORKING=yes
GATEWAY=192.168.56.1 (经后面测试,这个不能加入)

未分类

4. 执行重启网络命令

service network restart

此时应该就可以访问外网,并且可以与宿主机通信了

未分类

宿主机也能ping通虚拟机

未分类

方法二: 使用桥接网络

使用桥接网络也能够连通主机与虚拟机之间的网络,并且能够访问互联网

1. 设置桥接模式,virtualbox中设置

未分类

2. 配置centos的网卡地址

未分类

3. 测试

主机能ping通虚拟机:

未分类

虚拟机也能ping通主机:

未分类

启动两个tomcat实例的方法

启动两个tomcat报错

为了开发方便,可能会前台和后台各跑一个Tomcat,但是会发现程序启动一般,然后报如下错(logs下日志可查看):

15-Mar-2017 11:13:40.889 严重 [main] org.apache.catalina.core.StandardService.initInternal Failed to initialize connector [Connector[AJP/1.3-8009]]
 org.apache.catalina.LifecycleException: Failed to initialize component [Connector[AJP/1.3-8009]]
    at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:112)
    at org.apache.catalina.core.StandardService.initInternal(StandardService.java:549)
    at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:107)
    at org.apache.catalina.core.StandardServer.initInternal(StandardServer.java:875)
    at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:107)
    at org.apache.catalina.startup.Catalina.load(Catalina.java:606)
    at org.apache.catalina.startup.Catalina.load(Catalina.java:629)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:601)
    at org.apache.catalina.startup.Bootstrap.load(Bootstrap.java:311)
    at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:494)
Caused by: org.apache.catalina.LifecycleException: Protocol handler initialization failed
    at org.apache.catalina.connector.Connector.initInternal(Connector.java:970)
    at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:107)
    ... 12 more
Caused by: java.net.BindException: Address already in use: bind
    at sun.nio.ch.Net.bind0(Native Method)
    at sun.nio.ch.Net.bind(Net.java:344)
    at sun.nio.ch.Net.bind(Net.java:336)
    at sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:199)
    at sun.nio.ch.ServerSocketAdaptor.bind(ServerSocketAdaptor.java:74)
    at org.apache.tomcat.util.net.NioEndpoint.bind(NioEndpoint.java:210)
    at org.apache.tomcat.util.net.AbstractEndpoint.init(AbstractEndpoint.java:972)
    at org.apache.tomcat.util.net.AbstractJsseEndpoint.init(AbstractJsseEndpoint.java:244)
    at org.apache.coyote.AbstractProtocol.init(AbstractProtocol.java:558)
    at org.apache.catalina.connector.Connector.initInternal(Connector.java:968)
    ... 13 more

和如下错:

15-Mar-2017 11:13:41.965 严重 [main] org.apache.catalina.core.StandardServer.await StandardServer.await: create[localhost:8005]: 
 java.net.BindException: Address already in use: JVM_Bind
    at java.net.DualStackPlainSocketImpl.bind0(Native Method)
    at java.net.DualStackPlainSocketImpl.socketBind(DualStackPlainSocketImpl.java:96)
    at java.net.AbstractPlainSocketImpl.bind(AbstractPlainSocketImpl.java:374)
    at java.net.PlainSocketImpl.bind(PlainSocketImpl.java:175)
    at java.net.ServerSock
    et.bind(ServerSocket.java:376)
    at java.net.ServerSocket.<init>(ServerSocket.java:237)
    at org.apache.catalina.core.StandardServer.await(StandardServer.java:440)
    at org.apache.catalina.startup.Catalina.await(Catalina.java:743)
    at org.apache.catalina.startup.Catalina.start(Catalina.java:689)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:601)
    at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:355)
    at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:495)

解决办法

出现这种问题,想到的解决办法当然是到conf文件夹下找到server.xml更改端口号,只是这次更改,不仅要修改(本人默认端口号已改为8081):

<Connector port="8081" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />

并且修改如下两个端口,一个在以上端口的上方,一个在下方(其中的端口号都是自己改过的)

<Server port="8055" shutdown="SHUTDOWN">
  <Listener className="org.apache.catalina.startup.VersionLoggerListener" />
  <!-- Security listener. Documentation at /docs/config/listeners.html
  <Listener className="org.apache.catalina.security.SecurityListener" />
<Connector port="8099" protocol="AJP/1.3" redirectPort="8443" />

意思该文档里的三个端口号都更改。