1、Nginx简介

1.1 概述

Nginx (“engine x”) 是一个高性能的 HTTP 和 反向代理服务器,特点是占有内存少,并发能力强,能经受高负载的考验,有报告表明能支持高达 50,000 个并发连接数 。

1.2 相关概念

(1)反向代理

服务器的代理,相对于web用户来说,就是反向代理。

(2)均衡负载

      很多人同时访问服务器同一资源的时候,为了保证访问质量。开发者首先会将服务部署在多个服务器上,然后按照某种规则(即负载均衡的方式)将压力分摊到不同服务器上。

(3)动静分离

为了加快网站的解析速度,可以把 动态页面 和 静态页面 由不同的服务器来解析,加快解析速度。降低原来单个服务器的压力。

2、Nginx安装(了解即可)

注意:本节内容了解下即可,实际项目都是用Docker来安装,Docker有办法很轻松的安装,比本节的方法简单几十倍。

2.1 准备好安装软件

(1)进入nginx官网,下载好软件

http://nginx.org/

注意:就像打游戏需要装一些环境一样,nginx也需要准备好以下3个插件,才能正常运行。最终准备好以下4个东西(包含nginx本体)

pcre-8.37.tar.gz
openssl-1.0.1t.tar.gz
zlib-1.2.8.tar.gz
nginx-1.11.1.tar.gz

以上素材记得名字就好。linux有办法直接联网下载。

2.2 安装nginx及其插件

(1)安装pcre-8.37  (采用wget方式获取软件) https://www.cnblogs.com/ftl1012/p/9265699.html

用法: wget [选项]... [URL]...

step1:下载pcre

wget http://downloads.sourceforge.net/project/pcre/pcre/8.37/pcre-8.37.tar.gz

step2:解压压缩文件

 tar –xvf pcre-8.37.tar.gz

step3:安装文件(这里是和yum、rpm安装不一样的安装方式)

预备知识:linux命令 ./configure、make、make install https://www.cnblogs.com/tinywan/p/7230039.html

① 进入 pcre-8.37 执行   ./configure 命令(生成 Makefile,为下一步的编译做准备

② 编译和安装

make && make install

step4 查看是否安装成功

pcre-config --version

(2)安装 openssl 、zlib 、 gcc 依赖 (yum方式安装 推荐)

yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl-devel

(3)安装nginx(已经从官网下载好了,只能用传统办法安装了)

step1:解压安装包nginx-1.12.2.tar.gz

tar -xvf nginx-1.12.2.tar.gz

step2:进入解压好的目录执行   ./configure 命令(生成 Makefile,为下一步的编译做准备

Step3:编译和安装

make && make install

2.3 启动Nginx

进入目录 /usr/local/nginx/sbin/nginx,执行【要换 root 用户下执行】

./nginx

浏览器访问:http://192.168.77.130:80

特别注意:

我们访问nginx可能会由于linux防火墙的原因导致访问不成功。

补充:Linux Centos7防火墙设置方法

查看开放的端口号firewall-cmd --list-all设置开放的端口号firewall-cmd --add-service=http –permanentfirewall-cmd --add-port=80/tcp --permanent重启防火墙firewall-cmd –reload

3、Nginx常用命令和配置文件

3.1 Nginx常用命令

一定要进入nginx目录后,才能使用Nginx命令。否则命令无效

(1)查看nginx版本号

./nginx -v

(2)启动 nginx

./nginx

(3)停止nginx

./nginx  -s  stop

(4)重新加载nginx

./nginx -s reload

3.2 nginx配置文件(nginx.conf)  重点!!

对 nginx 的使用基本上都是对此配置文件进行相应的修改!

(1)配置文件位置

/usr/local/nginx/conf/nginx.conf

特别说明:配置文件那么多内容,全部写在nginx.conf里面,可读性会很差。因此配置文件的所在目录,除了有nginx.conf ,还会有一个conf.d目录,可以根据需要将不同server的配置文件单独写在conf.d目录下

(2)配置文件结构

(3)配置文件的内容

配置文件中有很多#, 开头的表示注释内容,我们去掉所有以 # 开头的段落,精简之后的内容如下:

第一部分:全局块

从配置文件开始到 events 块之间的内容,主要会设置一些影响 nginx 服务器整体运行的配置指令,主要包括配置:

① 运行 Nginx 服务器的用户(组)

② 允许生成的 worker process 数 (worker的数量,一般和cpu核心数相同)

③ 进程 PID 存放路径、日志存放路径和类型以及配置文件的引入等。

exp:比如上面第一行配置的:worker_processes  1;

这是 Nginx 服务器并发处理服务的关键配置,配置worker的数量,worker_processes 值越大,可以支持的并发处理量也越多,但是会受到硬件、软件等设备的制约,一般和cpu核心数相同 。

第二部分:events 块

events 块涉及的指令主要影响 Nginx 服务器与用户的网络连接,常用的设置包括是否开启对多 work process 下的网络连接进行序列化,是否允许同时接收多个网络连接,选取哪种事件驱动模型来处理连接请求,每个 work process 可以同时支持的最大连接数等。

exp:比如上面的配置:

worker_connections    1024;

上述例子就表示每个 work process 支持的最大连接数为 1024. 这部分的配置对 Nginx 的性能影响较大,在实际中应该灵活配置。

第三部分:http 块(基本就是配这个了)

这算是 Nginx 服务器配置中最频繁的部分,代理、缓存和日志定义等绝大多数功能和第三方模块的配置都在这里。

需要注意的是:http 块也可以包括 http 全局块、server 块。

(1)http 全局块

http 全局块配置的指令包括文件引入、MIME-TYPE 定义、日志自定义、连接超时时间、单链接请求数上限等。

(2)server 块

这块和虚拟主机有密切关系,虚拟主机从用户角度看,和一台独立的硬件主机是完全一样的,该技术的产生是为了节省互联网服务器硬件成本。每个 http 块可以包括多个 server 块,而每个 server 块就相当于一个虚拟主机。而每个 server 块也分为全局 server 块,以及可以同时包含多个 locaton 块。

(2.1)全局 server 块

最常见的配置是本虚拟机主机的监听配置和本虚拟主机的名称或 IP 配置。

(2.2)location 块

一个 server 块可以配置多个 location 块。

这块的主要作用是基于 Nginx 服务器接收到的请求字符串(例如 server_name/uri-string),对虚拟主机名称(也可以是 IP 别名)之外的字符串(例如 前面的 /uri-string)进行匹配,对特定的请求进行处理。地址定向、数据缓存和应答控制等功能,还有许多第三方模块的配置也在这里进行。

4、nginx应用—反向代理

4.1 反向代理实例1一需求:(基本功)

打开浏览器,在浏览器地址栏输入地址 www.123.com,跳转到 liunx 系统 tomcat 主页面中 。

4.1.1 访问过程分析:

4.1.2 域名地址配置

由于互联网上根本没有注册www.123.com,域名服务器是解析不了这个域名的。好在第一步是去本机的hosts文件里面找域名对应的ip,找不到再去问域名服务器。因此,我们只需修改hosts文件,让hosts文件中的ip与该域名对应即可。

(1)在 windows 系统的 host 文件进行域名和 ip 对应关系的配置  (windows系统指准备去访问web的windows主机)

末尾添加,将 www.123.com 映射到 192.168.17.129 (nginx所在的linux系统服务器的ip地址)

192.168.17.129   www.123.com

(2)在nginx进行请求转发的配置

进入配置文件nginx.conf

配置 HTTP块中的server 和 location

说明:80端口是默认监听端口。如果web浏览器的网址只写域名(ip地址),不写端口号。就自动认为端口号是80

(3)测试

切换到 /usr/local/nginx/sbin/重新启动 nginx

./nginx -s reload

访问:www.123.com,

如上配置,我们监听 80 端口,访问域名为 www.123.com,不加端口号时默认为 80 端口,故访问该域名时会跳转到 127.0.0.1:8080 路径上。测试成功!

4.2 反向代理实例2—需求 (进阶)

用windows上的web浏览器:

  • 访问 http://192.168.17.129:9001/edu/ 直接跳转到 127.0.0.1:8080
  • 访问 http:// 192.168.17.129:9001/vod/ 直接跳转到 127.0.0.1:8081

分析:

使用 nginx 反向代理,根据访问的路径跳转到不同端口的服务中,nginx 监听端口为 9001

4.2.1 配置Tomcat  

(1)将两个Tomcat的端口号分别修改为8080 和 8081

提示:通过Tomcat配置文件server.xml    /Tomcat8081/apache-tomcat-7.0.106/conf目录下

vim server.xml

(2)在两个tomcat内部分别创建 edu 和 vod 文件夹,文件夹里面随便写一个测试页面(一句话代码即可)

(2.1)在/Tomcat8080/apache-tomcat-7.0.106/webapps中,新建 edu 文件夹,并在该文件夹下新建文件 a.html

内容如下:

<h1>8080</h1>

(2.2)在/Tomcat8081/apache-tomcat-7.0.106/webapps中,新建 vod 文件夹,并在该文件夹下新建文件 a.html,

内容如下:

<h1>8081</h1>

(3)nginx配置(重点)

进入配置文件nginx.conf,依然配置HTTP的server和location

三处改变:监听端口(改9001) + nginx地址(改192.168.17.129) + 转发地址(改127.0.0.1:8080和127.0.0.1:8081)

(4)最终测试

重启 nginx ,

./nginx -s reload

特别注意:linux系统防火墙问题,如果访问不到,记得检查对外访问的端口号9001 8080 8081

扩展:location指令说明

该指令用于匹配 URL。

语法如下:

(1)= :用于不含正则表达式的 uri 前,要求请求字符串与 uri 严格匹配,如果匹配成功,就停止继续向下搜索并立即处理该请求。

(2)~:用于表示 uri 包含正则表达式,并且区分大小写。

(3)~*:用于表示 uri 包含正则表达式,并且不区分大小写。

(4)^~:用于不含正则表达式的 uri 前,要求 Nginx 服务器找到标识 uri 和请求字符串匹配度最高的 location 后,立即使用此 location 处理请求,而不再使用 location 块中的正则 uri 和请求字符串做匹配。

5、Nginx应用—负载均衡

5.1 需求:

浏览器地址栏输入地址 http://192.168.77.130/edu/a.html,Nginx将访问请求,平均到 8080和8081 端口中的两个Tomcat服务器中,实现负载均衡效果

5.2 准备工作:

(1)准备两台 tomcat 服务器,一台端口号为 8080,一台端口号为 8081

(2)在两台 tomcat 里面 webapps 目录中,创建名称是 edu 文件夹,在 edu 文件夹中创建页面 a.html,用于测试

5.3 在 nginx 的配置文件中进行负载均衡的配置(重点)

进入nginx.conf

(1)在HTTP块的全局位置添加绿色部分:upstream.....

说明:myserver是自己取的名字,给后面的location用

(2)server块和它下面的location块中按下图配置

需求没写端口,就用默认的80。myserver已经在HTTP全局中的upstream那里自己取的名字,代表upstream下的多个server。

(3)重启Nginx

./nginx -s reload

(5)测试:

http://192.168.77.130/edu/a.html

访问结果在 8081 和 8080 之间切换 。

5.4 负载均衡策略

(1)轮询(默认)

upstream myserver{server 192.168.77.130:8080;server 192.168.77.130:8081;
}

每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器 down 掉,能自动剔除。

(2)weight

weight 代表权,重默认为 1,权重越高被分配的客户端越多 。

指定轮询几率,weight 和访问比率成正比,用于后端服务器性能不均的情况。 例如:

upstream myserver{server 192.168.77.130:8080 weight=10;server 192.168.77.130:8081 weight=5;
}

(3)ip_hash

每个请求按访问 ip 的 hash 结果分配,这样每个访客固定访问一个后端服务器,可以解决 session 的问题

也就是说客户端在第一次访问某个服务后,后面都是访问此服务 。

upstream myserver{ip_hash;server 192.168.77.130:8080;server 192.168.77.130:8081;}

(4)fair(第三方)

按后端服务器的响应时间来分配请求,响应时间短的优先分配。

upstream myserver{server 192.168.77.130:8080;server 192.168.77.130:8081;fair;
}

6、Nginx应用—动静分离

6.1 什么是动静分离

目前主流的动静分离方案是:纯粹把静态文件独立成单独的域名,放在独立的服务器上。好处就是,静态资源数据访问交互比较少,静态服务器寿命就会非常的长。.

另外一种方法就是动态跟静态文件混合在一起发布,通过 nginx 来分开(本文演示的就是这种方案

特别说明:本节演示的是教学用动静分离!!  项目中动静分离 请看后文第9章 9.3

6.2 应用需求

web客户端访问 http://192.168.77.130/www/a.html,访问到的是静态服务器中的网页

web客户端访问 http://192.168.77.130/image/1.PNG 访问到的是静态服务器中的图像

6.2.1 准备工作

(1)在静态资源Tomcat服务器所在的Linux系统中,准备好静态资源

www 文件夹中存放好静态资源 a.html

<h1>test html !!!</h1>

image 中存放 1.PNG,

6.2.2 进入nginx配置文件进行配置(重点)

在HTTP块的server块添加监听端口、Nginx 地址

location块(重点):添加访问名字

autoindex on:目的是为了在访问 /image 时,能够显示目录里面的内容,当然这里也可以通过expire设置缓存过期时间 。

通过 location 指定不同的后缀名实现不同的请求转发。通过expires参数设置,可以使浏览器缓存过期时间,减少与服务器之前的请求和流量。具体 Expires 定义:是给一个资源设定一个过期时间,也就是说无需去服务端验证,直接通过浏览器自身确认是否过期即可,所以不会产生额外的流量。此种方法非常适合不经常变动的资源。(如果经常更新的文件,不建议使用 Expires 来缓存),我这里设置 3d,表示在这 3 天之内访问这个 URL,发送一个请求,比对服务器该文件最后更新时间没有变化,则不会从服务器抓取,返回状态码304,如果有修改,则直接从服务器重新下载,返回状态码 200。

6.2.3 最终测试

重启 Nginx

./nginx -s -reload

然后访问: 

再次访问:

http://192.168.77.130/image/1.PNG

顺利出现图像。

7、Nginx搭建高可用集群

7.1 什么是高可用

微服务中,为防止服务提供者宕掉,提供多个服务,nginx 同样,如果只使用一个 nginx ,可能发生单点故障,导致整个微服务不可用 。因此至少需要两胎nginx服务器,即可实现高可用。

7.2 准备工作

(1)需要两台 nginx 服务器 192.168.17.129 和 192.168.17.131

(2)两台服务器都需要安装 keepalived(一个脚本,帮你写好了相关切换和监控代码)

(3)需要虚拟 ip

7.3 安装在linux服务器上安装keepalived

(1)使用 yum 命令进行安装

yum install keepalived –y

(2)安装之后,在 /etc 里面生成目录 keepalived,有文件 keepalived.conf

7.4 完成高可用配置(主从配置  即配置keepalived)

Keepalived + Nginx 配合使用

7.4.1 主机 Nginx配置

(1)修改/etc/keepalived/keepalivec.conf 配置文件

! Configuration File for keepalivedglobal_defs {notification_email {acassen@firewall.locfailover@firewall.locsysadmin@firewall.loc}notification_email_from Alexandre.Cassen@firewall.locsmtp_server 192.168.17.129smtp_connect_timeout 30router_id LVS_DEVEL # 主机名字
}vrrp_script chk_http_port {script "/usr/local/src/nginx_check.sh"interval 2 #(检测脚本执行的间隔)weight 2 # 权重}vrrp_instance VI_1 {state MASTER # 备份服务器上将 MASTER 改为 BACKUPinterface eth1 # 主机的网卡virtual_router_id 51  # 主、备机的 virtual_router_id 必须相同priority 100  # 主、备机取不同的优先级,主机值较大,备份机值较小advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.17.50 # VRRP H 虚拟地址}}

扩展:主机名称 和 ip 映射

进入主机的hosts文件

vim /etc/hosts

添加映射内容:

127.0.0.1 LVS_DEVEL

便可以将主机名和ip地址进行映射 。

(2)在/usr/local/src添加检测脚本:nginx_check.sh

#!/bin/bash
A=`ps -C nginx –no-header | wc -l`
if [ $A -eq 0 ];then/usr/local/nginx/sbin/nginxsleep 2if [ `ps -C nginx --no-header |wc -l` -eq 0 ];thenkillall keepalivedfi
fi

7.4.2 从机 Nginx配置

(1)修改/etc/keepalived/keepalivec.conf 配置文件

! Configuration File for keepalivedglobal_defs {notification_email {acassen@firewall.locfailover@firewall.locsysadmin@firewall.loc }notification_email_from Alexandre.Cassen@firewall.locsmtp_server 192.168.17.129smtp_connect_timeout 30router_id LVS_DEVEL
}vrrp_script chk_http_port {script "/usr/local/src/nginx_check.sh"interval 2weight 2}vrrp_instance VI_1 {state BACKUP # 修改为从机 BACKUPinterface eth2 # 修改为从机 的网卡virtual_router_id 51priority 90 # 优先级比主机低advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.17.50}}

(2)在/usr/local/src添加检测脚本:nginx_check.sh

#!/bin/bash
A=`ps -C nginx –no-header | wc -l`
if [ $A -eq 0 ];then/usr/local/nginx/sbin/nginxsleep 2if [ `ps -C nginx --no-header |wc -l` -eq 0 ];thenkillall keepalivedfi
fi

7.5 测试

(1)启动Nginx

分别启动 主Nginx 和 从Nginx

切换到/usr/local/nginx/sbin/,执行

./nginx   #启动nginx如果已经启动过,就选择重启
./nginx -s reload

查看 Nginx 是否启动成功

ps -ef | grep nginx

(2)启动keepalived

① CentOs 6 启动方式

启动 keepalived

service keepalived start

停止 keepalived

service keepalived stop

重启 keepalived

service keepalived restart

② CentOs 7 启动方式

启动 keepalived

systemctl start keepalived.service

(3)测试keepalived是否启动成功

ps -ef | grep keepalived

(4)最终测试

① 在浏览器地址栏输入 虚拟 ip 地址:http://192.168.17.50/

此时可以正常访问到nginx界面

把主服务器(192.168.17.129)nginx 和 keepalived 停止(让主机宕机),再输入 192.168.17.50(虚拟地址)

此时从机变成主机。依然可以访问到nginx主页面

8、nginx原理与优化参数配置

8.1 master 和 worker

Nginx 有一个 master 和 多个 worker,master 就相当于主管,worker 就是打工人 。

当客户端发送请求过来,会先通知 master ,然后由 mater 通知所有 worker 进行 争抢,然后由 woker 去完成静态资源加载或者方向代理 。

8.2 master-workers机制(一个master,多个worker)

首先,对于每个worker进程来说,独立的进程,不需要加锁,所以省掉了锁带来的开销,同时在编程以及问题查找时,也会方便很多。其次,采用独立的进程,可以让互相之间不会影响,一个进程退出后,其它进程还在工作,服务不会中断, master进程则很快启动新的worker进程。当然, worker进程的异常退出,肯定是程序有bug了,异常退出,会导致当前worker上的所有请求失败,不过不会影响到所有请求,所以降低了风险。

  • 好处:

(1)可以使用 nginx –s reload 热部署,利用 nginx 进行热部署操作 。

(2)每个 woker 是独立的进程,如果有其中的一个 woker 出现问题,其他 woker 独立的,继续进行争抢,实现请求过程,不会造成服务中断 。

8.3 设置多少个worker合适

Nginx 同 redis 类似都采用了 io 多路复用机制,每个 worker 都是一个独立的进程,但每个进程里只有一个主线程,通过异步非阻塞的方式来处理请求, 即使是千上万个请求也不在话下。每个 worker 的线程可以把一个 cpu 的性能发挥到极致。所以 worker 数和服务器的 cpu 数相等是最为适宜的。设少了会浪费 cpu,设多了会造成 cpu 频繁切换上下文带来的损耗。

  • 结论:worker 数和服务器的 cpu 数相等是最为适宜的 。

配置方法:配置文件全局块中(假设是4核cpu)

worker_processes 4;

8.4 连接数 worker_connection

这个值是表示每个 worker 进程所能建立连接的最大值,所以,一个 nginx 能建立的最大连接数,应该是 worker_connections * worker_processes。当然,这里说的是最大连接数:

(1)如果是HTTP请求本地资源来说,能够支持的最大并发数量是 worker_connections * worker_processes

(2)如果是支持 http1.1 的浏览器每次访问要占两个连接,所以普通的静态访问最大并发数是: worker_connections * worker_processes /2,

(3)如果是 HTTP 作 为反向代理来说,最大并发数量应该是 worker_connections * worker_processes/4。因为作为反向代理服务器,每个并发会建立与客户端的连接和与后端服务的连接,会占用两个连接。

问题1:发送请求,占用了 woker 的几个连接数?

答:2 或者 4 个

问题2:nginx 有一个 master,有四个 woker,每个 woker 支持最大的连接数 1024,支持的最大并发数是多少?

答:普通的静态访问最大并发数是: worker_connections * worker_processes /2=4*1024/2=2048

如果是 HTTP 作 为反向代理来说,最大并发数量应该是: worker_connections * worker_processes/4=4*1024/4=1024

9、谷粒商城项目中的 nginx的应用(综合应用)

业务:访问nginx,nginx自动负载均衡到各个网关,网关再负载均衡到具体的微服务

假设:nginx在docker中的ip地址是 192.168.163.131:80

9.1 前置工作

修改windows的 hosts文件,添加域名映射。位置:C:\Windows\System32\drivers\etc

(1)将gulimall.com 映射给 nginx 的ip(访问gulimall.com就相当于访问nginx)

(2)将search.gulimall.com 也映射给 nginx的ip(访问search.gulimall.com就相当于访问nginx)

在后面追加以下内容:

# guli mall #
192.168.163.131     gulimall.com
192.168.163.131     search.gulimall.com

(2)

9.2 Nginx配置(仿照4.1即可完成)

9.2.1 代理服务器配置(server)  (仿照4.1即可完成)

铺垫:如果仅仅转到一个网关,而非网关集群。集群的话,看9.2.2

server {#设置nginx的ip和端口号,我们将从web浏览器访问这个地址。域名已经映射好了listen       80;#*表示"所有"。即只要gulimall.com结尾的都转发server_name  *.gulimall.com;#设置要转到的真正ip 以及 端口号。location / {proxy_pass 192.168.163.1:88;}......
}

9.2.2 负载均衡(仿照5.3即可完成)

(1)nginx 代理网关由网关进行转发,多个网关需要进行负载均衡

(2)配置

(2.1)复习

在http块中,upstream 配置需要负载均衡的服务器

upstream gulimall {

server ip:port

server ip:port

}

说明:gulimall是自己取的名字,将多个ip:port聚合成一个名字,给后面的location(转发的实际地址)使用

(2.2)配置nginx.conf

(2.2.1)修改 http 块,配置上游服务器为网关地址

vim /mydata/nginx/conf/nginx.conf


user  nginx;
worker_processes  1;error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;events {worker_connections  1024;
}http {......upstream gulimall {  //gulimall自己取的名字,聚合了多个ip:port,给location 用server 192.168.163.1:88; //这里配置需要负载均衡的服务器,也是最终访问的服务器server 192.168.163.1:89;}include /etc/nginx/conf.d/*.conf;//代表conf文件分页了,conf.d里面继续conf的内容
}

(2.2.2)配置server

server {listen       80;#*表示"所有"。即只要gulimall.com结尾的都转发server_name  *.gulimall.com;.....location / {proxy_set_header Host $host; #nginx转发到目的地(这里是网关)过程中,会丢掉诸如请求头的信息proxy_pass http://gulimall; #gulimall是在上文upstream配置的名字,代表集群的多个网关ip和port}......
}

特别注意:

nginx转发给网关的过程中,nginx在转发请求时会自动删除   header   中带有“_”的数据.因此host就被丢掉了。然而如果刚好网关匹配的路由规则是host规则(如下):只有指定主机的访问才路由

- id: gulimall_host_routeuri: lb://gulimall-product #直接访问路径,默认就是去主页predicates:- Host=**.gulimall.com #host:只有指定的nginx主机才能路由去/gulimall-product

可是,刚好host在转发过程中,被nginx丢掉了,因此网关没法路由。

此时就需要加入:

proxy_set_header Host $host

$host是变量,从原http请求的header中取出的host字段

来确保host不丢失,这样网关才能正确转发

9.3 配置动静分离(性能优化)

从web浏览器访问nginx,转到网关,再转到微服务,每个中间件都会造成性能的损失。因此,为了性能最优,静态资源就放在nginx了

(1)以后将所有项目的静态资源都应该放在nginx里面

(2)规则:项目中/static/**所有请求都由nginx直接返回

  • 操作步骤:

(1)创建存放静态资源的文件夹

nginx文件夹中创建html/static 文件夹(目录全路径是:/mydata/nginx/html/static

(2)将项目中的静态文件 复制到 该目录

同理,仿照上面product微服务,将search微服务下的静态资源也复制到nginx的 /mydata/nginx/html/static目录下,此时nginx的static目录下就有两个文件夹,分别是product和search的静态资源(css,img以及js)

(3)修改 Nginx 配置文件 /mydata/nginx/conf/conf.d/gulimall.conf

配置内容:

# /static/ 下所有的请求都转给 nginx
location /static/ {root /user/share/nginx/html;
}

详细说明:

(4)项目的所有页面(.html)静态链接 都加上 static 前缀

上一步已经配置了static都转发到nginx的 /user/share/nginx/html 目录下

通过idea 的替换功能,快速替换script标签的src, href标签的src, img标签的src 等等

ps:相当于把下面的 /static/index...  替换为  /user/share/nginx/html/index..

同理,search微服务的html页面也要加/static

相当于访问/user/share/nginx/html/search/....(红色为替换static的部分)

最终效果:

首页的静态资源,全部由Nginx返回,首页的数据,全部由微服务返回。动静分离后,再用JMeter做压力测试,性能大大的提升

Nginx 反向代理 负载均衡 动静分离 高可用 原理相关推荐

  1. Nginx 方向代理/负载均衡/动静分离/高可用

    一,反向代理 正向代理:正向代理服务器位于客户端和服务器之间,为了向服务器获取数据,客户端要向代理服务器发送一个请求,并指定目标服务器,代理服务器将目标服务器返回的数据转交给客户端.这里客户端是要进行 ...

  2. Nginx 反向代理 负载均衡 虚拟主机

    Nginx 反向代理 负载均衡 虚拟主机配置 通过本章你将学会利用Nginx配置多台虚拟主机,清楚代理服务器的作用,区分正向代理和反向代理的区别,搭建使用Nginx反向搭理和负载均衡,了解Nginx常 ...

  3. Nginx反向代理 负载均衡sky

    Nginx服务部署 Nginx简介 Nginx (engine x) 是一个轻量级的.高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器.Nginx是由伊戈尔·赛索耶夫为俄罗 ...

  4. nginx 反向代理负载均衡 tomcat集群应用

    nginx 反向代理负载均衡 tomcat集群应用 环境介绍: 系统:centos5.8_64 192.168.0.201:nginx服务器 192.168.0.202:tomcat服务器 192.1 ...

  5. Nginx反向代理负载均衡虚拟主机动静分离UrlRewrite防盗链

    文章目录 1. Nginx简介 1.1 Nginx背景 1.2 Nginx的优点 1.3 Nginx的功能特性及常用功能 2.Nginx安装 2.1 下载上传解压 1.2 安装 3.nginx核心概念 ...

  6. Nginx的动态代理,负载均衡,动静分离的简单使用

    nginx 一 Nginx介绍 1.1 为什么要学习Nginx 问题1: 客户端到底要将请求发送那台服务器 问题2:所有客户端的请求都发送给了服务器1 问题3:客户端发送的请求可能是申请静态资源的,也 ...

  7. Nginx快速入门(安装 负载均衡 动静分离 主备 原理)

    什么是Nginx? Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务.Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Ra ...

  8. Nginx 反向代理+负载均衡

    一.Nginx 的引入背景 ● 公司产品出现瓶颈? 我们公司项目刚刚上线的时候,并发量小,用户使用的少,所以在低并发的情况下,一个jar包启动应用就够了,然后内部tomcat返回内容给用户. 用户少, ...

  9. Nginx反向代理负载均衡

    环境准备: 总共四台机器,两台装有Nginx的机器做负载均衡,两台机器装有Apache作为WEB服务器. 机器信息 hostname IP 说明 lb01 192.168.1.19 nginx主负载均 ...

最新文章

  1. python 使用socks5 设置全局代理
  2. 数学建模学习笔记——多元回归
  3. [MongoDB] MongoDB的基本操作以及文档的增删改查
  4. 计算机设计大赛作品评语,第九届大学生短片大赛获奖作品评语
  5. 第二阶段团队冲刺第三天
  6. openwrt顶层Makefile分析-转
  7. cxf框架Demo1
  8. Win 10 版NVIDIA GeForce GTX 1060显卡驱动的下载及飞桨(Paddle)的安装
  9. HIT CSAPP hello的一生
  10. javaktv点歌系统项目(java点歌系统)java点歌管理系统
  11. Centos 下 mysql 安装过程
  12. MMPlayer同步文件到手机应用中的方法
  13. 给 Java 初学者的学习路线建议
  14. ipad怎么和mac分屏_将Mac屏幕扩展到iPad有多好用?我甚至有了入手iPad Pro的冲动...
  15. 从“中央厨房”看媒体深度融合
  16. “广告电商”到底是什么?广告收益模式是否行得通?
  17. 集成HMS Scan Kit扫码SDK,轻松实现手机扫码选购
  18. 网络钓鱼攻击类型,载体及其技术途径
  19. 怎样用计算机设置隐私空间,华为手机的三种隐私设置,开放的秘密空间,永远不用担心女友检查手机!...
  20. web开发中,中文乱码问题汇总

热门文章

  1. 短址(short URL)原理及其实现 来源:http://blog.csdn.net/beiyeqingteng
  2. html 手机语音聊天,好用的手机语音聊天软件推荐
  3. 令人惋惜:Sigfox撑不下去了!这回,可不能怪NB-IoT、LoRa......
  4. 手把手教你做最实用的数据分析模板——帕累托法则
  5. 培训班出身的程序员为什么遭人嫌弃
  6. 基于jquery fly插件实现加入购物车抛物线动画效果
  7. android 摄像头比例,Android摄像头是全屏预览最简单的方式.doc
  8. java如何使用conver_Springmvc conver实现原理及用法解析
  9. 使用img标签能使用background-size:conver一样的效果
  10. linux系统下如何解压RAR文件软件rarforlinux