@media, @media screen 和 @media only screen的 区别

@media 和 @media screen的区别很简单, 因为media type 有很多种,screen只是其中的一种,其他常见的种类还有print 和 speech

@media 表示适应于所有的media type, @media screen表示只适用于media type 为screen 的硬件,在web开发中,可以认为这两个是一样的.

而@media only这个关键子就比较有意思了。

W3C文档这样描述的:The keyword ‘only’ can also be used to hide style sheets from older user agents. User agents must process media queries starting with ‘only’ as if the ‘only’ keyword was not present.

翻译过来就是:only是为了在不支持媒体查询的浏览器中隐藏样式表,浏览器处理以only开头的关键词时将会忽略only。

@media only screen and (min-width:xxx) and (max-width:xxx) 与 @media screen and (min-width:xxx) and (max-width:xxx) 在支持媒体查询的浏览器中其实是一模一样的,没有任何区别,因为only将被忽略。但是在不支持媒体查询的浏览器中由于没有only这个媒体类型,因此会直接忽略这条媒体查询。在不支持媒体查询的浏览器中,如果不加only,@media screen and (min-width:xxx) and (max-width:xxx)将会被解析为@media screen,明显与期望不一致。因此通过加一个浏览器不认识的媒体类型only则浏览器将会直接忽略这条媒体查询。

media="only screen and (min-width: 401px) and (max-width: 600px)"
/* 在支持媒体查询的浏览器中等于*/
media="screen and (min-width: 401px) and (max-width: 600px)"

/*在不支持媒体查询的浏览器中解析到带only的媒体查询时,会将only视为媒体类型。(由于没有only这种媒体类型,因此将不会被应用)*/
media="only"

/*如果不带only,在不支持媒体查询的浏览器中*/
media="screen and (min-width: 401px) and (max-width: 600px)"
/*将被解析为screen,将会被应用到屏幕类型设备上*/
media="screen"

 

搬瓦工DC6机器的benchmark

刚买了一个DC6的机器准备放中文网站,首先来benchmark一下.

采用的程序是: 

wget -qO- bench.sh | bash

下面是结果:

----------------------------------------------------------------------
CPU model : QEMU Virtual CPU version (cpu64-rhel6)
Number of cores : 2
CPU frequency : 2699.998 MHz
Total size of Disk : 20.4 GB (3.0 GB Used)
Total amount of Mem : 1006 MB (84 MB Used)
Total amount of Swap : 1283 MB (0 MB Used)
System uptime : 0 days, 0 hour 1 min
Load average : 0.00, 0.00, 0.00
OS : CentOS 7.7.1908
Arch : x86_64 (64 Bit)
Kernel : 3.10.0-1062.12.1.el7.x86_64
----------------------------------------------------------------------
I/O speed(1st run) : 332 MB/s
I/O speed(2nd run) : 737 MB/s
I/O speed(3rd run) : 682 MB/s
Average I/O speed : 583.7 MB/s
----------------------------------------------------------------------
Node Name IPv4 address Download Speed
CacheFly 205.234.175.175 108MB/s
Linode, Tokyo2, JP 139.162.65.37 20.7MB/s
Linode, Singapore, SG 139.162.23.4 12.5MB/s
Linode, London, UK 176.58.107.39 16.6MB/s
Linode, Frankfurt, DE 139.162.130.8 14.7MB/s
Linode, Fremont, CA 50.116.14.9 139MB/s
Softlayer, Dallas, TX 173.192.68.18 39.4MB/s
Softlayer, Seattle, WA 67.228.112.250 51.0MB/s
Softlayer, Frankfurt, DE 159.122.69.4 6.50MB/s
Softlayer, Singapore, SG 119.81.28.170 9.70MB/s
Softlayer, HongKong, CN 119.81.130.170 11.0MB/s
----------------------------------------------------------------------

可以说整体网络上还是非常好的

OVH ASRACK主板的坑

OVH的服务器的bios设置默认都是UEFI,ok这个没有问题,我也就是顺势给我的着他服务器在UEFI下安装ESXi.

但是发现选择用UEFI CDROM启动后,无法进入安装界面,最后还是跳回选择启动选项的页面. 这个情况倒是第一次见,因为ESXi从6.5开始就支持UEFI了

发ticket给OVH support,8个小时候得到了回复,说是这款主板的可能不支持UEFI安装的ESXi

说实话我以前都是在legacy bios下安装ESXi的,这下子正好随我意了

在BIOS里面选择只使用legacy bios,然后选择CDROM启动,熟悉的ESXi安装界面就又回来了

所以说这是ASRACK的一个坑啊, 折腾我整整一晚上才安装好ESXi

 

CentOS上端口转发方案之HAProxy

端口转发的实际使用场景很多,比如说load balance,比如说流量中转

所谓的端口转发,是发生在网络协议的第四层,TCP/UDP层,也就是IP层面

所以一般来说有这么几个解决方案:

iptables: 系统原生底层的解决方案,配置比较麻烦。但是如果使用CSF来配置iptables,这是非常简单的

HAproxy: 性能比iptables高,配置简单,但是只支持TCP,不支持UDP. 但是如果不玩游戏的话,TCP的端口转发就足够了。

因此这篇文章主要讲述如何使用HAProxy来做流量中转.

底层操作系统是CentOS 7,系统的repo自带haproxy,版本比较老(1.5.18)但是足够用了

安装haproxy:

yum install haproxy

systemctl enable hapoxy

配置haproxy:

cd /etc/haproxy
mv haproxy.cfg haproxy.cfg.bak
vi haproxy.cfg

然后输入下面的配置:

global
ulimit-n 51200
log /dev/log local0
log /dev/log local1 notice
chroot /var/lib/haproxy
pidfile /var/run/haproxy.pid
user haproxy
group haproxy
daemon

defaults
log global
mode tcp
option dontlognull
timeout connect 5000
timeout client 50000
timeout server 50000
maxconn 20480

frontend v2
bind *:443
default_backend v2

backend v2
server v1 A.A.A.A maxconn 20480

frontend rdp
bind *:3389
default_backend rdp

backend rdp
server r1 B.B.B.B maxconn 20480

上图表示把把这台服务器的443端口的流量转到A.A.A.A的443端口上,把这台服务器的3389端口流量转到B.B.B.B的443端口上

配置好以后,下面只需要开启haproxy服务就好了

systemctl start haproxy

OVH文档常用链接

Failover IP另外一种配置方法:

https://docs.ovh.com/ie/en/public-cloud/configure_a_failover_ip_with_centos/

用IPMI安装OS:

https://support.us.ovhcloud.com/hc/en-us/articles/360000108630-How-to-Install-an-OS-with-IPMI

从BIOS里面设置硬RAID

https://support.us.ovhcloud.com/hc/en-us/articles/360004809700-How-to-Configure-RAID-from-the-BIOS

ESXi6.5安装创建VM

https://support.us.ovhcloud.com/hc/en-us/articles/360003263859-How-to-Create-a-VM-in-VMware-ESXi-6-5

使用救援模式

https://support.us.ovhcloud.com/hc/en-us/articles/115001754490-How-to-Use-Rescue-Mode

从网络模式启动:

https://support.us.ovhcloud.com/hc/en-us/articles/360002065130-How-to-Boot-a-Server-in-Network-Mode

独立服务器连接到vRack

https://support.us.ovhcloud.com/hc/en-us/articles/360001410984-How-to-Connect-a-Dedicated-Server-to-vRack

虚拟化的VM连接到网络

https://support.us.ovhcloud.com/hc/en-us/articles/360002175944-How-to-Connect-a-VM-to-the-Internet-Using-VMware-ESXi-6-5

OVH的服务器自带软Raid的问题

OVH的服务器比较有意思,给的配置都会考虑冗余,因此每种硬盘都会给两个,默认给你组成软raid

刚开始我也在犹豫,能不能不要软raid? 因为虚拟化软件esxi不支持软raid, proxmox 的默认zfs 比软raid 要成熟很多

现在答案出来了,这是可以的. 如果你使用OVH的系统来安装OS但是又不想组软raid,那么在选择使用的硬盘的时候选择1,这样就不会组软raid了

另外如果你是使用IPMI来安装OS的话,那么就更简单了,正常安装OS就可以了

OVH的小鸡benchmark

以前没有用过NVME,这次的OVH的服务器的SSD是NVME的,赶紧装个VM测试下IO

测试所使用的程序:

wget -qO- bench.sh | bash

下面是结果:

----------------------------------------------------------------------
CPU model : Intel(R) Xeon(R) E-2236 CPU @ 3.40GHz
Number of cores : 8
CPU frequency : 3407.998 MHz
Total size of Disk : 22.3 GB (1.8 GB Used)
Total amount of Mem : 7987 MB (183 MB Used)
Total amount of Swap : 7628 MB (0 MB Used)
System uptime : 0 days, 3 hour 40 min
Load average : 0.00, 0.00, 0.00
OS : Debian GNU/Linux 9
Arch : x86_64 (64 Bit)
Kernel : 4.9.0-12-amd64
----------------------------------------------------------------------
I/O speed(1st run) : 1.3 GB/s
I/O speed(2nd run) : 1.3 GB/s
I/O speed(3rd run) : 1.3 GB/s
Average I/O speed : 1331.2 MB/s
----------------------------------------------------------------------
Node Name IPv4 address Download Speed
CacheFly 205.234.175.175 114MB/s
Linode, Tokyo2, JP 139.162.65.37 9.46MB/s

可以看到,IO读写能够到1.3GB/s…比sata ssd 要快1倍,这是很爽的

OVH安装ESXi或者Proxmox后,使用Failover IP来创建VM

OVH的failover 使用在虚拟化的VM中比较多,比如说ESXi的VM或者Proxmox的VM

按照OVH的官方文档,在VM上配置failover IP时,可以使用如下的信息:

IP: 你想要使用的failover IP

netmask: 255.255.255.0

Gateway: 你的服务器的主IP的前三位,第四位是254

举个例子,如果你的服务器的主IP是91.34.67.123, 那么gateway 的IP就是91.34.67.254

这个写法是OVH官方推荐的,没有任何问题, 但是前提是VM已经创建好了可以这么配置. 

但是在实际使用的时候,就会出现了大问题. 这个问题主要是指,在安装centos或者debian, ubuntu的时候,我们一般都是用netinstall 的ISO来进行最小化安装.在安装的过程中,都是需要配置IP来访问网络下载组件的.

Linux系统,默认的情况下是不允许IP和gateway的IP不在一个网段的,这个规则的大部分情况下没有任何问题. 但是在OVH或者scaleway上,就会有问题. 因为你的OVH的服务器的主IP和你分配得到的failover 的IP往往不是一个网段的. 如果下下面的情况很常见:

比如说OVH服务器的主IP是54.23.66.78, 分配的failover IP是91.56.33.78。按照上面的例子,我们应该这样配置VM的IP:

IP: 91.56.33.78

netmask: 255.255.255.0

gateway IP: 54.23.66.254

但是在用netinstall ISO 进行系统安装的时候,系统会告诉你无法访问网络,因为IP 和gateway IP不在一个网段. 那么有没有解决办法呢?很简单,我们可以设置netmask为255.255.255.255, gateway的IP就是failover IP本身,这样也是可以访问网络的. 按照上面的例子,我们需要这样配置:

IP:91.56.33.78

netmask: 255.255.255.255

gateway ip: 91.56.33.78

这种办法是可以访问网络,但是请不要长期使用,因为OVH会封掉这种流量。因此建议在系统完成后,编辑IP配置,还是按照OVH的官方文档来.

 

OVH服务器的坑解析

无意中找到了一个OVH的老帐号,购买了一台服务器,订单很快就通过了.

OVH的服务器,其实价格并不便宜,而且还有不菲的初装费. 但是IP的价格便宜,每个IP只收3美金的初装费,每个月就不需要再另外付费了. 一台服务器最多可以添加255个IP.

OVH的网站上写着服务器都支持IPMI,我以为最起码都是supermicro的服务器呢。。后来才发现我想多了。。。

OVH的IPMI文档:

https://support.us.ovhcloud.com/hc/en-us/articles/360000108630-How-to-Install-an-OS-with-IPMI

其实这个文档里面已经透露出来OVH使用的是什么服务器了.

我买的是advance-2型号的服务器,打开IPMI我就傻眼了,并不是熟悉的Supermicro IPMI界面。。。而是ASRACK的主板

OVH的服务器主要使用两种主板,一个ASRACK的廉价主板,一个是supermicro的主板

购买之前一定要问好了是哪种服务器,supermicro要比asrock的好很多

但是实际使用过程中,我发现asrack 的IPMI要比supermicro 的稳定很多

OVH 使用的NVME SSD 都是WD的CL SN720,非常不错,算是企业级的SSD了