ind() 方法創建一個新的函數,在 bind() 被調用時,這個新函數的 this 被指定為 bind() 的第一個參數,而其余參數將作為新函數的參數,供調用時使用。
const module = {
x: 42,
getX: function() {
return this.x;
}
};
const unboundGetX = module.getX;
console.log(unboundGetX()); // The function gets invoked at the global scope
// expected output: undefined
const boundGetX = unboundGetX.bind(module);
console.log(boundGetX());
// expected output: 42
function.bind(thisArg[, arg1[, arg2[, ...]]])
thisArg
調用綁定函數時作為 this 參數傳遞給目標函數的值。 如果使用new運算符構造綁定函數,則忽略該值。當使用 bind 在 setTimeout 中創建一個函數(作為回調提供)時,作為 thisArg 傳遞的任何原始值都將轉換為 object。如果 bind 函數的參數列表為空,或者thisArg是null或undefined,執行作用域的 this 將被視為新函數的 thisArg。
arg1, arg2, ...
當目標函數被調用時,被預置入綁定函數的參數列表中的參數。
bind() 最簡單的用法是創建一個函數,不論怎么調用,這個函數都有同樣的 this 值。JavaScript新手經常犯的一個錯誤是將一個方法從對象中拿出來,然后再調用,期望方法中的 this 是原來的對象(比如在回調中傳入這個方法)。如果不做特殊處理的話,一般會丟失原來的對象?;谶@個函數,用原始的對象創建一個綁定函數,巧妙地解決了這個問題:
this.x = 9; // 在瀏覽器中,this 指向全局的 "window" 對象
var module = {
x: 81,
getX: function() { return this.x; }
};
module.getX(); // 81
var retrieveX = module.getX;
retrieveX();
// 返回 9 - 因為函數是在全局作用域中調用的
// 創建一個新函數,把 'this' 綁定到 module 對象
// 新手可能會將全局變量 x 與 module 的屬性 x 混淆
var boundGetX = retrieveX.bind(module);
boundGetX(); // 81
bind() 的另一個最簡單的用法是使一個函數擁有預設的初始參數。只要將這些參數(如果有的話)作為 bind() 的參數寫在 this 后面。當綁定函數被調用時,這些參數會被插入到目標函數的參數列表的開始位置,傳遞給綁定函數的參數會跟在它們后面。
function list() {
return Array.prototype.slice.call(arguments);
}
function addArguments(arg1, arg2) {
return arg1 + arg2
}
var list1 = list(1, 2, 3); // [1, 2, 3]
var result1 = addArguments(1, 2); // 3
// 創建一個函數,它擁有預設參數列表。
var leadingThirtysevenList = list.bind(null, 37);
// 創建一個函數,它擁有預設的第一個參數
var addThirtySeven = addArguments.bind(null, 37);
var list2 = leadingThirtysevenList();
// [37]
var list3 = leadingThirtysevenList(1, 2, 3);
// [37, 1, 2, 3]
var result2 = addThirtySeven(5);
// 37 + 5 = 42
var result3 = addThirtySeven(5, 10);
// 37 + 5 = 42 ,第二個參數被忽略
在默認情況下,使用 window.setTimeout() 時,this 關鍵字會指向 window (或 global)對象。當類的方法中需要 this 指向類的實例時,你可能需要顯式地把 this 綁定到回調函數,就不會丟失該實例的引用。
. DNS介紹
1.1什么是域名
域名(Domain Name) ,簡稱域名、網域,是由一串用點分隔的名字組成的Intemet上某一臺計算機或計算機組的名稱,用于在數據傳輸時標識計算機的電子方位。具有獨一無二,不可重復的特性。
1.2 什么是DNS?
域名系統(Domain Name System,縮寫: DNS)是互聯網的一項服務。域名解析是把域名指向網站空間IP,讓人們通過注冊的域名可以方便地訪問到網站的一種服務。IP地址是網絡上標識站點的數字地址,為了方便記憶,采用域名來代替IP地址標識站點地址。域名解析就是域名到IP地址的轉換過程。域名的解析工作由DNS服務器完成??梢岳斫鉃镈NS就是翻譯官。
正向解析: 域名 --> IP地址
反向解析: IP地址 --> 域名 //郵件服務會用到。
1.3 域名的組成和分類
常見格式: www.baidu.com
完整格式: www.baidu.com.
. : 根域 ,可省略不寫 ,全球13臺 ,一臺主根 ,其他都是輔根
com : 頂級域, 由ICANN 組織指定和管理。
分類:
國家地區域名: cn (中國) 、hk (香港) 、sg (新加坡)等
通用頂級域名: com (商業機構) I org (非營利組織) 、edu (教育機構)等。
新通用頂級域名: red (紅色、熱情) 、top (頂級、高端)等
baidu:二級域(注冊域) ,可由個人或組織申請注冊。
www: 三級域(子域) ,服務器網站名代表。
主機名: s1.www.atguigu.com.中的s1就是主機名,一般用來表示具體某一臺主機。 //不常見
2. 域名解析過程
1. 客戶機首先查看查找本地hosts文件,如果有則返回,否則進行下一步
2. 客戶機查看本地緩存,是否存在本條目的緩存,如果有則直接返回,否則進行下一步。
3. 將請求轉發給指向的DNS服務器。
4. 查看域名是否本地解析,是則本地解析返回,否則進行下一步。
5. 本地DNS服務器首先在緩存中查找,有則返回,無則進行下一步。 \這里的緩存是從其他dns服務器學習來的
6. 向全球13個根域服務器發起DNS請求,根域返回org域的地址列表。
7. 使用某一個org域的IP地址,發起DNS請求, org域返回kernel域服務器地址列表。
8. 使用某一個kernel域IP地址,發起DNS請求, kernel域返回www.kernel.org主機的IP地址,本地DNS服務收到后,返回給客戶機,并在本地DNS服務器保存一份。
為了安全性,DNS服務器不是隨便搭建的,我們最多搭建一個簡單的DNS服務器。
3. DNS軟件信息
軟件名稱
bind
服務名稱
named
軟件端口
UDP 53 數據通信(域名解析)
TCP 53 數據同步 (主從同步)
配置文件:
主配置文件: /etc/nameed.conf (服務器運行參數)
區域配置文件: /etc/named.rfc1912.zones (服務器解析的區域配置,正反向區域定義信息)
數據配置文件: /var/named/xx.xx (主機名和IP地址的對應解析關系,及主從同步信息)
記錄類型:
A: | 地址記錄,用來指定域名的IPv4地址的記錄 |
CNAME: | 將域名指向另一個域名,再由另一個域名提供IP地址,就需要添加CNAME記錄 |
TXT: | 可填寫任何東西,長度限制255。絕大多數的TXT記錄是用來做SPF的(反垃圾郵件) |
NS: | 域名服務器記錄,如果需要把子域名教給其他DNS服務商解析,就需要添加NS記錄。 |
AAAA: | 地址記錄,用來指定域名的IPv6地址的記錄 |
MX: | 郵件交換記錄,如果需要設置郵箱,讓郵箱能收到郵件,就需要添加MX記錄。 |
4. DNS 實驗搭建
4.1 DNS基本服務搭建
環境準備
ip | 節點 | 主機名 |
10.30.59.193 | master | dns1 |
10.30.59.194 | 測試 | dns2 |
基礎準備
# 修改主機名
[root@localhost ~]# hostnamectl set-hostname dns1
[root@localhost ~]# bash
# 配置本地yum源
[root@dns1 ~]# mv /etc/yum.repos.d/* /media/
[root@dns1 ~]# vi /etc/yum.repos.d/local.repo
[centos]
name=centos
baseurl=file:///opt/centos
gpgcheck=0
enabled=1
[root@dns1 ~]# mkdir -p /opt/centos
[root@dns1 ~]# mount /dev/sr0 /opt/centos/
mount: /dev/sr0 is write-protected, mounting read-only
[root@dns1 ~]# yum repolist
Loaded plugins: fastestmirror
centos | 3.6 kB 00:00:00
(1/2): centos/group_gz | 155 kB 00:00:00
(2/2): centos/primary_db | 2.8 MB 00:00:00
Determining fastest mirrors
repo id repo name status
centos centos 3,723
repolist: 3,723
# 關閉防火墻
[root@dns1 ~]# systemctl stop firewalld
[root@dns1 ~]# systemctl disable firewalld
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
Removed symlink /etc/systemd/system/basic.target.wants/firewalld.service.
[root@dns1 ~]# setenforce 0
[root@dns1 ~]# vi /etc/selinux/config
SELINUX=disabled
# 安裝常用工具
[root@dns1 ~]# yum install -y vim net-tools bash-c*
服務搭建
# 安裝服務
[root@dns1 ~]# yum -y install bind
# 配置注意事項 所有內容以;結尾 ,, 大括號兩側內用空格分隔
# 配置主配置文件
[root@dns1 named]# vim /etc/named.conf
options {
listen-on port 53 { any; }; //設置服務器監聽網卡,any 所有的
listen-on-v6 port 53 { ::1; };
directory "/var/named"; // 數據文件保存位置
dump-file "/var/named/data/cache_dump.db";
statistics-file "/var/named/data/named_stats.txt";
memstatistics-file "/var/named/data/named_mem_stats.txt";
allow-query { any; }; //設置訪問服務器的客戶端地址, any 所有
include "/etc/named.rfc1912.zones"; // 最下面有一行配置文件,指定了區域配置文件。
# 配置區域配置文件
[root@dns1 ~]# vim /etc/named.rfc1912.zones
zone "bilibili.com" IN {
type master;
file "bilibili.localhost";
allow-update { none; };
};
zone "59.30.10.in-addr.arpa" IN {
type master;
file "bilibili.loopback";
allow-update { none; };
};
[root@dns1 ~]# cd /var/named/
[root@dns1 named]# ls
data dynamic named.ca named.empty named.localhost named.loopback slaves
# 注意與區域配置文件相一致
[root@dns1 named]# cp -a named.localhost bilibili.localhost
[root@dns1 named]# cp -a named.loopback bilibili.loopback
# 正向解析
[root@dns1 named]# vim bilibili.localhost
$TTL 1D
@ IN SOA bilibili.com. rname.invalid. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS dns.bilibili.com.
dns A 10.30.59.193
www A 10.30.59.195
# 反向解析
[root@dns1 named]# vim bilibili.loopback
$TTL 1D
@ IN SOA bilibili.com. rname.invalid. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS dns.bilibili.com.
93 PTR dns.bilibili.com.
95 PTR www.bilibili.com.
# 啟動服務
[root@dns1 named]# systemctl restart named
[root@dns1 named]# netstat -ntlp |grep named
tcp 0 0 10.30.59.193:53 0.0.0.0:* LISTEN 12550/named
tcp 0 0 127.0.0.1:53 0.0.0.0:* LISTEN 12550/named
tcp 0 0 127.0.0.1:953 0.0.0.0:* LISTEN 12550/named
tcp6 0 0 ::1:53 :::* LISTEN 12550/named
tcp6 0 0 ::1:953 :::* LISTEN 12550/named
測試
# 使用第二臺虛擬機, 配置dns為DNS服務器,測試
[root@localhost ~]# hostnamectl set-hostname dns2
[root@localhost ~]# bash
[root@dns2 ~]# vi /etc/sysconfig/network-scripts/ifcfg-eno16780032
DNS1=10.30.59.193
[root@dns2 ~]# systemctl restart network
# bilibili地址顯示為10.30.59.195,說明配置成功。
[root@dns2 ~]# ping www.bilibili.com
PING www.bilibili.com (10.30.59.195) 56(84) bytes of data.
From 10.30.59.194 icmp_seq=1 Destination Host Unreachable
From 10.30.59.194 icmp_seq=2 Destination Host Unreachable
From 10.30.59.194 icmp_seq=3 Destination Host Unreachable
From 10.30.59.194 icmp_seq=4 Destination Host Unreachable
4.2主從DNS服務器
目的:
減輕主服務器的壓力,備份
環境準備:
centos7-1511,關閉防火墻 selinux
ip | 節點 | 主機名 |
10.30.59.193 | master | dns1 |
10.30.59.194 | slave | dns2 |
10.30.59.195 | ceshi | localhost |
# 主從兩個節點
# 配置本地yum源
[root@dns1 ~]# cat /etc/yum.repos.d/local.repo
[centos]
name=centos
baseurl=file:///opt/centos
gpgcheck=0
enabled=1
[root@dns2 ~]# cat /etc/yum.repos.d/local.repo
[centos]
name=centos
baseurl=file:///opt/centos
gpgcheck=0
enabled=1
# 安裝服務
[root@dns1 ~]# yum install -y bind
[root@dns2 ~]# yum install -y bind
主節點配置
# 主節點配置
[root@dns1 ~]# vim /etc/named.conf
options {
listen-on port 53 { 10.30.59.193; };
listen-on-v6 port 53 { ::1; };
directory "/var/named";
dump-file "/var/named/data/cache_dump.db";
statistics-file "/var/named/data/named_stats.txt";
memstatistics-file "/var/named/data/named_mem_stats.txt";
allow-query { any; };
# 區域配置文件只保留一個模板文件
[root@dns1 ~]# vim /etc/named.rfc1912.zones
zone "bilibili.com" IN {
type master;
file "bilibili.localhost";
allow-update { 10.30.59.194; };
};
# 修改正向解析配置文件 相對于基本服務,這里多配置一個serial充當版本作用
[root@dns1 ~]# cd /var/named/
[root@dns1 named]# cp -a named.localhost bilibili.localhost
[root@dns1 named]# vim bilibili.localhost
$TTL 1D
@ IN SOA bilibili.com. rname.invalid. (
20211208 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS dns.bilibili.com.
dns A 10.30.59.193
www A 10.30.59.195
[root@dns1 named]# service named restart
Redirecting to /bin/systemctl restart named.service
從節點配置
[root@dns2 ~]# vim /etc/named.conf
10 options {
11 listen-on port 53 { 10.30.59.194; };
12 listen-on-v6 port 53 { ::1; };
13 directory "/var/named";
14 dump-file "/var/named/data/cache_dump.db";
15 statistics-file "/var/named/data/named_stats.txt";
16 memstatistics-file "/var/named/data/named_mem_stats.tx t";
17 allow-query { any; };
# 配置區域配置文件 只保留一個模板文件
[root@dns2 ~]# vim /etc/named.rfc1912.zones
zone "bilibili.com" IN {
type slave;
masters { 10.30.59.193; };
file "slaves/bilibili.localhost";
allow-update { none; };
};
# 從服務器不需要配置解析文件,會自動同步master節點服務器文件到slaves目錄下
# 啟動前,確認為空目錄
[root@dns2 ~]# ls /var/named/slaves/
# 啟動服務
[root@dns2 ~]# service named start
Redirecting to /bin/systemctl start named.service
[root@dns2 ~]# ls /var/named/slaves/
bilibili.localhost
驗證結果
給測試機配置dns為從服務器的地址
[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-eno16780032
# 從節點的地址
DNS1=10.30.59.194
[root@localhost ~]# systemctl restart netwoprk
Failed to restart netwoprk.service: Unit netwoprk.service failed to load: No such file or directory.
[root@localhost ~]# systemctl restart network
[root@localhost ~]# ping www.bilibili.com
PING www.bilibili.com (10.30.59.195) 56(84) bytes of data.
64 bytes from 10.30.59.195: icmp_seq=1 ttl=64 time=0.028 ms
64 bytes from 10.30.59.195: icmp_seq=2 ttl=64 time=0.042 ms
64 bytes from 10.30.59.195: icmp_seq=3 ttl=64 time=0.040 ms
^C
--- www.bilibili.com ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2001ms
rtt min/avg/max/mdev = 0.028/0.036/0.042/0.009 ms
4.3DNS緩存服務器
目的:
加快解析速度,提高工作效率
實驗軟件:
dnsmasq
操作:
接上一個環境繼續操作,把從服務器當作緩存服務器。
# 停掉從服務器
[root@dns2 ~]# service named stop
Redirecting to /bin/systemctl stop named.service
# 安裝dnsmasq 可能已經安裝。
yum install -y dnsmasq
# 修改配置文件
[root@dns2 ~]# vim /etc/dnsmasq.conf
domain=bilibili.com
server=10.30.59.193
cache-size=150
# 重啟服務
[root@dns2 ~]# service dnsmasq restart
Redirecting to /bin/systemctl restart dnsmasq.service
# 測試 如果沒有nslookup命令,下載bind-utils
[root@localhost ~]# nslookup www.bilibili.com
Server: 10.30.59.194
Address: 10.30.59.194#53
Name: www.bilibili.com
Address: 10.30.59.195
# 關掉主服務器
[root@dns1 ~]# systemctl stop named
# 再次測試 非權威回答
[root@localhost ~]# nslookup www.bilibili.com
Server: 10.30.59.194
Address: 10.30.59.194#53
Non-authoritative answer:
Name: www.bilibili.com
Address: 10.30.59.195
請求順序
# 客戶端從緩存服務器請求, 緩存服務器沒有,去主服務查找, 主服務器沒啟動,測試沒反應, 啟動主服務器,再次測試, 緩存服務器再次請求主服務器,獲取域名,返回給客戶端。
# 主服務器沒啟動
[root@localhost ~]# nslookup dns.bilibili.com
^C
# 啟動主服務器
[root@dns1 ~]# systemctl start named
[root@localhost ~]# nslookup dns.bilibili.com
Server: 10.30.59.194
Address: 10.30.59.194#53
Name: dns.bilibili.com
Address: 10.30.59.193
# 再次關閉,有緩存可以解析到。
[root@dns1 ~]# systemctl stop named
[root@localhost ~]# nslookup dns.bilibili.com
Server: 10.30.59.194
Address: 10.30.59.194#53
Non-authoritative answer:
Name: dns.bilibili.com
Address: 10.30.59.193
4.4 智能DNS(分離解析)
目的:
NDS分離解析即將相同域名解析為不同的IP地址,實現網絡中一些網站為了讓用戶有更好的體驗效果解析速度更快,就把來自不通運營商的用戶解析到相對應的服務器,這樣就大大提升了訪問速度。
實驗環境:
配置一臺apache服務器,兩個網卡模擬內外網, 兩臺測試機從內網外網分別訪問。dns能夠正確解析(內網地址訪問解析內網地址,外網地址訪問解析外網地址)。
節點 | IP | 主機名 | 備注 |
內網測試機 | 192.168.100.10 | int | 內外網選擇網絡模式:內: vmnat1 192.168.100.0/24外: vmnat 8 192.168.200.0/24 |
外網測試機 | 192.168.200.10 | ext | |
apache | 192.168.100.20 192.168.200.20 | apache | |
dns+路由 | 192.168.100.30 192.168.200.30 | dns |
實驗大綱:
1、安裝bind軟件
2、內核配置文件開啟路由轉發,修改/etc/sysctl.conf
3、修改主配置文件/etc/named.conf 配置any,視圖
4、生成自己定義的區域配置文件。
5、配置數據文件
內網正向解析,外網正向解析
6、重啟服務
7、效果測試
nslookup
基礎環境準備:
修改主機名 配置ip 所有節點關閉防火墻、selinux、配置本地yum。
# 內網測試機
[root@localhost ~]# hostnamectl set-hostname net1
[root@localhost ~]# bash
[root@int ~]# cat /etc/sysconfig/network-scripts/ifcfg-eno16777736
TYPE=Ethernet
BOOTPROTO=static
DEFROUTE=yes
PEERDNS=yes
PEERROUTES=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_PEERDNS=yes
IPV6_PEERROUTES=yes
IPV6_FAILURE_FATAL=no
NAME=eno16777736
ONBOOT=yes
IPADDR=192.168.100.10
NETMASK=255.255.255.0
GATEWAY=192.168.100.30
DNS1=192.168.100.30
# 外網測試機
[root@localhost ~]# hostnamectl set-hostname ext
[root@localhost ~]# bash
[root@ext ~]# cat /etc/sysconfig/network-scripts/ifcfg-eno16777736
TYPE=Ethernet
BOOTPROTO=static
DEFROUTE=yes
PEERDNS=yes
PEERROUTES=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_PEERDNS=yes
IPV6_PEERROUTES=yes
IPV6_FAILURE_FATAL=no
NAME=eno16777736
ONBOOT=yes
IPADDR=192.168.200.10
NETMASK=255.255.255.0
GATEWAY=192.168.200.2
DNS1=192.168.200.30
# 配置雙網卡出了一個問題: 一開始本著第一塊網卡僅主機模式,然后第二塊網卡net模式,就調整第一塊網卡為僅主機模式,新加的第二塊網卡為net模式, 結果網絡不行,就重新配置為第一塊網卡為net模式,第二塊網卡為net模式。 不影響本案例。
# apache
[root@localhost ~]# hostnamectl set-hostname apache
[root@localhost ~]# bash
[root@apache ~]# cat /etc/sysconfig/network-scripts/ifcfg-eno16777736
TYPE=Ethernet
BOOTPROTO=static
DEFROUTE=yes
PEERDNS=yes
PEERROUTES=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_PEERDNS=yes
IPV6_PEERROUTES=yes
IPV6_FAILURE_FATAL=no
NAME=eno16777736
ONBOOT=yes
IPADDR=192.168.200.20
NETMASK=255.255.255.0
GATEWAY=192.168.200.2
DNS1=114.114.114.114
[root@apache ~]# cat /etc/sysconfig/network-scripts/ifcfg-eno33554984
TYPE=Ethernet
BOOTPROTO=static
DEFROUTE=yes
PEERDNS=yes
PEERROUTES=yes
NAME=eno33554984
ONBOOT=yes
IPADDR=192.168.100.20
NETMASK=255.255.255.0
# dns
[root@localhost ~]# hostnamectl set-hostname dns
[root@localhost ~]# bash
[root@dns ~]# cat /etc/sysconfig/network-scripts/ifcfg-eno16777736
TYPE=Ethernet
BOOTPROTO=static
DEFROUTE=yes
PEERDNS=yes
PEERROUTES=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_PEERDNS=yes
IPV6_PEERROUTES=yes
IPV6_FAILURE_FATAL=no
NAME=eno16777736
ONBOOT=yes
IPADDR=192.168.200.30
NETMASK=255.255.255.0
GATEWAY=192.168.200.2
DNS1=114.114.114.114
[root@dns ~]# cat /etc/sysconfig/network-scripts/ifcfg-eno33554984
TYPE=Ethernet
BOOTPROTO=static
DEFROUTE=yes
PEERDNS=yes
PEERROUTES=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_PEERDNS=yes
IPV6_PEERROUTES=yes
IPV6_FAILURE_FATAL=no
NAME=eno33554984
ONBOOT=yes
IPADDR=192.168.100.30
NETMASK=255.255.255.0
# apache 節點安裝httpd
[root@apache ~]# yum install -y httpd
[root@apache ~]# vim /var/www/html/index.html
dns分離解析驗證成功!
[root@apache ~]# systemctl start httpd
[root@apache ~]# systemctl enable httpd
Created symlink from /etc/systemd/system/multi-user.target.wants/httpd.service to /usr/lib/systemd/system/httpd.service.
# dns節點安裝bind。
[root@dns ~]# yum install -y bind
測試一下直接地址訪問看看有沒有問題
分離解析配置
# dns節點永久開啟路由轉發
[root@dns ~]# vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
[root@dns ~]# sysctl -p
net.ipv4.ip_forward = 1
#修改主配置文件
# 兩個any 監聽任意地址
# 加兩個視圖 分別監聽內網和其他地址 ,視圖匹配規則為自上而下匹配,注意順序。 match-client匹配地址, include 指定區域配置文件。
[root@dns ~]# vim /etc/named.conf
listen-on port 53 { any; };
allow-query { any; };
view lan {
match-clients { 192.168.100.0/24; };
zone "." IN {
type hint;
file "named.ca";
};
include "/etc/lan.zones";
};
view wan {
match-clients { any; };
zone "." IN {
type hint;
file "named.ca";
};
include "/etc/wan.zones";
};
#include "/etc/named.rfc1912.zones";
# 修改區域配置文件
[root@dns ~]# cp -a /etc/named.rfc1912.zones /etc/lan.zones
[root@dns ~]# vim /etc/lan.zones
zone "bilibili.com" IN {
type master;
file "lan.localhost";
allow-update { none; };
};
[root@dns ~]# cp -a /etc/lan.zones /etc/wan.zones
[root@dns ~]# vim /etc/wan.zones
zone "bilibili.com" IN {
type master;
file "wan.localhost";
allow-update { none; };
};
# 修改解析文件
[root@dns etc]# cd /var/named/
[root@dns named]# ls
data dynamic named.ca named.empty named.localhost named.loopback slaves
[root@dns named]# cp -a named.localhost lan.localhost
[root@dns named]# vim lan.localhost
$TTL 1D
@ IN SOA bilibili.com. rname.invalid. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS dns.bilibili.com.
dns A 192.168.100.30
www A 192.168.100.20
[root@dns named]# cp -a lan.localhost wan.localhost
[root@dns named]# vim wan.localhost
$TTL 1D
@ IN SOA bilibili.com. rname.invalid. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS dns.bilibili.com.
dns A 192.168.200.30
www A 192.168.200.20
測試
# 啟動服務
[root@dns named]# systemctl start named
# 內網機測試
[root@int ~]# curl www.bilibili.com
dns分離解析驗證成功! \\ 查看是否顯示你在主頁顯示的內容。
# 外網機測試
[root@ext ~]# curl www.bilibili.com
dns分離解析驗證成功! \\查看是否同理
# 再使用nslookup測試
# 兩個節點都下載
[root@ext ~]# yum install -y bind-utils
[root@int ~]# nslookup www.bilibili.com
Server: 192.168.100.30
Address: 192.168.100.30#53
Name: www.bilibili.com
Address: 192.168.100.20
[root@ext ~]# nslookup www.bilibili.com
Server: 192.168.200.30
Address: 192.168.200.30#53
Name: www.bilibili.com
Address: 192.168.200.20
# 可以發現內外網使用的dns地址不同,并且解析出來的ip不同。實驗成功!
如果ip更多,就多寫視圖,多謝區域配置文件與解析文件。
拓展知識: 郵件服務
與之前的call、apply相同之處就是都能改變this指向問題,但是bind()會創建一個新的函數返回,同時改變this的指向,這個指向不能再次被call或者apply改變。
舉個例子:
var obj1 = {
c: 1
};
var obj2 = {
c: 2
};
function fn(a, b) {
console.log(a + b + this.c);
};
var bound = fn.bind(obj1, 2);
bound(3); //6
bound.call(obj1, 3); //6 還是返回6,說明不能再改變this指向
總結一下,就是:
*請認真填寫需求信息,我們會在24小時內與您取得聯系。