学习公网和内网的区别、理解正向代理和反向代理、web server
Nginx学习的总结
为什么会想到学习Nginx呢?主要还是因为公司是使用内网不能访问页面,然后就对这方面的知识进行了baidu。
一、因为Nginx是针对ip地址进行的操作,首先应该知道内网和公网的区别:
ip地址可以分成内网ip地址和公网ip地址,以下为我自己的理解
公网是唯一的,不可能重复的,需要花钱买,不太可能长期占有。而内网又可以叫为局域网。
内网的计算机以网络地址转换协议,通过一个公共的网关访问Internet。而内网的计算机也可以向Internet上的其他计算机发送连接请求。但是但Internet上其他的计算机无法向内网的计算机发送连接请求。
*^* 举例
以酒店为例,公网可以比喻为一家酒店,内网可以比喻为一个个房间,酒店在全世界是可以唯一的,比如叫xx省xx市的xx酒店,可以理解为对应的ipv4(xxx.xxx.xxx.xxx);房间可以叫101号房间,201号房间。每个酒店都会有101房间和201房间。它们可以重复,你和别人介绍自己在哪里入住,肯定不会直说201号房间,你会说是在xx省xx市xx街道xx名字的201号房间。
1、内网:ip可以重复,在同一局域网内是唯一的
1) 内网的IP类型:
10.0.0.0~10.255.255.255
172.16.0.0~172.31.255.255
192.168.0.0~192.168.255.255
2、公网:ip不重复,在世界上是唯一的ip地址
1)公网的ip类型:
除了以上的三种内网类型区间的ip地址,其余的都是公网。
------------------------------------------------------------分割线------------------------------------------------------------
二、介绍完公网和内网的区别后,就介绍一下Nginx
* nginx常用做静态内容服务和代理服务器,接受请求后转发给后面的应用服务(tomcat、django等);
* tomcat更多用来做做一个应用容器,让java web app跑在里面的东西,对应同级别的有jboss,jetty等东西。Tomcat是一个「Servlet/JSP」应用的容器(Ruby/Python 等其他语言开发的应用也无法直接运行在 Tomcat 上),我是学java的,一直在用tomcat。
nginx是和tomcat这些都是服务器(web server),web server 是有分工的,可以分为http server 和 Application Server
1)http server
HTTP Server 关心的是 HTTP 协议层面的传输和访问控制,所以在 Apache/Nginx 上你可以看到代理、负载均衡等功能。客户端通过 HTTP Server 访问服务器上存储的资源(HTML 文件、图片文件等等)。通过 CGI 技术,也可以将处理过的内容通过 HTTP Server 分发,但是一个 HTTP Server 始终只是把服务器上的文件如实的通过 HTTP 协议传输给客户端。
2)Application Server
应用服务器,则是一个应用执行的容器。它首先需要支持开发语言的 Runtime(对于 Tomcat 来说,就是 Java),保证应用能够在应用服务器上正常运行。其次,需要支持应用相关的规范,例如类库、安全方面的特性。对于 Tomcat 来说,就是需要提供 JSP/Sevlet 运行需要的标准类库、Interface 等。为了方便,应用服务器往往也会集成 HTTP Server 的功能,但是不如专业的 HTTP Server 那么强大,所以应用服务器往往是运行在 HTTP Server 的背后,执行应用,将动态的内容转化为静态的内容之后,通过 HTTP Server 分发到客户端。
目前我接触到的服务器,Apache和Nginx是http server,tomcat是Application Server。其他的我刚毕业,没什么工作经验,没遇到,暂时不说。
总结:所以Nginx是一个http server。
前后台交互的过程
1:前端发送请求到后台的过程
client(客户端)--发送request(请求)------》http server(Nginx,Apache等)-------》Application Server(Tomcat)
2:后台响应到前端的过程
Application Server(Tomcat)---(把动态资源转化为静态内容)---》http server---(apache、Nginx)-----返回响应(Response)----》Client(客户端、前端页面html)
三、正向代理和反向代理
这是我复制过来的一个图片,页面地址(https://www.jianshu.com/p/ae76c223c6ef)
1、正向代理
客户端 <一> 代理 一>服务端
解释一下:正向代理,代理站在客户端这边,它代表客户端去和服务端进行交涉,客户端不需要知道服务端是谁,客户把自己的需求告诉代理,代理去找服务端。
2、反向代理
客户端 一>代理 <一> 服务端
解释一下:反向代理,代理站在服务端这边,它代表服务端去和客户端进行交涉,服务端不需要管客户是谁,代理全权代理服务端,在客户端的眼里他就是服务端
举例:租房子
你---中介----房东
正向代理就是,你和中介说了,你要租一个500块的房子,然后中介带着这个信息去给你找符合条件的房子,联系房东,你不用出面,房东也不知道你是谁。
反向代理就是,房东懒得出去贴广告出租屋子,他就找到中介代理他,说把这个房子500块钱给我租出去,然后,此时中介相当于房东(也就是大家叫的二房东),他带着信息找到你,然后每个月的房租水电费你最后都交给中介了,可能到你退房走人,你也一直以为中介是真正的房东呢。
通过这个例子,也可以体现出来面向对象的开发思想,和实际结合起来
总结:
正向代理就是有一个代理对象代表客户端去问服务端请求资源
反向代理是代理对象代理所有服务端的资源,然后分给客户端
正向代理的代理对象是客户端,反向代理的代理对象是服务端。