整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          JavaScript的bind方法

          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
          

          偏函數 Partially applied functions

          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 ,第二個參數被忽略
          


          配合 setTimeout

          在默認情況下,使用 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更多,就多寫視圖,多謝區域配置文件與解析文件。

          拓展知識: 郵件服務

          ind用法

          與之前的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指向

          總結一下,就是:

          • bind 返回一個綁定了 this 的新函數
          • 支持柯里化函數,bind 返回函數的時候,bind的參數,除了傳遞改變 this 的 obj 之外,還有其余的參數,比如例子中的 fn.bind(obj1, 2)的2就是fn中的a
          • 返回的函數的 this 無法再被修改,使用call、apply也不行

          實現bind


          主站蜘蛛池模板: 婷婷亚洲综合一区二区| 性色AV一区二区三区无码| 亚洲中文字幕无码一区| 国产福利电影一区二区三区久久老子无码午夜伦不 | 日本一区二区三区不卡视频中文字幕 | 日韩十八禁一区二区久久| 亚洲国产高清在线一区二区三区| 国产一区三区二区中文在线| 亚洲中文字幕丝袜制服一区| 亚洲爆乳精品无码一区二区三区| 国99精品无码一区二区三区| 国产在线观看91精品一区| 夜色福利一区二区三区| 亚洲一区二区三区无码影院| 国产一区二区成人| 久久久国产精品一区二区18禁| 无码国产精品一区二区免费式直播 | 亚洲AV福利天堂一区二区三| 亚洲色无码一区二区三区| 国产日韩精品一区二区三区在线 | 亚洲熟女www一区二区三区| 久久亚洲一区二区| 国产AV午夜精品一区二区三| 精品国产区一区二区三区在线观看| 亚洲线精品一区二区三区| 一区二区三区亚洲视频| 国产在线一区二区| 国产精品无码一区二区三区电影| 国产观看精品一区二区三区| 色精品一区二区三区| 国产美女露脸口爆吞精一区二区| 亚洲日韩中文字幕一区| 国产欧美一区二区精品仙草咪| 久久精品一区二区免费看| 久久青草精品一区二区三区| 中文字幕在线一区二区三区| 精品国产一区二区三区香蕉事 | 一区二区三区福利视频免费观看| 国产AV一区二区三区传媒| 在线观看日韩一区| 国精品无码一区二区三区左线|