Nginx——学习笔记(正向代理/反向代理、负载均衡)

微醺CC 2022-06-23 14:43:53 阅读数:678

代理学习nginx笔记正向

一、Nginx 简介

1.1 什么是Nginx?

Nginx是一个高性能的HTTP和反向代理web服务器同时也提供了MAP/POP3/SMTP服务。因它的稳定性、丰富的功能集、简单的配置文件和低系统资源的消耗而闻名!能够支持高达 50,000 个并发连接数的响应。
Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好。

1.2 正向代理/反向代理(概念)

  • 正向代理:正向代理就是在客户端配置代理服务器,通过代理服务器去进行互联网操作。
    在这里插入图片描述
  • 反向代理:客户端发送请求到反向代理服务器,由反向代理服务器去选择目标服务器获取它的数据,在返回给客户端。此时反向代理服务器和目标服务器对外就是一台服务器,暴露的是代理服务器地址,隐藏了真实的服务器地址。
    在这里插入图片描述

1.3 负载均衡(概念)

在多个服务器的情况下,我们将请求发放到各个服务器上,将原先请求集中到单个服务器的情况改为将请求发送到多个服务器上,将负载分发到不同的服务器,也就是负载均衡。
在这里插入图片描述

二、Nginx 的安装

2.1 准备工作

1) 官网:http://nginx.org/,可在官网下载 Linx 版的 nginx 安装包。在安装 Nginx 前,先要安装 Nginx 依赖的组件。具体步骤如下:
2) Nginx 是 C 语言开发的,要安装 gcc 环境yum -y install gcc-c++;如果已安装 gcc,这步可跳过,我们可以用 gcc --version 查看版本号。
3)安装 pcreyum -y install pcre pcre-devel
注:pcre-devel 是使用 pcre 开发的一个二次开发库。nginx 也需要此库。
4)安装 zlib。zlib 库提供了很多种压缩和解压缩的方式,nginx 使用 zlib 对 http 包的内容进行 gzip,所以需要在 linux 上安装 zlib 库 yum -y install zlib zlib-devel
5)安装 openssl。OpenSSL 是一个强大的安全套接字层密码库,囊括主要的密码算法、常用的密钥和证书封装管理功能及 SSL 协议,并提供丰富的应用程序供测试或其它目的使用。nginx 不仅支持 http 协议,还支持 https(即在 ssl 协议上传输 http),所以需要在 linux安装 openssl 库。yum -y install openssl openssl-devel

2.2 安装 Nginx

1) 上传 nginx-1.14.2.tar.gz 到 Linux 指定目录 /root/javaDevEnv 下,并解压到指定的目录.这里我解压到 /root/javaDevEnv/modules 。
在这里插入图片描述
2) 在解压的目录中执行./configure。(该文件在解压后的nginx目录中,如下:)
在这里插入图片描述
3) 编译并安装,执行 make && make install
在这里插入图片描述
4) 安装完后,检查是否开启了80端口,如果没开还要开启 80 端口(nginx 启动时的端口号)。
firewall-cmd --list-ports(检查开启的端口列表)
firewall-cmd --zone=public --add-port=80/tcp --permanent(开启80端口命令)

三、Nginx 常用命令/配置文件

3.1 常用命令

命令命令
启动 Nginx/usr/local/nginx/sbin/nginx
或者在 /usr/local/nginx 目录下执行./nginx
停止 Nginx/usr/local/nginx/sbin/nginx -s stop
或者在 /usr/local/nginx 目录下执行./nginx -s stop
重新加载 Nginx修改了 nginx 配置后,要让配置生效,就重新加载 nginx 配置文件。
/usr/local/nginx/sbin/nginx -s reload
或者在 /usr/local/nginx 目录下执行./nginx -s reload
查看 Nginx版本./nginx -v

在这里插入图片描述

【扩展】

  1. reload (重新加载),reload会重新加载配置文件,服务不会中断。而且reload时会测试conf语法等,如果出错会rollback用上一次正确配置文件保持正常运行。也叫平滑重启,不会对已经连接的服务造成影响。
  2. restart (重启)(先stop后start),会重启服务。这个重启会造成服务一瞬间的中断,如果配置文件出错会导致服务启动失败,那就是更长时间的服务中断了。
    [注意]:修改配置文件前一定要先备份!为了保证线上服务高可用,推荐使用reload

3.2 配置文件(nginx.conf)

Nginx 默认的配置文件都放在 nginx 安装目录(/usr/local/nginx)下的 conf 目录里,主配置文件nginx.conf也在其中,后续对nginx的使用基本上都是对此配置文件进行相应的修改。
在这里插入图片描述
在这里插入图片描述

3.2.1 全局块

主要设置一些影响nginx服务器运行的配置指令。主要包括配置运行nginx服务器的用户,允许生成的worker process数进程PID存放路径日志存放路径类型以及配置文件的引入等。
比如:worker_process 1; 这个就代表nginx服务器并发处理服务的关键配置,它的值越大,表示支持的并发处理量越多,但是会受到硬件,软件等设备的约束。

3.2.2 events 块

events块主要影响nginx服务器与用户的网络连接,是否开启同时多个网络连接。
比如:worker_connections:1024;表示最大连接数为1024个。

3.2.3 http 块

【提示】http块包含了http全局块server块
这时nginx配置最频繁的部分,代理缓存日志等都是在这里配置。

  • http全局块:主要是配置日志等等的配置。
  • server块:(每个 http 块可以包括多个 server 块,而每个 server 块就相当于一个虚拟主机。)
    • server全局快:listen:参数对应的是端口号;server_name:地址参数。(每个 server 块也分为全局 server 块,以及可以同时包含多个 locaton 块)
    • location块:用来配置响应反向代理的。增加参数proxy_pass 服务器地址(比如:127.0.0.1:8080)。
      在这里插入图片描述

四、反向代理实验

4.1 实验一

实现效果:使用 nginx 反向代理,访问 www.123.com 直接跳转到虚拟机上的 tomcat首页。

实验步骤:
1)修改 windows 系统上的 C:\Windows\System32\drivers\etc 下的 hosts 文件,把虚拟机的 IP 映射成域名。把 IP 映射成域名后,就可以用 www.123.com 来访问 Nginx 的 80 端口。(通过 80 端口访问的页面,默认是 /usr/local/nginx/html/index.html)
在这里插入图片描述
2)打开 nginx.conf,在 server 块里面配置 proxy_pass,指向 tomcat 的地址;
在这里插入图片描述
在这里插入图片描述

4.2 实验二

实现效果:使用 nginx 反向代理,根据访问的路径跳转到不同端口的 Tomcat 服务器中; nginx 服务器的监听端口为 9001;

访问 http://www.123.com:9001/list 直接跳转到 127.0.0.1:8080/a.html
访问 http:///www.123.com:9001/detail 直接跳转到 127.0.0.1:8081/a.html

步骤:(一定要开放所使用的端口修改nginx.conf配置后一定要重新加载nginx服务器

1) 准备在同一台虚拟机上的 2 个 tomcat,通过 tomcat1 复制出 tomcat2。
在这里插入图片描述
进入 tomcat2/conf/server.xml, 修改端口号为 8081, 其余的非注释的 port 都要修改不要和 tomcat1 的端口相同
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
2) 开放 8081 端口:firewall-cmd --zone=public --add-port=8081/tcp --permanent。重启防火墙:firewall-cmd --reload
3) 在 2 个 tomcat 的 webapps/ROOT 目录下分别部署 a.html 页面。
4)修改 nginx.conf 文件,添加一个 server 块配置 9001 虚拟主机,并开放 9001 端口。
【开启9001端口】:firewall-cmd --zone=public --add-port=9001/tcp --permanent
【重启防火墙】:firewall-cmd --reload
【重新加载 Nginx 服务器】:/usr/local/nginx/sbin/nginx -s reload
在这里插入图片描述
5) 启动 tomcat1 和 tomcat2 ;
【启动tomcat1】/root/javaDevEnv/modules/tomcat1/bin/startup.sh
【启动tomcat2】/root/javaDevEnv/modules/tomcat2/bin/startup.sh
6) 访问测试;
在这里插入图片描述

4.3 拓展

4.3.1 备份 nginx.conf 文件

如果 nginx 突然无法访问,就用 nginx/conf 目录下的 nginx.conf.default 来恢复 nginx.conf 。
在这里插入图片描述

4.3.2 location 指令说明

location 配置的两种方法

说明
方法一前缀 + uri(字符串/正则表达式)
方法二@ + name

前缀含义

符号解释
=精确匹配(必须全部一致)
~大小写敏感
~*忽略大小写
^~只需匹配 uri 部分
@内部服务跳转

详细请查看该博主

五、负载均衡

5.1 负载均衡实验

准备三个 tomcat 进行负载均衡实验,当访问同一地址时,请求落到不同的后端 tomcat 服务器上。
在这里插入图片描述
修改 3 个 tomcat 的首页 index.jsp,把内容改一下,用来区分不同的 tomcat。最后我们通过统一的 url 地址,请求到不同的 tomcat 服务器,背后就是 Nginx 在做负载均衡。效果如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5.2 负载均衡策略

5.2.1 轮询(默认)

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

5.2.2 weight

weight 代表权重,默认为 1,权重越高被分配到的客户端请求越多。
指定轮询几率,weight 和访问比率成正比,用于后端服务器性能不均的情况。如下例子:

upstream myTomcatServer{

server 192.168.238.66:8080 weight=1;
server 192.168.238.66:8081 weight=10;
server 192.168.238.66:8082 weight=20;
}

5.2.3 ip_hash

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

upstream myTomcatServer{

ip_hash;
server 192.168.238.66:8080;
server 192.168.238.66:8081;
server 192.168.238.66:8082;
}

【扩展】

  1. Session 的问题:随着系统用户的高速增长,集群方式部署服务器已在很多公司运用起来,当高并发量的请求到达服务端的时候通过负载均衡的方式分发到集群中的某个服务器,这样就有可能导致同一个用户的多次请求被分发到集群的不同服务器上,就会出现取不到 session 数据或 session 数据不一致问题。

5.2.4 fair(第三方)

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

upstream myTomcatServer{

server 192.168.238.66:8080;
server 192.168.238.66:8081;
server 192.168.238.66:8082;
fair;
}
版权声明:本文为[微醺CC]所创,转载请带上原文链接,感谢。 https://blog.csdn.net/qq_43680543/article/details/121144734