1,简介
Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行。由俄罗斯的程序设计师Igor Sysoev所开发,供俄国大型的入口网站及搜索引擎Rambler(俄文:Рамблер)使用。其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好.中国大陆使用nginx网站用户有:新浪、网易、 腾讯等。
Nginx 是一个高性能的 Web 和反向代理服务器, 它具有有很多非常优越的特性:
作为 Web 服务器:相比 Apache,Nginx 使用更少的资源,支持更多的并发连接,体现更高的效率,这点使 Nginx 尤其受到虚拟主机提供商的欢迎。能够支持高达 50,000 个并发连接数的响应,感谢 Nginx 为我们选择了 epoll and kqueue 作为开发模型.
作为负载均衡服务器:Nginx 既可以在内部直接支持 Rails 和 PHP,也可以支持作为 HTTP代理服务器 对外进行服务。Nginx 用 C 编写, 不论是系统资源开销还是 CPU 使用效率都比 Perlbal 要好的多。
作为邮件代理服务器: Nginx 同时也是一个非常优秀的邮件代理服务器(最早开发这个产品的目的之一也是作为邮件代理服务器),Last.fm 描述了成功并且美妙的使用经验。
Nginx 安装非常的简单,配置文件 非常简洁(还能够支持perl语法),Bugs非常少的服务器: Nginx 启动特别容易,并且几乎可以做到7*24不间断运行,即使运行数个月也不需要重新启动。你还能够在 不间断服务的情况下进行软件版本的升级。
Nginx一般用户七层负载均衡,其吞吐量有一定的限制。为了提高整体的吞吐量,会在DNS和Nginx之间引入LVS(软件负载均衡器)、F5(硬负载均衡器) 可以做四层负载均衡,首先DNS解析到LVS(F5),让后LVS(F5)转发给Nginx,在有Nginx转发给真实的服务器
2,安装(windows)
解压之后,双击nginx.exe,看到一闪而过,浏览器输入127.0.0.1,出现以下界面代表安装成功
linux 安装:https://www.cnblogs.com/pickKnow/p/11224225.html
3,Ngnix 相关命令
验证配置是否正确: nginx -t
查看Nginx的版本号:nginx -V
启动Nginx:start nginx
快速停止或关闭Nginx:nginx -s stop
正常停止或关闭Nginx:nginx -s quit
配置文件修改重装载命令:nginx -s reload
4,Nginx应用场景
1、http服务器。Nginx是一个http服务可以独立提供http服务。可以做网页静态服务器。
2、虚拟主机。可以实现在一台服务器虚拟出多个网站,例如个人网站使用的虚拟机。
3、反向代理,负载均衡。当网站的访问量达到一定程度后,单台服务器不能满足用户的请求时,需要用多台服务器集群可以使用nginx做反向代理。并且多台服务器可以平均分担负载,不会应为某台服务器负载高宕机而某台服务器闲置的情况。
4、Nginx 中也可以配置安全管理、比如可以使用Nginx搭建API接口网关,对每个接口服务进行拦截。
静态资源:Ngnix 目录下的tml 目录存放了静态资源
虚拟主机配置:
1、基于域名的虚拟主机,通过域名来区分虚拟主机——应用:外部网站
2、基于端口的虚拟主机,通过端口来区分虚拟主机——应用:公司内部网站,外部网站的管理后台
3、基于ip的虚拟主机
基于域名的虚拟主机:本地模拟
step1:C:WindowsSystem32driversetc 下的host 文件,添加已下:
127.0.0.1 www.baiyue.com
127.0.0.1 bbs.baiyue.com
step2:修改nginx-1.15.0conf 文件夹下的nginx.conf 文件:
意味着:当客户端访问Nginx的时候,拦截所有的www.baiyue.com 的域名,监听的端口号为80,最终查找路径式views/baiyue/index.html
# 添加到虚拟主机www.baiyue.com
server {
listen 80;
server_name www.baiyue.com;
location / {
root views/baiyue;
index index.html;
}
}
# 添加到虚拟主机bbs.baiyue.com
server {
listen 80;
server_name bbs.baiyue.com;
location / {
root views/bbs;
index index.html;
}
}
访问:www.baiyue.com 和 bbs.baiyue.com
基于端口的虚拟主机:
step1:C:WindowsSystem32driversetc 下的host 文件,添加已下:
127.0.0.1 8080.baiyue.com
127.0.0.1 8081.baiyue.com
step2:修改nginx-1.15.0conf 文件夹下的nginx.conf 文件:
server {
listen 8080;
server_name 8080.baiyue.com;
location / {
root views/baiyue;
index index.html;
}
}
# 添加到虚拟主机www.tencent.com
server {
listen 8081;
server_name 8081.baiyue.com;
location / {
root views/bbs;
index index.html;
}
}
访问:www.baiyue.com:8080 和 www.baiyue.com:8081
反向代理:
反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器。
简单的说就是,Ngnix 作为反向代理服务器,接收来自客户端的请求,分发给内部服务器,接收到结果之后,再返回给客户端。
模拟:启动本地springboot 项目:
启动完成之后:可以访问http://127.0.0.1:8080/index,页面出现自己设计的返回页面
配置本地host:,将之前的注释掉,以免影响测试
127.0.0.1 www.baiyue.com
#127.0.0.1 bbs.baiyue.com
#127.0.0.1 8080.baiyue.com
#127.0.0.1 8081.baiyue.com
配置nginx.conf 反向代理:主要的配置proxy_pass 当监听到域名式www.baiyue.com 端口8080 时,分发到内部的实际服务器地址127.0.0.1:8080,就能返回到本地项目访问的页面了
server {
listen 8080;
server_name www.baiyue.com;
location / {
proxy_pass http://127.0.0.1:8080;
index index.html index.htm;
}
}
location的语法
已=开头表示精确匹配
如 A 中只匹配根目录结尾的请求,后面不能带任何字符串。
^~ 开头表示uri以某个常规字符串开头,不是正则匹配
~ 开头表示区分大小写的正则匹配;
~* 开头表示不区分大小写的正则匹配
/ 通用匹配, 如果没有其它匹配,任何请求都会匹配到
负载均衡:
load Balance,是指在高并发情况下,可以使用Nginx 实现分流,将请求分发到不同的服务器,减小单个服务器的压力。
在Nginx 配置负载均衡就是要配置Upstream server(上游服务器,就是Ngnix最后真实访问的服务器),因为会配置集群,所以所多台upstream server
配置多台upstrem server 的好处,或者说Nginx 负载均衡的好处:
1,实现分流,减少单个服务器压力,在高并发,大流量的情况下的高访问业务
2,集群之后,Nginx 实现故障转移,不让服务宕机,http 请求,若一台服务器发生故障,可以直接转移到下一台服务器,以便请求继续
模拟负载均衡,本地开启俩两个服务,端口为8080,8082,配置Nginx 负载均衡,让其分发到不到的服务上:
C:WindowsSystem32driversetc 下的host 文件 ,继续配置:127.0.0.1 www.baiyue.com
配置nginx.conf 负载均衡,主要式配置上游服务器,和proxy_pass
# 配置上游服务器
upstream backServer{
server 127.0.0.1:8080;
server 127.0.0.1:8082;
}
server {
listen 80;
server_name www.baiyue.com;
location / {
proxy_pass http://backServer;
index index.html index.htm;
}
}
这时候,访问http://www.baiyue.com/index 地址的时候,Nginx 会采用轮询 机制,轮流分发到不同的额服务器上,所以点击一次,显示的是8080 服务上的内容,再点击,显示的是8082 服务的内容
Nginx 负载均衡包含的算法:
1、轮询(默认)
每个请求按时间顺序逐一分配到不同的后端服务,如果后端某台服务器死机,自动剔除故障系统,使用户访问不受影响。
2、weight(轮询权值)
weight的值越大分配到的访问概率越高,主要用于后端每台服务器性能不均衡的情况下。或者仅仅为在主从的情况下设置不同的权值,达到合理有效的地利用主机资源。
权重越高,分发到这台服务器的机会(次数)就越高
# 配置上游服务器
upstream backServer{
server 127.0.0.1:8080 weight=1;
server 127.0.0.1:8082 weight=2;
}
server {
listen 80;
server_name www.baiyue.com;
location / {
proxy_pass http://backServer;
index index.html index.htm;
}
}
设置之后,当Nginx 接收到请求之后,分配给8082 所在的服务器要多一点
3、ip_hash
每个请求按访问IP的哈希结果分配,使来自同一个IP的访客固定访问一台后端服务器,并且可以有效解决动态网页存在的session共享问题。俗称IP绑定。
访问的客户端和上游服务器进行绑定,以后每次这个客户端发起的请求,都交给这台服务器来处理
# 配置上游服务器
upstream backServer{
server 127.0.0.1:8080;
server 127.0.0.1:8082;
ip_hash;
}
server {
listen 80;
server_name www.baiyue.com;
location / {
proxy_pass http://backServer;
index index.html index.htm;
}
}
配置ip_hash; 之后,本地测试每次访问都是访问同一个服务,因为已经进行了ip绑定
4、fair(第三方)
比 weight、ip_hash更加智能的负载均衡算法,fair算法可以根据页面大小和加载时间长短智能地进行负载均衡,也就是根据后端服务器的响应时间 来分配请求,响应时间短的优先分配。Nginx本身不支持fair,如果需要这种调度算法,则必须安装upstream_fair模块。
5、url_hash(第三方)
按访问的URL的哈希结果来分配请求,使每个URL定向到一台后端服务器,可以进一步提高后端缓存服务器的效率。Nginx本身不支持url_hash,如果需要这种调度算法,则必须安装Nginx的hash软件包。
5 配置Nginx 故障转移
模拟,当本地两台服务有一台挂了之后,会根据你设置的等待时候,在几秒之后分发给下一台服务器,如果不设置时间,他会一直等待
# 配置上游服务器
upstream backServer{
server 127.0.0.1:8080;
server 127.0.0.1:8082;
}
server {
listen 80;
server_name www.baiyue.com;
location / {
proxy_pass http://backServer;
###nginx与上游服务器(真实访问的服务器)超时时间 后端服务器连接的超时时间_发起握手等候响应超时时间
proxy_connect_timeout 3s;
###nginx发送给上游服务器(真实访问的服务器)超时时间
proxy_send_timeout 3s;
### nginx接受上游服务器(真实访问的服务器)超时时间
proxy_read_timeout 3s;
index index.html index.htm;
}
}