DNS域名解析

  • 域名最终通过DNS解析变为IP地址,所以我们也可以通过公网IP直接访问网站
  • 外网访问通过Nginx反向代理访问真实服务器的地址,其中真实服务器的地址只能在内网访问。
  • nginx是一个单独的服务器,他可以隐藏真实的IP地址
  • http://www.baidu.com 类似百度这种网站,我们是直接访问的,并没有加端口号,原因是取的默认端口号,80,默认端口号80是不需要写的,如果不是默认端口号,就需要手动写进去,如http://www.baidu.com:端口号
  • 当我们访问一个域名的时候,会用DNS解析将其转为IP加端口号。
  • 域名只是为了让我们更好的记忆IP地址

DNS域名解析过程

  • 域名解析先读本地浏览器缓存,再读本地hosts文件
  • 如果域名在本地的hosts文件中配置了,不会走外网,而是会从本地的hosts文件获取IP地址
  • 如果本地的hosts文件中没有配置,则走外网,找寻IP地址
  • 通过本地找到了域名和IP的关系叫做本地域名

    补充说明:DNS域名解析步骤
  • 整个过程的答题描述如下所示,其中前两个步骤是在本机完成的,后面8个步骤涉及到了真正的域名解析服务器。
  1. 浏览器会检查缓存中有没有这个域名对应的解析过的IP地址,如果缓存有,这个解析过程就结束了。浏览器缓存域名也是有限制的,不仅浏览器缓存大小有限制,而且缓存的时间也是有限制的,通常情况下分为几分钟到几小时不等,域名被缓存的时间可以通过TTL属性来设置。这个缓存的时间太长和太短都不太好,如果时间太长一旦域名被解析到的IP有变化,会导致客户端缓存的域名无法解析到变化后的IP地址,以致于域名不能正常解析。如果设置时间太短,会导致用户每次访问网站都要重新解析一次域名
  2. 如果用户浏览器缓存中没有数据,浏览器就会查找操作系统的缓存中是否有这个域名对应的DNS解析结果。其实操作系统操作也有一个域名解析的过程,会在windows中通C:\Windows\System32\drivers\etc\hosts文件来设置,在linux中,可以通过/etc/hosts文件来设置,用户可以将任何域名解析到任何能够访问的IP地址上。

例如:我们在测试的时候可以将一个域名解析到一台测试服务器上,这样不用修改任何代码就能够测试到单独服务器上的代码的业务逻辑是否正确。正是因为有这种本地DNS解析的过程,所以有黑客就可能通过修改用户的域名来把特定的域名解析到他指定的IP地址上,导致这些域名被劫持。

  1. 前两个过程没有办法解析的时候,就要用到我们网络配置中的“DNS服务器地址”了,操作系统会把这个域名发送给这个LDNS,也就是本地区的域名服务器。这个DNS通常都提供用户本地互联网接入的一个DNS解析服务器,例如,用户是在学校接入的互联网,那么用户的DNS服务器肯定在学校。==Windows环境下通过命令行输入ipconfig,Linux环境下通过cat /etc/resolv.conf就可以查询配置的DNS服务器。==这个专门的域名解析服务器性能会很好,他们一般都会缓存域名解析结果,当然缓存时间是收到域名的失效时间控制的。大约80%的域名解析协议到这里结束了,所以LDNS主要承担域名解析的工作。
  2. 如果LDNS(本地区的域名服务器)没有命中,就直接到Root Server域名服务器请求解析。
  3. 根域名服务器返回本地域名服务器一个所查询的主域名服务器(gTLD Server)地址。gTLD是国际顶级域名服务器,如com,.cn,.org等,全球只有13台
  4. 本地域名服务器LDNS再向上一步返回的gTLD服务器发送请求。
  5. 接受请求的gTLD服务器查找并返回此域名对应的Name Server域名服务器的地址。这个Name Server通常就是用户注册的域名服务器。
  6. Name Server域名服务器会查询存储的域名和IP的映射关系表,在正常的情况下根据域名等得到目标IP地址,连同一个TTL值返回给DNS Server域名服务器
  7. 返回该域名对应的IP和TTL值,LDNS会缓存这个域名和IP的对应的关系,缓存时间由TTL值控制
    10.把解析的结果返回给用户,用户根据TTL的值缓存在本地的系统缓存中,域名解析过程结束。

外网映射工具

  • 比如说本地启动的tomcat让外网的域名可以访问,就需要外网映射工具了。让别人可以通过域名访问到自己本地的服务。
  • 目前主流的工具有natapp和ngrok,推荐使用natapp
  • netapp的使用
    (1)买一个netapp,下载下来,一个月9块,给你一个autotoken
    (2)打开本地下载的netapp
    (3)输入natapp -authtoken=刚刚的authtoken

Nginx的应用场景

  • 可以作为HTTP服务器-,通常使用Nginx做静态服务器,图片服务器
  • 可以作为虚拟主机配置,虚拟主机就是将一台服务器拆分成多个网站进行部署
  • 可以做反向代理,负载均衡,使用反向代理,隐藏真实的IP访问地址;负载均衡就是减少单台服务器的压力,负载均衡必须要做集群,利用轮训等策略解决
  • 可以做安全配置
  • 可以使用Nginx搭建API接口网关,解决网站的跨域问题
  • 使用Nginx实现网站的动静分离
  • 使用Nginx实现防止DDOS(安全控制),DDOS就是模拟请求,频繁的恶意访问网站,使流量宽带一直被占用,也叫作流量攻击

Nginx的安装

  • Windows安装Nginx
  • 解压nginx-windows目录
  • 双击nginx.exe运行
  • Linux安装Nginx

(1)安装gcc gcc-c++

$ yum install -y gcc gcc-c++

(2)安装wget

$ yum -y install wget

(3)安装PCRE库

$ cd /usr/local/
 $ wget http://jaist.dl.sourceforge.net/project/pcre/pcre/8.33/pcre-8.33.tar.gz
 $ tar -zxvf pcre-8.33.tar.gz
 $ cd pcre-8.33
 $ ./configure
 $ make && make install• 如果报错:
 在 linux 中执行 wget 命令提示 -bash: wget: command not found 解决方法
 解决办法 yum -y install wget

(4)安装SSL库

$ cd /usr/local/
 $ wget http://www.openssl.org/source/openssl-1.0.1j.tar.gz
 $ tar -zxvf openssl-1.0.1j.tar.gz
 $ cd openssl-1.0.1j
 $ ./config
 $ make && make install

(5)安装zlib库

$ cd /usr/local/
 $ wget http://zlib.net/zlib-1.2.11.tar.gz
 $ tar -zxvf zlib-1.2.11.tar.gz
 $ ./configure
 $ make && make install

(6)安装nginx

$ cd /usr/local/
 $ wget http://nginx.org/download/nginx-1.8.0.tar.gz
 $ tar -zxvf nginx-1.8.0.tar.gz
 $ cd nginx-1.8.0
 $ ./configure
 $ make && make install

(7)运行nginx

/usr/local/nginx/sbin/nginx
  • nginx的目录结构
  • nginx默认启动监听的端口号是80,访问的时候直接加域名就可以,不需要端口号,端口号80是可以省略的

Nginx做静态服务器

  • nginx所有的静态页面放在html目录下,默认访问的是index.html
  • 举例说明:
    (1)我们在html目录下新建立test.html(启动后新建立也可以)

    (2)在浏览器上进行访问
  • 可以看到我们直接在ip后面加上要访问的页面,自动就会跳转到html下,进行访问。

Nginx的虚拟主机配置

  • 一台服务器映射多个域名,比如说,bbs.itmayiedu.com和www.itmayiedu.com最终都在一台服务器上运行。针对这种情况,我们就可以使用Nginx基于域名区分项目
  • Nginx的虚拟主机配置一般分为三种情况
    (1)基于域名的虚拟主机,就是说通过域名来区分虚拟主机—应用:外部网站
    (2)基于端口的虚拟主机,就是说通过不同的端口号来区分虚拟主机–应用:公司内部网站,外部网站的管理后台
    (3)基于ip的虚拟主机,这个基本上没人使用
  • nginx.conf部分功能介绍
### Server模块,内部创建服务器,监听端口号
    server {
	
		## 监听80端口号
        listen       80;
		## 服务name是localhost 用来配置域名
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

		### 配置匹配拦截url地址 / 表示拦截所有的
        location / {
		    ## 表示拦截后跳转到的根目录 所以当我们请求localhost的时候,默认跳转到html目录的index.html
            root   html;
            index  index.html index.htm;
        }

    }

根据上面的注释 ,我们解释下
(1)server {}:表示这是一个server模块,内部创建服务器
(2)listen 80:表示我们这个服务器监听的是80的端口号
(3)server_name localhost:表示的是服务的名字是localhost,只要我们访问的localhost的域名,他就会进入该配置的server
(4)location / {} :配置匹配拦截url的地址,/表示拦截所有的请求
(5)root html:表示的是我们拦截成功后,默认跳转的根目录,所以当我们请求的是localhost的时候,默认跳转到html目录中
(6)index index.html:表示的是跳转到根目录中的哪一个页面

基于域名区分项目路径(实现虚拟主机的一种策略)

  • 案例举例说明:当我们访问bbs.XXXXX.com的时候(域名以bbs开头)跳转到一个页面,当我们域名以www开头的时候,跳转到另一个页面。

(1)在本地hosts文件中加入相关配置映射

127.0.0.1 www.itmayiedu.com
127.0.0.1 bbs.itmayiedu.com

(2)在nginx的目录中新增目录,区分项目路径

  • 原始的结构:
  • 新增data目录,并在里面新增www和bbs目录,在里面新增index.html页面



    (3)修改nginx.conf文件
### Server模块,内部创建服务器,监听端口号
    server {
	
		## 监听80端口号
        listen       80;
		## 服务name是www.itmayiedu.com 用来配置域名
        server_name  www.itmayiedu.com;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

		### 配置匹配拦截url地址 / 表示拦截所有的
        location / {
		    ## 表示拦截后跳转到的根目录 所以当我们请求www.itmayiedu.com的时候,默认跳转到data/www目录的index.html
            root   data/www;
            index  index.html index.htm;
        }
    }

	
	
	### Server模块,内部创建服务器,监听端口号
    server {
	
		## 监听80端口号
        listen       80;
		## 服务name是bbs.itmayiedu.com 用来配置域名
        server_name  bbs.itmayiedu.com;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

		### 配置匹配拦截url地址 / 表示拦截所有的
        location / {
		    ## 表示拦截后跳转到的根目录 所以当我们请求bbs.itmayiedu.com的时候,默认跳转到data/bbs目录的index.html
            root   data/bbs;
            index  index.html index.htm;
        }
    }

(4)启动nginx,然后浏览器中测试:

nginx设置DNS解析 nginx dns解析_nginx设置DNS解析


nginx设置DNS解析 nginx dns解析_nginx设置DNS解析_02

基于端口号区分项目路径(实现虚拟主机的一种策略)

  • 实现方法跟上面大致一样,只不过修改的是listen监听的端口号:
  • nginx.conf的配置修改
#当客户端访问www.itmayiedu.com,监听端口号为8080,直接跳转到data/www目录下文件
	 server {
        listen       8080;
        server_name  www.itmayiedu.com;
        location / {
            root   data/www;
            index  index.html index.htm;
        }
    }
	
	#当客户端访问www.itmayiedu.com,监听端口号为8081,直接跳转到data/bbs目录下文件
	 server {
        listen       8081;
        server_name  www.itmayiedu.com;
        location / {
            root   data/bbs;
            index  index.html index.htm;
        }
    }

Nginx实现反向代理

  • 什么是反向代理
  • 反向代理指的是以代理服务器来接受internet上的请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器。
  • 反向代理的好处
  • 反向代理的好处是隐藏自己真实的内部ip地址,请求先访问nginx代理服务器(外网可以访问到),在使用nginx服务器转发到真实的服务器中。
  • 架构模式
  • nginx设置DNS解析 nginx dns解析_nginx设置DNS解析_03

  • (1)其中nginx服务器是外网可以访问到的,而www和bbs服务器是外网访问不到的,只能内网访问到。
    (2)nginx服务器和www服务器以及bbs服务器一定要是一个局域网内,只有这样nginx才可以通过内网跳转到bbs和www的真实服务器中
    (3)nginx服务器和www以及bbs服务器必须在一个局域网内,使nginx可以走内网访问www和bbs
    (4)客户端只能够访问到nginx的服务器ip,不能访问到www和bbs的服务器ip,做到了隐藏真实的ip。
    (5)nginx服务器和www以及bbs服务器如果走外网会不安全,以及效率要完全低于走内部局域网。
  • 反向代理的配置,还是修改nginx.conf
    利用proxy_pass实现
###当客户端访问8080.itmayiedu.com,监听端口号为80直接跳转到真实ip服务器地址 127.0.0.1:8080
	server {
        listen       80;
        server_name  8080.itmayiedu.com;
        location / {
		 proxy_pass http://127.0.0.1:8080;
            index  index.html index.htm;
        }
}
###当客户端访问www.itmayiedu.com,监听端口号为80直接跳转到真实ip服务器地址 127.0.0.1:8081
	server {
        listen       80;
        server_name  8081.itmayiedu.com;
        location / {
		  proxy_pass http://127.0.0.1:8081;
            index  index.html index.htm;
        }
    }