Nginx 应用 和 知识点

负责均衡里面常用的策略有:

  1. 轮询:不做任何的配置默认采用轮询的策略。就 1212121 这样 轮着来。

2.

Nginx 应用 和 知识点

后面什么都不写 只写一个端口号和ip地址 这样的就是采用的轮询的策略。

 

权重策略: 有的 服务器 性能高有的服务器性能低,这样子就可以按照权重比来让 服务器的压力平坦一下。 一般用在 服务器的性能不平均的情况。

 

Ip_hash策略: 这种的策略可以有效地防止session的丢失 。

将 ip地址 先做一下 hash运算,然后 %2取模,模为1的分到服务器1,模为2,分到服务器2中,只要是我们的ip地址不变化,那么我们的 这台机器每次访问时 nginx分配的服务器也是不变的。

Hash( ip地址 ) % 2 = 分的服务器的号码。

原理:IP地址不变,访问的 服务器 就不变。

为什么会产生session丢失的现象?

我们本来被分配到了 tomcat-1服务器上,第二次登录又被分配到了tocmat-2服务器上,但是tomcat-2上面没有我们登录之后生成的session。

Nginx 应用 和 知识点

 

Backup:中文意思是 : 备用的意思。

其他的 所有的 非备用机器 都 down掉了之后,太请求备用的机器。

也就是 当别的 备用机器 都down掉了,然后开启 备用的 虚拟主机。

*****Server的意思就是 虚拟主机的意思。

 

 

**************Backup 和 down 关键字 :

Nginx 应用 和 知识点

我们用down这个关键字来标注这个 虚拟主机 是down机状态,我们的 nginx就不会向我们的 这个 标记为 down机的虚拟主机 分配请求了,就算我们的 这个 虚拟主机是 可以正常工作的,但是我们人为 将这个 虚拟主机设置和标注为 down状态,我们的nginx也不会向我们的这个虚拟主机分配一个请求 。

 

假如这个机器上面的机器 也 down 机了,这样子 ngnx找不到可以使用的虚拟主机了,这样子就会 报错,提示服务不可用。

 

*********************我们什么时候使用 down 这样中关键字呢 ?

一般我们的项目上线的时候会使用到down。

假如我们的公司有 5台服务器,这时候 我们就选择一个 访问压力小的时间来进行上线操作。这时候我们就 修改我们的 nginx.conf配置文件,然后将我们这三台服务器修改为down状态,这样我们的 前台用户的请求就 没有办法分发到我们这三台服务器上了,这时候我们对这三台服务器进行上线活动,等三台都上线成功了,我们再将这三台服务器开启,然后将另外的两台服务器down掉,然后让 那三台服务器来接受我们的 前台用的请求,这两台服务器,down之后就开始上线活动,等上线完成,然后修改配置文件,然后让这5台服务器 同时接受和处理我们的前台用的 请求 。

 

******静态代理 :

 

我们一般将我们的 静态资源交给我们的 nginx来处理,因为我们的nginx更擅长处理我们的静态资源。 使用nginx处理静态资源 效率更高 速度更快 。

而且需要注意的是: 我们的 nginx 不擅长处理 jsp,而且也不支持jsp的处理,因为jsp上有动态资源也有静态资源,可以将jsp上面的静态资源叫给nginx来处理。 像 js ,html,css,images等静态资源可以都可以使用nginx来处理。

 

***静态资源 全部  都在 nginx下面进行部署。我们的tomcat下只部署jsp和动态的web程序。

用户真正看到一个页面,这个页面是有两个操作拼装而成的。

第一部分: 我们的页面上所有的静态资源是我们nginx来进行处理提供的。

第二部分:我们的页面上所有的动态资源或者说是从数据库中获取到的资源都是我们的tomcat进行处理和提供的。

第一部分 + 第二部分 == 用户看到的页面

 

我们访问静态资源 到时候 访问不走tomcat,而是去 nginx 的某个目录下去寻找 我们需要的静态资源。

Nginx 应用 和 知识点

 

第一个点. 表示任意字符。

第一个 * 表示一个或多个字符。

这两个加在一起 表示的意思是: 一个或多个任意字符。

~ 波浪线表示的是 正则比较。

$ 表示正则表达式的结尾 。

 

上面的的配置就是 匹配静态资源的后缀,然后根据静态资源的后缀,然后去nginx下的/opt/static 目录下 进行对比查找。

 

我们浏览器访问我们的存放在nginx中的静态资源要怎么进行访问呢?

Ip地址 + port端口号 = root

Http://192.168.242.128/myweb/images/xxx.jpg

这个请求的意思是:去ip地址下面的80端口中的myweb项目下的images包中获取xxx.jsp

我们在idea中开发的时候,我们的静态资源和动态资源都是由我们的tomcat来进行处理的,但是上线的时候我们的 静态资源是交给我们的 nginx进行处理,我们的动态资源是交给我们的 tomcat来处理的,这时候就出现一个问题了,我们从项目中写好的 静态资源的访问路径,如果将静态资源转移到我们的 nginx中之后我们之前在idea中写的 静态资源访问路径就不能访问了么? 所以我们为了解决这种情况的发生,我们才引用了 ip地址+port端口= root 。 然后 我们在 从我们的 nginx下面创建我们缺少的包,然后组成我们 需要的 之前在idea中写的 静态资源访问路径。

 

我们的 nginx在匹配我们的 路径请求还有目录名的时候,image 和 images是可以匹配成功的,我们请求中由image,但是包名为images,这样nginx也可以匹配成功的。

 

我们使用 nginx 实现 动静分离:负载均衡 和 静态代理 进行结合 就是 动静分离。

我们的  使用 负载均衡 进行 对 tomcat的跳转 和 请求的分发,我们的静态代理就是 将我们的静态资源从我们的 tomcat 中 抽离出来,放在我们的 nginx中,然后让我们的nginx来管理我们的 静态资源。

Nginx 应用 和 知识点

Nginx 应用 和 知识点

 

我们 (1)这nginx 专门是用来 负载均衡的,它只有这一个功能。

 

用户一个请求 到达我们的 (1)nginx,然后我们的(1)通过负载均衡 访问我们的 (2)tomcat集群中的一个tomcat来获取动态资源,然后(1)同时也通过负载均衡访问(3)nginx集群中的一个nginx,然后获取到静态资源,也就是 (3)这个nginx是专门来做静态代理的。

最后   静态资源 + 动态资源 ===》 用户需要的 。

 

 

  1. 的nginx配置文件中只有 负载均衡,没有静态代理的配置。
  2. 的nginx配置文件中只有 静态代理,没有负载均衡的配置。

 

 

需要注意的是: 

我们启动nginx使用的 启动配置文件的方式。

所以 上面 的动静分离案例,我们需要使用启动配置文件的方式 启动 三个 nginx,也就是我们需要使用三个配置文件来启动三个nginx。

还需要主义的是: 这三个nginx 全部都是 虚拟主机,注意了: nginx和tomcat不一样,如果需要三个tomcat我们就必须解压三份tomcat,而且我们tomcat启动用的不是配置文件启动的方式 。

如果我们 需要三个nginx,那么我们就直接 创建三个nginx.conf配置文件,然后从配置文件中修改 nginx的端口号,这三个配置文件中的 server节点就代表一个 虚拟主机 ,也就是说 一个配置文件中 有一个 server节点,这一个节点就代表一个 虚拟主机 ,这一个虚拟主机就代表一个 ngnix。我们不需要像tomcat那样解压三份安装包。我们的这三个nginx都是虚拟主机。

 

还需要明确的一点是:

我们静态资源不是放在我们的nginx里面的,我们是让我们的 nginx管理我们的 静态资源,就好像我们将静态资源放进了我们的nginx中一样,而且我们的nginx本身就是一个虚拟主机,没有什么实体而言,我们只是用这个虚拟主机 帮我们我们管理 某一个文件夹目录下面的 静态文件,注意了:nginx是帮助 我们 对 某个专门用来存放静态资源的文件目录 进行管理的,管理这个文件夹目录下面的静态资源。

 

 

 虚拟主机: 

虚拟主机就是 将一个 物理服务器 划分成 多个 虚拟的服务器 。这样我们的一台物理服务器就可以当作多个服务器来使用,这样就可以配置和部署多个网站 。

*********我们主要使用nginx提供的【虚拟主机】这个功能 来 部署多个网站。*********

  1. 虚拟主机这个功能让我们不用安装多个nginx,只需要配置相应个数的server节点,每一个节点 都是一个 虚拟主机。
  2. 如果想配置多个虚拟主机,那么我们就配置多个server节点就行了。
  3. 每一个server节点就是一个虚拟主机。

为什么一个server等于一个虚拟主机?

Nginx 应用 和 知识点

我们可以在每一个server中配置一个端口,也就是从listen中配置端口号。

我们也可以从server_name配置我们需要的域名.

我们配置完成端口之后,我们可以从端口的下面:部署我们的网站。

也就是说 一个server可以为我们开一个端口,我们可以从端口的里面部署我们的一个网站。

 

我们在一个nginx中 配置多个 server节点,然后我们从节点中 配置端口,然后从端口里面部署我们的 网站 。所以就有了一个nginx部署多个网站 。

 

Nginx 应用 和 知识点

Nginx 应用 和 知识点

第一个 转发是:接收到静态资源的请求后,然后转发到 静态资源的负载均衡。

第二个 转发是:接收到动态资源的请求后,然后转发到 动态资源的负载均衡。

总结: 转发 一般都是 转发 到 【负载均衡】 操作哪里。

 

用域名来区分两个不同的 虚拟主机 :因为他们最后跳转的位置不同。

 

Nginx 应用 和 知识点

 

城市站点网站项目部署:

每一个城市对应一个 城市网站,我们将这些网站部署在 不同的tomcat上面。

然后我们的 nginx上面生成对应tomcat个数的【虚拟主机】,而且我们的虚拟主机使用 域名作为区分的 ,也就是说,每一个虚拟主机对应一个 城市的网站请求,这个虚拟主机对应的 域名 需要和 网站中的请求 域名相同,然后 根据域名进行 负载均衡分法。

如下图:

Nginx 应用 和 知识点

Nginx 应用 和 知识点

 

***我们为什么要创建很多的虚拟主机,然后从这些虚拟主机里面部署页面呢?

一个虚拟主机就是一个server节点,我们可以在这个server节点中规定 我们部署页面所在的 端口号 和 域名。

 

 

我们在配置完 我们的域名之后 需要在 hosts中 注册一下。因为我们系统会先去我们的 hosts文件中寻找我们的域名,找到我们域名然后就能知道与域名对应的ip地址,因为hosts文件中 是以 键值对的方法时存放我们的 ip 和域名的: ip地址  域名 。

如果在hosts文件中找到了我们的域名,那么就优先使用hosts文件中找到的域名对应的ip地址,如果没有找到,那么我们的系统就会去 DNS 中去寻找我们的域名,然后找到与域名对应的 ip地址,这里的dns就是我们的国家域名服务器,如果我们的国家域名服务器都找不到这个域名的话,那么就会去美国的域名服务器中找,也就是去根域名那边去找 。

 

Hosts文件的位置:C:\Windows\System32\drivers\etc

Nginx 应用 和 知识点

 

Nginx 应用 和 知识点

对应的ip地址是我们linux的IP地址,所以就会通过我们的域名,从hosts文件中找到了linux的ip地址,然后就去了linux中去找对应的 网页。

Nginx 应用 和 知识点

还有一种一个nginx部署多个站点的方法:

(1)nginx.conf是一个主文件。

(2)我们创建一个 nginx子配置文件,然后我们在子配置文件中写我们圈2 里面的配置,也就是在子配置文件中写 三个站点对应的虚拟主机也就是对应的server节点的配置 。

然后我们再将我们的 子配置文件 导入到 我们主配置文件当中,所谓的导入也就是 在我们主配置文件(nginx.conf)中,加入到”http {}”部分的末尾,与其他server并列。

导入的语句为:include /usr/local/nginx/conf/vhost/vhost.conf; 

Nginx 应用 和 知识点

这种方式 是 我们实际开发中 比较常用的,因为结构清晰,主文件中没有那么多的 server节点来配置虚拟主机。

我们 在 /ust/local/nginx/conf 目录下使用(mkdir vhost)创建一个 vhost目录,然后再使用(vim vhost.conf)创建一个子配置文件。然后将我们server节点写入到子配置文件中。后再vim nginx.conf文件的http节点的模为加上include /usr/local/nginx/conf/vhost/vhost.conf; 这句话,就将我们的 子配置文件中 配置导入到 总配置文件中了。

 

总结:

Nginx 可以为我们提供的 服务功能有:

 

  1. 动静分离:
        1. 我们将 静态资源 专门放在 linux的一个 目录下。然后让我们的 nginx 来进行管理。我们没有将 静态资源放在 nginx 中,原因:我们只是让nginx帮我们管理静态资源,而且我们也没办法将静态资源放进nginx中 。
        2. 我们的 动态资源 就全权 由我们的tomcat来进行管理。
        3. Nginx 比较擅长 处理 静态资源,tomcat 擅长处理 动态资源 ,这样就可以各司其职,提高效率 。
        4. 我们在 idea 上 开发项目的时候 我们的 静态资源和动态资源都是让我们的 tomcat来统一进行管理的,而且我们将 项目部署到我们的 linux上之后,我们的 静态资源虽然不由我们的 tomcat管理了,但是我们的项目中的静态资源 也不能删除,只不过 页面中的 静态资源的 请求 被我们的 nginx 拦截了,拦截之后 就去我们的 nginx管理的静态资源目录下 获取 静态资源了,只是不去我们的 tomcat部署的项目中去获取资源了而已。但是我们的 tomcat部署的项目中也是有 静态资源的。我们只是不通过tomcat来进行获取了。

 

****实际开发中 我们 动静分离 和 负载均衡 的 结合使用:

Nginx 应用 和 知识点

 

 

  1. 虚拟主机:

    (1)我们 只需要 在我们的 linux系统上 安装一次nginx,然后使用虚拟主机的 理论,创建出 多台 虚拟主机 ,这样我们就可以 让一台 物理主机 当做 多台 来使用,这样我们就可以在这些 虚拟主机上 部署我们的 网站 。

(2)创建 多态 虚拟主机 不需要 安装 多个nginx,我们有两种方法:

1)复制 多分 nginx.conf配置文件,但是配置文件的名字不能相同,然后修改 配置文件中的配置,如端口号等等,然后启动的时候,因为我们是 使用 配置文件进行启动的,所以有多少个虚拟主机,就要启动多少份配置文件。

2)一个 虚拟主机 对应一个  server节点,我们 可以在 同一个nginx.conf配置文件中  创建 多个 server节点,然后 一个节点就代表一个 虚拟主机,这样子就可以实现了 一份配置文件 创建多个虚拟主机,启动nginx的时候,我们只需要 启动 一份总的配置文件就可以了。

一、 我们在一份配置文件中 写 多个 server节点 ,这些节点 是靠什么区分的呢 ?

1. 根据端口号区分:我们在每一个server节点中设置不同的 端口号,这样域名 +端口号 就 会 产生不同的路径,所以说我们可以直接是用端口号来区分 虚拟主机。但是我们 的nginx默认端口号为80,我们一般不是用 端口号区分虚拟主机。

2.我们一般也是最常用的是 通过 域名  来区分我们的 虚拟主机,只要这些 server配置的 域名不相同,那么最后 域名 + 端口号 产生的路径也是不一样的,所以我们 常常使用 域名来 区分 虚拟主机,然后端口号都设置为 默认的 80 。

  二、我们 在 同一个 nginx.conf 下 创建 多个 虚拟主机 有 方法 和 格式 :

1.直接 在 nginx.conf文件中 写 所有的 server节点。

  这种方式 不需要 引入外部子配置文件,但是让我们的nginx.conf总配置文件内容太过于混乱,而且我们 在实际开发中 虚拟主机和虚拟主机之间的功能是不一样的,总配置文件对应的虚拟主机 主要是用来做 负载均衡的,其他的子虚拟主机是用来做 静态代理的。

2. 我们将 所有的  子 虚拟主机 的 server节点 的配置 写在一个 子配置文件中,然后在 总配置文件 的http{}模块 在 最后 使用include 关键字 来引入 我们的 子配置文件,这样子 我们总配置文件中的 server对应的虚拟主机 来做 负载均衡,子配置文件中的 server对应的虚拟主机 用来做 静态代理。 我们实际开发中 经常使用这种方法,因为层次清晰,不混乱。