1. 主要应用的场景
    • 静态网站
    • 负载均衡
    • 静态代理
    • 动静分离
    • 虚拟主机
  2. 如何配置静态网站?
  1. 1. 可以自己先写一个静态的界面,或者网上下载一个ace admin 这么一个静态网站的代码下来也是可以的
  2. 2. 配置nginx conf 中的 nginx.conf 文件中的 server 配置
  3. 配置静态网站 主要就是location 里面要找到对应的index.html 启动界面就可以了
  4. # location 是用于匹配路由的,这里的意思就是匹配 / 的路由, 因为你访问localhost:8080 的时候就会默认访问带 / 的路由
  5. # localhost:8080 就是 localhost:8080/ 的缩写显示
  6. # 这里就是匹配到 / 路由 然后做一个界面的展示 跟前端路的意思差不多
  7. location / {
  8. # 这里的root 就相当于 ip + port localhost:8080 = root = ip + port
  9. root E:\ace; # root 是配置服务器的默认网站根目录位置,默认为nginx安装主目录下的html目录, 实际中我们要定位到项目的html目录中 例如打包好的dist目录中
  10. index index.html index.htm; # 配置首页文件的名称 可省略 会自动去寻找文件夹下的index.html
  11. }
  1. 如何配置负载均衡?```javascript 主要就是走http协议访问的负载均衡

    1. 什么是负载均衡??? 在网站创立的初期,我们一般都使用单台机器对外提供集中式服务; 但是随着业务量的增大,我们一台服务器不够用,这个时候,我们就会把多台服务器组成一个集群对外提供服务; 但是,我们网站对外提供的访问入口通常只有一个,比如www.xiangdeyizhang.xyz 那么当用户在浏览器输入上面的这个网址的时候,如何将用户的请求分发到集群中不同的机器上呢??,这就是负载均衡需要做的事情 负载均衡通常是指将请求“均匀”分摊到集群的多个服务器节点上执行,这里的均匀是指在一个比较大的统计范围内基本是均匀的,并不是完全均匀。

    举例: 餐馆,原来只有一个厨师,没有服务员,当我们顾客去饭店点餐时,直接给厨师说就好了。 但是随着,客户的越来越多,一个厨师忙不过来了,就多增加了几个厨师,但是每个厨师的工作量又可能多少不均匀,有的厨师忙一天,有的厨师都没活,而且客户也不需要每个厨师都打招呼,进行访问。 这个时候,我们就加入了一个服务员,从中进行调配,尽量使得每个厨师都有活干,也尽量使每个人的活的多少都是差不多的。 这个服务员,也就是我们要学的nginx的负载均衡,客户不用直接面对那么多厨师,直接面对服务员就可以了

  1. 负载均衡的实现方式??

    硬件负载均衡:

    1. F5,深信服,Array
    2. 优点: 有厂商专业的技术服务团队提供支持,性能稳定;
    3. 缺点: 价格昂贵,对于较小的网络应用成本太高;

    软件负载均衡:

    1. nginx, LVS, HAProxy
    2. 优点: 免费开源,成本低廉
  2. 如何配置??????

    两步即可:

    在conf 文件夹下 的ngxin.conf 文件中 的 http 配置中加入如下配置 不是在server下

    可以配置在 gzip 后面 server 之前

    第一步

    有几个服务器就可以加几个 server ip+port 权重; 这种配置

    upstream 名称 {

    1. server ip+port 权重;
    2. server ip+port 权重;

    }

    一般 名称可以随便起,只要是字符串就可以,一般我们使用的时候都是配成 域名 例如www.xiang.xyz

    权重 怎么配置 weight=3; 这种方式进行配置。 用于后端服务器性能不均的情况,访问比率约等于权重之比,权重越大,访问的机会就越多

    upstream 是配置nginx 与后端服务器负载均衡非常重要的模块,并且它还能对后端的服务器的健康状态进行检查,若后端服务器的一台发生故障,则前端的请求不会转发到该故障的机器上

    配置负载均衡 权重策略

    upstream www.xiangdeyizhang.xyz {

    1. server 192.168.1.137:9555 weight=3;
    2. server 192.168.1.137:9554 weight=1;
    3. server 192.168.1.137:9553 weight=2;

    }

    第二步:

    做一个代理转发。 和静态界面那个一样,不过我们需要是做一个转发,将地址转发到要访问的界面

    这个是要配置到server 下

    location / {

    1. # proxy_paxx 后面跟的地址要和 upstream 后面跟的名称要是一样的
    2. # 例如: upstream abcde 那么 proxy_pass http://abcde
    3. proxy_pass http://www.xiangdeyizhang.com

    }

  1. 常用的负载均衡策略

    轮询(默认): # 不做任何配置,默认就是轮询策略。每个请求轮流分配到不同到的后端服务器,如果后端服务器down掉, 将自动剔除。 upstream www.xiangdeyizhang.xyz {

    1. server 192.168.1.137:9555;
    2. server 192.168.1.137:9554;
    3. server 192.168.1.137:9553;

    }

    权重:# weight upstream www.xiangdeyizhang.xyz {

    1. server 192.168.1.137:9555 weight=3;
    2. server 192.168.1.137:9554 weight=1;
    3. server 192.168.1.137:9553 weight=2;

    }

    ip_hash: # ip绑定策略, 每个请求安访问ip的hash值分配, 这样每个访问客户端会固定访问一个后端服务器, 可以解决会话session丢失的问题。

    也就是说,固定ip 访问固定的后端服务器

    hash(ip) % 服务器个数 ———- 取余

    用余数来判断,这个ip 固定访问那个服务器

    1. upstream www.xiangdeyizhang.xyz {
    2. ip_hash;
    3. server 192.168.1.137:9555;
    4. server 192.168.1.137:9554;
    5. server 192.168.1.137:9553;

    }

  1. 最少连接:# least_conn; web请求会被转发到连接数最少的服务器上
  2. upstream www.xiangdeyizhang.xyz {
  3. least_conn;
  4. server 192.168.1.137:9555;
  5. server 192.168.1.137:9554;
  6. server 192.168.1.137:9553;
  7. }
  1. 负载均衡的其他几个配置 ①:# backup 备份, 只有当其他机器都关闭的时候,才会访问这个备份的服务器 upstream www.xiangdeyizhang.xyz {

    1. server 192.168.1.137:9555;
    2. server 192.168.1.137:9554;
    3. server 192.168.1.137:9553 backup;

    }

    ②:# down 表示关闭,当前的服务器是down状态,不参与负载均衡 这个不是说是这个机器坏掉了,只是表示这个服务器是down状态,也是正常运行的状态,只是就不参与负载均衡了 upstream www.xiangdeyizhang.xyz {

    1. server 192.168.1.137:9555;
    2. server 192.168.1.137:9554;
    3. server 192.168.1.137:9553 down;

    } ```

  2. 静态代理```javascript

  3. 什么是静态处理?? 把所有静态资源的访问,原先是去访问服务器,现在改为访问nginx, 因为nginx更擅长于静态资源的处理,性能更好,效率更高 所以在实际项目中,我们把静态资源,比如图片,css,html,js 等交给nginx处理,而不是交由服务器处理

    就是将静态资源放置到nginx 下,

  4. 如何实现静态代理??

    通过在nginx.conf文件 server下进行配置即可

    方式一: # 配置 location 基于文件的后缀进行匹配

    location ~ .*.(js|css|html|gif|jpg|png|jpeg|rar|zip|txt|mid|doc|docx|pdf)$ {

    1. root E:\static

    }

    ~ 代表 正则匹配,即~后面的内容可以使正则表达式

    . 第一个 . 表示任意字符

    * 表示一个或者多个字符

    . 表示转义字符,是后面这个点的转义字符

    | 表示或者

    $ 表示结尾

    整体表示就 任意字符开头, 以后面后缀结尾的文件,都去下面的这个地址进行获取和访问

  1. 方式二: # 还是location 但是这次是基于访问路由进行的匹配
  2. # xxx/ccs xxx/js xxx/img xxx/images
  3. location ~ .*/(css|js|img|images) {
  4. root E:\public
  5. }
  1. 5. 动静分离(重点)```javascript
  2. 1. 什么是动静分离???
  3. # 就是负载均衡 和 静态代理 结合在一起
  4. 动态资源: 如jsp, 接口数据 由服务器或其他web服务器完成
  5. 静态资源: 如图片, js, css, 前端代码 由nginx服务器完成
  6. 2. 如何进行动静分离配置??
  7. # 我们将静态文件放置到nginx上, 将nginx.conf 文件复制多份,起不同名字 所以我们可以配置多个静态资源服务器,然后在配置一个负载均衡服务器
  8. - nginx.conf 负载均衡
  9. - nginx81.conf 静态资源
  10. - nginx82.conf 静态资源
  11. # 即: 后端服务器 + nginx服务器 (多个静态服务器 和 一个负载均衡)
  12. # 启动的时候 就要根据不同的.conf 文件 单独去启动
  13. 3. 如何配置负载均衡???
  14. 动态资源的负载均衡
  15. # 配置负载均衡 权重策略
  16. upstream www.xiangdeyizhang.xyz {
  17. server 192.168.1.137:9555 weight=3;
  18. server 192.168.1.137:9554 weight=1;
  19. server 192.168.1.137:9553 weight=2;
  20. }
  21. 静态资源的负载均衡
  22. # 配置负载均衡
  23. upstream static {
  24. server 192.168.1.137:81 weight=3;
  25. server 192.168.1.137:82 weight=1;
  26. }
  27. ### 配置路由拦截
  28. 动态负载均衡路由拦截
  29. location / {
  30. proxy_pass http://www.xiangdeyizhang.xyz;
  31. }
  32. 静态负载均衡路由拦截
  33. # 配置静态代理 匹配路由是否包含某个片段 xxx/ccs xxx/js xxx/img xxx/images
  34. location ~ .*/(css|js|img|images) {
  35. proxy_pass http://static;
  36. }
  1. 虚拟主机 (用的不是特别多)```javascript
  2. 什么是虚拟主机??

    就是把一台物理服务器划分成多个 “虚拟” 的服务器, 这样一台物理服务器就可以当做多个服务器来使用,从而可以配置多个网站

    nginx 提供虚拟主机的功能,就是为了让我们不需要安装多个nginx, 就可以运行多个网站

    nginx下 nginx.conf 中一个 server标签 就是一个虚拟主机

    其实就是每个server都有一个listen 端口,来区分不同的网站, 还有就是server_name 域名不同

  3. 如何配置虚拟主机?? 方式一: # 基于域名的虚拟主机 端口号相同,域名不同 server {

    1. listen 80; # 配置监听端口号 范围为 0 - 65535
    2. server_name www.gogle.com; # 配置服务名 localhost 表示任何ip都是可以进行访问的

    }

    server {

    1. listen 80; # 配置监听端口号 范围为 0 - 65535
    2. server_name www.baidu.com; # 配置服务名 localhost 表示任何ip都是可以进行访问的

    }

    方式二: # 基于端口的虚拟主机 端口号不同,域名相同 server {

    1. listen 90; # 配置监听端口号 范围为 0 - 65535
    2. server_name www.baidu.com; # 配置服务名 localhost 表示任何ip都是可以进行访问的

    }

    server {

    1. listen 80; # 配置监听端口号 范围为 0 - 65535
    2. server_name www.baidu.com; # 配置服务名 localhost 表示任何ip都是可以进行访问的

    }

    方式三: # 端口号 和 域名 都不一样

    server {

    1. listen 90; # 配置监听端口号 范围为 0 - 65535
    2. server_name www.gogle.com; # 配置服务名 localhost 表示任何ip都是可以进行访问的

    }

    server {

    1. listen 80; # 配置监听端口号 范围为 0 - 65535
    2. server_name www.baidu.com; # 配置服务名 localhost 表示任何ip都是可以进行访问的

    } ```