CSS 框架 Bulma 简易教程
一、简介 Bulma 框架最大的特点,就是简单好用。所有样式都基于class,只需为 HTML 元素指定class,样式立刻生效。 <a class="button is-primary is-large">Login</...
一、简介 Bulma 框架最大的特点,就是简单好用。所有样式都基于class,只需为 HTML 元素指定class,样式立刻生效。 <a class="button is-primary is-large">Login</...
目前正在学习前端知识,奈何文化水平有限,很多单词还得好好背,最近我把CSS中的常用代码进行了归纳总结,方便自己以后查看,同时也分享给大家,希望对你们有用。 CSS书写顺序 位置属性(position, top, right, z-index...
pdns-server
,然后再安装 pdns-backend-$backend
。Backend 是你可以自己选的,常用的有 BIND
和 Generic MySQL
,需要 GEODNS 可以用 GEOIP
,所有列表见此。如果想做网页版控制后台,使用 MySQL 的可能比较方便。如果只是通过文件形式控制,那么 BIND 和 GEOIP 都可以。 我使用 GEOIP 版本的,GEOIP 版本可拓展性强,使用 YAML 文件,更灵活、优雅,本文就讲讲 GEOIP 版本: 在 Ubuntu 上安装(系统软件源里就有):
$ sudo apt install pdns-server
$ sudo apt install pdns-backend-geoip
然后修改配置文件:
$ rm /etc/powerdns/pdns.d/* # 删除 Example
重要更新⚠️:2018 年 4 月 1 日起已经无法通过软件自动下载到 DAT 格式的 GeoIP 数据库,请前往官网手动下载对应数据库。需要的是 Binary 格式的。创建文件
/etc/GeoIP.conf
内容是:
# The following UserId and LicenseKey are required placeholders:
UserId 999999
LicenseKey 000000000000
# Include one or more of the following ProductIds:
# * GeoLite2-City - GeoLite 2 City
# * GeoLite2-Country - GeoLite2 Country
# * GeoLite-Legacy-IPv6-City - GeoLite Legacy IPv6 City
# * GeoLite-Legacy-IPv6-Country - GeoLite Legacy IPv6 Country
# * 506 - GeoLite Legacy Country
# * 517 - GeoLite Legacy ASN
# * 533 - GeoLite Legacy City
ProductIds 506 GeoLite-Legacy-IPv6-Country
DatabaseDirectory /usr/share/GeoIP
然后安装 geoipupdate,执行 sudo apt install geoipupdate && mkdir -p /usr/share/GeoIP && geoipupdate -v
,你的数据库就已经下载完毕了。
/etc/powerdns/pdns.d/geoip.conf
内容是:
launch=geoip
geoip-database-files=/usr/share/GeoIP/GeoLiteCountry.dat /usr/share/GeoIP/GeoIPv6.dat # 选择 IPv4 和 IPv6 国家模块
geoip-database-cache=memory
geoip-zones-file=/share/zone.yaml # 你的 YAML 配置文件的位置,随便哪个地方都行
geoip-dnssec-keydir=/etc/powerdns/key
创建那个 YAML 文件,然后开始写 Zone,这是一个例子(IPv6 不是必须的,所有 IP 应该都填写外部 IP,本文以精确到国家举例,并列内容的顺序无所谓):
# @see: https://doc.powerdns.com/md/authoritative/backend-geoip/
domains:
- domain: example.com
ttl: 300 # 默认 TTL 时长
records:
##### Default NS
ns1.example.com:
- a: # 你的服务器的第一个 IPv4 地址
content: 10.0.0.1
ttl: 86400
- aaaa: # 你的服务器的第一个 IPv6 地址
content: ::1
ttl: 86400
ns2.example.com: # 你的服务器的第二个 IPv4 地址(如果没有就和上面一样)
- a:
content: 10.0.0.2
ttl: 86400
- aaaa: # 你的服务器的第二个 IPv6 地址(如果没有就和上面一样)
content: ::2
ttl: 86400
##### Root domain
example.com: # 根域名下的记录
- soa:
content: ns1.example.com. admin.example.com. 1 86400 3600 604800 10800
ttl: 7200
- ns:
content: ns1.example.com.
ttl: 86400
- ns:
content: ns2.example.com.
ttl: 86400
- mx:
content: 100 mx1.example.com. # 权重 [空格] 主机名
ttl: 7200
- mx:
content: 100 mx2.example.com.
ttl: 7200
- mx:
content: 100 mx3.example.com.
ttl: 7200
- a: 103.41.133.70 # 如果想使用默认 TTL,那就不用区分 content 和 ttl 字段
- aaaa: 2001:470:fa6b::1
##### Servers list 你的服务器列表
beijing-server.example.com: &beijing
- a: 10.0.1.1
- aaaa: ::1:1
newyork-server.example.com: &newyork
- a: 10.0.2.1
- aaaa: ::2:1
japan-server.example.com: &japan
- a: 10.0.3.1
- aaaa: ::3:1
london-server.example.com: &uk
- a: 10.0.4.1
- aaaa: ::4:1
france-server.example.com: &france
- a: 10.0.5.1
- aaaa: ::5:1
##### GEODNS 分区解析
# @see: https://php.net/manual/en/function.geoip-continent-code-by-name.php
# @see: https://en.wikipedia.org/wiki/ISO_3166-1_alpha-3
# unknown also is default
# %co.%cn.geo.example.com
# 默认
unknown.unknown.geo.example.com: *newyork # 默认解析到美国
# 洲
unknown.as.geo.example.com: *japan # 亚洲解析到日本
unknown.oc.geo.example.com: *japan # 大洋洲解析到日本
unknown.eu.geo.example.com: *france # 欧洲解析到法国
unknown.af.geo.example.com: *france # 非洲解析到法国
# 国家
chn.as.geo.example.com: *beijing # 中国解析北京
gbr.eu.geo.example.com: *uk # 英国解析到英国
services:
# GEODNS
www.example.com: [ '%co.%cn.geo.example.com', 'unknown.%cn.geo.example.com', 'unknown.unknown.geo.example.com']
这个配置,就相当于把 www.example.com 给分区解析,由于目前这个解析存在一些问题,导致不能同时在根域名和子域名下设置 GEODNS,这个 Bug 我已经提交反馈了。 如果你想只把解析精度设在洲级别,那么就直接 %cn.geo.example.com 这样少写一级就行了。如果你需要精确到城市,那么多写一级就行,但是需要在配置文件中添加 GeoIP 城市的数据库。然而免费的城市数据库的城市版本并不精准,你还需要去购买商业数据库,这又是一个额外开销。
$ dig icann.org ns +short
a.iana-servers.net.
b.iana-servers.net.
c.iana-servers.net.
ns.icann.org.
然后再看它的上级域名 org:
$ dig org ns +short
a2.org.afilias-nst.info.
b0.org.afilias-nst.org.
d0.org.afilias-nst.org.
c0.org.afilias-nst.info.
a0.org.afilias-nst.info.
b2.org.afilias-nst.org.
随便找一个服务器,查询权威记录(我就不用 +short 了):
$ dig @a0.org.afilias-nst.info icann.org ns
;; QUESTION SECTION:
;icann.org.INNS
;; AUTHORITY SECTION:
icann.org.86400INNSc.iana-servers.net.
icann.org.86400INNSa.iana-servers.net.
icann.org.86400INNSns.icann.org.
icann.org.86400INNSb.iana-servers.net.
;; ADDITIONAL SECTION:
ns.icann.org.86400INA199.4.138.53
ns.icann.org.86400INAAAA2001:500:89::53
可以看到,在这个 org 的 NS 服务器就已经把 ns.icann.org. 的记录返回来了,这也就是你需要在域名注册商填写 IP 地址的原因。然而你最好在你域名下的 DNS 服务器上也返回相同的 NS 和相同的 IP。 最后,不要忘了改域名的 NS 记录。
&variable
设置变量,*variable
使用变量,这很像 CloudXNS 下的 LINK 记录,比如在 CloudXNS 下你可以这么写:
www.example.com 600 IN A 10.0.0.1
www.example.com 600 IN A 10.0.0.2
www.example.com 600 IN AAAA ::1
www.example.com 600 IN AAAA ::2
sub.example.com 600 IN LINK www.example.com
然后在你的 YAML 记录里就可以这么写:
www.example.com: &www
- a: 10.0.0.1
- a: 10.0.0.2
- aaaa: ::1
- aaaa: ::2
sub.example.com: *www
这就是 YAML 的一种高级写法,不需要其他额外支持。
$ mkdir /etc/powerdns/key
$ pdnsutil secure-zone example.com
$ pdnsutil show-zone example.com
最后一个指令所返回的结果就是你需要在域名注册商设置的记录,不推荐都设置,只设置 ECDSAP256SHA256 - SHA256 digest 就行了。 最后在线检查设置即可 测试地址1 测试地址2,可能有几天缓存时间。 我的检查结果
"*.ip.example.com":
- txt:
content: "IP%af: %ip, Continent: %cn, Country: %co, ASn: %as, Region: %re, Organisation: %na, City: %ci"
ttl: 0
这些变量都能作为你 GEODNS 的标准,也可以检查你的 GEOIP 数据库情况。 然后,正确检查的姿势:
$ random=`head -200 /dev/urandom md5` ; dig ${random}.ip.example txt +short
"IPv4: 42.83.200.23, Continent: as, Country: chn, ASn: unknown, Region: unknown, Organisation: unknown, City: unknown"
IP 地址就是 DNS 缓存服务器地址(如果你开启了 EDNS Client Subnet,且缓存服务器支持,那么就是自己的 IP,但是如果使用 8.8.8.8,那么会看到自己的 IP 最后一位是 0),如果你在本地指定了从你自己的服务器查,那就直接返回你自己的 IP 地址。由于我只安装了国家数据库,所以除了洲和国家之外其余都是 Unknown。
$ dig @a.gtld-servers.net guozeyu.com
;; QUESTION SECTION:
;guozeyu.com.INA
;; AUTHORITY SECTION:
guozeyu.com.172800INNSa.geo.ns.tloxygen.net.
guozeyu.com.172800INNSc.geo.ns.tloxygen.net.
;; ADDITIONAL SECTION:
a.geo.ns.tloxygen.net.172800INA198.251.90.65
a.geo.ns.tloxygen.net.172800INAAAA2605:6400:10:6a9::2
c.geo.ns.tloxygen.net.172800INA104.196.241.116
c.geo.ns.tloxygen.net.172800INAAAA2605:6400:20:b5e::2
其中是两个 IPv4 两个 IPv6,其中 a.geo.ns.tloxygen.net. 是使用了 Anycast 技术的 IP 地址,其背后由三台服务器提供。c.geo.ns.tloxygen.net. 属于另一家服务商的主机,这样一个挂了之后还有备份,更加稳定。
来自:https://www.guozeyu.com/2016/08/self-host-dns/
curl https://raw.githubusercontent.com/uselibrary/memoryCheck/main/memoryCheck.sh | bash
wget --no-check-certificate -O memoryCheck.sh https://raw.githubusercontent.com/uselibrary/memoryCheck/main/memoryCheck.sh && chmod +x memoryCheck.sh && bash memoryCheck.sh
来源:
内存交换(Swap)
当系统内存不够用时,宿主机把部分长时间未操作(读写)的内存交换到磁盘上配置的Swap分区,等相关程序需要运行时再恢复到内存中。
气球驱动(Balloon)
通过virtio_balloon驱动实现动态调整Guest与Host的可用内存空间。Balloon的工作原理是在虚拟机中安装一个kmod,KVM宿主机内存不足,会根据virtio_balloon判断哪些内存页面可以被回收,然后virtio_balloon将这些内存占用,返回给宿主机使用。
root用户执行rmmod virtio_balloon可以关闭virtio_balloon。事实上,大多数使用Proxmox VE的厂商都会开启virtio_balloon进行超售。
KSM(Kernel Samepage Merging 内存合并)
KSM是一种内存合并技术,它可以在KVM中实现内存共享,从而节省内存空间。是Linux kernel的一种内存共享机制,在2.6.32版本引入,用于合并具有相同内容的物理主存页面以减少页面冗余。在Kernel中KSM会定期扫描用户注册的内存区域,当有相同的页面就会将其合并,并用一个添加到页表中的新页面来代替原来的页面。当需要修改时,复制新的内存页,再做修改(将其标记为 copy-on-write)
https://github.com/uselibrary/memoryCheck
https://www.nodeseek.com/post-8417-1
结论:
root用户执行rmmod virtio_balloon
rmmod virtio_balloon
可以关闭virtio_balloon,在超售太猛的机器上真的有效,性能提升很大。
SWAP超售!
内存io速度低于 10 GB/s,存在SWAP超售可能chrome 内核浏览器提供了一些选择器来允许你修改滚动条的部分样式。
/* 滚动条 */
::-webkit-scrollbar {}
/* 滚动条-按钮 */
::-webkit-scrollbar-button {}
/* 滚动条-开始按钮 */
::-webkit-scrollbar-button:start {}
/* 滚动条-结束按钮 */
::-webkit-scrollbar-button:end {}
/* 滚动条-减量按钮 */
::-webkit-scrollbar-button:decrement {}
/* 滚动条-增量按钮 */
::-webkit-scrollbar-button:increment {}
/* 滚动条-开始减量按钮 */
::-webkit-scrollbar-button:start:decrement {}
/* 滚动条-结束增量按钮 */
::-webkit-scrollbar-button:end:increment {}
/* 滚动条-轨道 */
::-webkit-scrollbar-track {}
/* 滚动条-轨道碎片 */
::-webkit-scrollbar-track-piece {}
/* 滚动条-滑块 */
::-webkit-scrollbar-thumb {}
/* 滚动条-拐角 */
::-webkit-scrollbar-corner {}
/* 滚动条-水平轨道 */
::-webkit-scrollbar-track:horizontal {}
/* 滚动条-垂直轨道 */
::-webkit-scrollbar-track:vertical {}
/* 滚动条-垂直按钮 */
::-webkit-scrollbar-button:vertical {}
scrollbar | button | track | track-piece | thumb | corner | |
---|---|---|---|---|---|---|
display | √ | √ | √ | √ | √ | × |
width | √ | √ | × | × | × | × |
height | √ | √ | × | × | × | × |
margin | × | × | × | √ | × | × |
border | √ | √ | × | √ | √ | √ |
border-radius | √ | √ | × | √ | √ | √ |
background | √ | √ | √ | √ | × | √ |
box-shadow | √ | √ | √ | √ | √ | √ |