基于Windows下的Nginx学习
学习资源:https://www.bilibili.com/video/BV1zJ411w7SV?p=1
Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄文:Рамблер)开发的,第一个公开版本0.1.0发布于2004年10月4日。
其将源代码以类BSD许可证的形式发布,因它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。2011年6月1日,nginx 1.0.4发布。
Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。
关于代理
说到代理,首先我们要明确一个概念,所谓代理就是一个代表、一个渠道;此时就涉及到两个角色,一个是被代理角色,一个是目标角色。
被代理角色通过这个代理访问目标角色完成一些任务的过程称为代理操作过程;如同生活中的专卖店,客人到 adidas 专卖店买了一双鞋,这个专卖店就是代理,被代理角色就是 adidas 厂家,目标角色就是用户。
正向代理
说反向代理之前,我们先看看正向代理,正向代理也是大家最常接触到的代理模式,我们会从两个方面来说关于正向代理的处理模式,分别从软件方面和生活方面来解释一下什么叫正向代理。
举个例子:在如今的网络环境下,我们如果由于技术需要要去访问国外的某些网站,此时你会发现位于国外的某网站我们通过浏览器是没有办法访问的。
此时大家可能都会用一个操作 FQ 进行访问,FQ 的方式主要是找到一个可以访问国外网站的代理服务器,我们将请求发送给代理服务器,代理服务器去访问国外的网站,然后将访问到的数据传递给我们!
上述这样的代理模式称为正向代理,正向代理最大的特点是客户端非常明确要访问的服务器地址;服务器只清楚请求来自哪个代理服务器,而不清楚来自哪个具体的客户端;正向代理模式屏蔽或者隐藏了真实客户端信息。
比如:访问脸书你就得输入的url地址,这就是明确要访问的服务器地址
反向代理
明白了什么是正向代理,我们继续看关于反向代理的处理方式,举例如我国的某宝网站,每天同时连接到网站的访问人数已经爆表,单个服务器远远不能满足人民日益增长的购买欲望了。
此时就出现了一个大家耳熟能详的名词:分布式部署;也就是通过部署多台服务器来解决访问人数限制的问题。
某宝网站中大部分功能也是直接使用 Nginx 进行反向代理实现的,并且通过封装 Nginx 和其他的组件之后起了个高大上的名字:Tengine。
有兴趣的童鞋可以访问 Tengine 的官网查看具体的信息:http://tengine.taobao.org/
放个看过觉得挺形象的例子:你拨打10086就会有人给你服务,但是谁服务是不需要你来关心,他会呼叫转移给空闲的接听服务员(反向代理),如果转移的人员是在通话中就会转移给空闲的人(负载均衡)。
负载均衡
客户端发送的、Nginx 反向代理服务器接收到的请求数量,就是我们说的负载量。请求数量按照一定的规则进行分发,到不同的服务器处理的规则,就是一种均衡规则。
所以将服务器接收到的请求按照规则分发的过程,称为负载均衡。
简单点来说就是:把接受的请求较平均的分发到各个服务器上
下面来实操一下
(实操需要有Tomcat环境)
先下载nginx,我自己是使用Windows下安装的,Linux还是去网站找教程把
然后运行NGINX
反向代理实操1:
目的:输入www.123.com就可以跳转到127.0.0.1:8080的页面,配置了Tomcat则会显示Tomcat页面
实现:
进入C:\Windows\System32\drivers\etc
进入hosts
在里面添加:192.168.xxx.xxx www.123.com
192.168.xxx.xxx 是你自己的ip地址,cmd输入ipconfig就可以获取
www.123.com 是你想要配置反向代理的网址
此时网址输入www.123.com:8080 是可以跳转到Tomcat页面的,如果不可以则需要确定是否做到配置
但是我们应该做到去掉:8080也能访问的事
所以还需要再到nginx的下载目录中进入conf里进入nginx.conf
将里面的server配置成这样:
(加粗的是新加的)
server {
listen 80;
server_name 192.168.31.215;
location / {
root html;
proxy_pass http://127.0.0.1:8080;
index index.html index.htm;
}
server_name 是自己的ip
proxy_pass是需要跳转到的网址
每次配置完都需要重启nginx
此时配置完其实反向代理就已经完成了,此时测试www.123.com是可以成功显示Tomcat页面的
反向代理实操2:
目的:
nginx监听端口为9001
访问127.0.0.1:9001/edu直接跳转到127.0.0.1:8080
访问127.0.0.1:9001/vod直接跳转到127.0.0.1:8081
实现:
首先需要准备两个Tomcat,其实只需要复制Tomcat就好了:Windows下安装两个Tomcat
然后在8080端口的Tomcat中进入webapps文件夹下新建一个edu,里面创建一个a.html文件,内容是8080!
8081端口的也如法炮制,内容8081!
再测试localhost:8080/edu/a.html或者localhost:8081/vod/a.html是可以出现Tomcat的。
接下来的事情就很简单了:配置
注意:这是个复制粘贴一个新的server段落,在配置中是不合原来的server在一起的,原来的server在一个http{}中的,这个则是在{}之外的
我们要监听得是9001,所以listen是9001,location配置的是正则表达式,意思是有edu出现的url就会被转发到以下这个地址
扩展
在刚才的location里面使用的是 ~ /edu/
这里的~是区分大小写的意思,如果url上出现的是 localhost:9001/EDU/a.html是会出错的
如果想要不区分大小写,怎么使用 ~*
并且如果location中出现了正则表达式,那么必须得有 ~ 或者 ~* 标识
负载均衡实例
目的
浏览器输入地址192.168.31.215/edu/a.html,将请求平均分配到8080,8081中去
实现
这个实例也是需要两台Tomcat的,不过我们已经准备过了就进行下一步
在8080端口中把edu文件复制到8081端口中的文件,因为需要负载均衡是需要有一样的文件的。然后修改html为8081
然后配置文件中的html{}中新建upstream myserver 再更改server中的配置。myserver是自定义名,可以随意取
测试的时候就是 8080和8081轮番展现。
nginx分配服务器策略
第一种:轮询(默认)
按时间顺序逐一分配到不同的后端服务器,也就是每个服务器轮一个请求
第二种:weight(权重)
权重越高被分配的客户端越多
第三种:ip_hash
每个请求按照ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session问题
第四种:fair(第三方)
按后端服务器的响应时间来分配请求,响应时间短的优先分配
动静分离
动静分离就是把静态资源和动态资源分离开来,请求静态资源和动态资源时通过nginx分离开来,让不同请求访问不同内容。
静态访问静态资源服务器,动态访问Tomcat
它能使我们的访问、请求更高效
动静分离从目前实现角度来讲大致分为两种:
一种是纯粹把静态文件独立成单独的域名,放在独立的服务器上,也是目前主流推崇的方案;
另外一种方法就是动态跟静态文件混合在一起发布,通过 nginx 来分开。
实例:
location配置静态资源,则以他们为访问标准,出现则进入方法
root /data/; ->表示请求静态资源文件的根据路是/data/;
例如:请求 xxxx:80/static/a.css 时,会以服务器的/data/static/a.css路径来找;
autoindex on; ->作用是列出目录中的内容;
例如:访问 xxxx:80/static/时会显示static目录的所有文件;
nginx高可用不知道怎么在Windows下实现,推个个人觉得好的博文给各位
也可以去楼顶的视频学习哦。
nginx实现原理
Nginx由一个主进程(master)和多个工作进程(worker)组成,主进程接收客户端请求,再转交给工作进程进行反向代理,从而用Tomcat完成我们的具体操作,也很好地利用多核心CPU的计算能力
我个人的理解是类似线程抢夺时间片
老师的例子是 master收到粮食(任务)后,发放粮食,有worker来争抢获得任务,然后进行反向代理
worker数最好跟服务器的cpu数相等;