nginx反向代理和负载均衡

Nginx 简介

什么是nginx

Nginx 是一个 高性能的HTTP服务器和反向代理服务器,特点是占用内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好
Nginx专为性能优化而开发,性能是其最重要的考量,实际上非常注重效率,能经受高负载的考验,有报告表明能支持高达5万个并发连接数

反向代理

(1) 正向代理

在客户端(浏览器)设置代理服务器,通过代理服务器进行互联网访问
在这里插入图片描述

(2)反向代理

我们只需要将请求发送给反向代理服务器,由反向代理服务器去选择目标服务器获取数据后,在返回给客户端,此时反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器地址,隐藏了真实服务器IP地址。

在这里插入图片描述

3、 负载均衡

客户端请求的数据,单台服务器处理不了众多数据,我们增加服务器数量,然后将众多请求数据通过调度器分发到各个服务器上
在这里插入图片描述

Nginx的安装

 [root@Ansible ~]# yum install -y gcc pcre-devel openssl-devel   //安装依赖包

在这里插入图片描述

[root@Ansible ~]# useradd -s /sbin/nologin nginx   //创建不可登入的用户

[root@Ansible ~]# tar zxf nginx-1.12.2.tar.gz    //解压nginx包 (包需要自己下载)

在这里插入图片描述

> [root@Ansible nginx-1.12.2]# ./configure \
> --prefix=/usr/local/nginx \    //指定安装路径
> --user=nginx \              //指定用户
> --group=nginx \            //指定组
> --with-http_ssl_module      //开启SSL加密功能

在这里插入图片描述
注:./configure 一般有一下几个功能

1、 检查软件环境是否符合要求或依赖
2、 指定要安装的模块或路径、用户等。with-http_ssl_module就是一个ssl加密模块
3、 生成makefile文件,Makefile中指明要安装哪些模块、指定安装路径等信息,make需要从makefile文件中读取指令然后编译

[root@Ansible nginx-1.12.2]# make & make install      //编译并安装

安装后没有启动只有这四个文件夹

在这里插入图片描述

conf:存放nginx所有的配置文件目录
html:Nginx的默认站点目录
logs:Nginx默认的日志路径
sbin:Nginx命令目录,如Nginx的启动命令

nginx常用命令

使用nginx操作命令有个前提条件,必须进入到nginx的/usr/local/nginx/sbin/目录下


[root@Ansible sbin]# ./nginx          //启动服务

[root@Ansible sbin]# ./nginx -s stop    //关闭服务

[root@Ansible sbin]# ./nginx -s reload  //重新加载配置文件

[root@Ansible sbin]# ./nginx –V        //查看软件信息

[root@Ansible sbin]# ln -s /usr/local/nginx/sbin/nginx  /sbin/nginx    //创建软连接,方便在任何目录启停服务

Nginx的配置文件组成

(1)nginx配置文件有三部分组成
第一部分 全局块

丛配置文件的开头到events块之间的内容为全局块,主要包括配置运行nginx服务器的用户(组)、允许生成的worker process(进程)数,进程PID存放路径、日志存放路径和类型以及配置文件的引入等
比如配置文件中的第一行的配置:

在这里插入图片描述

这个是nginx服务器并发处理服务的关键配置,worker_processes 的值越大,可以支持的并发处理量越多,但是会受到硬件的、软件等设备的制约。

第二部分 events块

events块涉及的指令主要影响nginx服务器与用户的网络连接,常用的设置包括是否开启对个worker processes(进程)下的网络连接 进行序列化,是否允许同时接受多个网络连接,选取那种事件驱动模型来处理连接请求,每个worker processes(进程)可以同时支持的最大连接数等。
如配置文件中的默认设置是单进程的最大连接数1024

在这里插入图片描述

第三部分 http块

http块也可以包括http全局块、server块

http全局块

可以嵌套多个server,配置代理、缓存、日志定义等绝大部分功能和第三方模块的配置,主要包括:定义MIMI-Type类型 自定义服务器日志、连接超时时间、单链接请求上限

server块

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

全局server块

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

location块

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

Nginx配置实例-反向代理 1

实现效果:当window浏览器访问192.168.200.129并且端口是80时,nginx会转发到http://127.0.0.1:8080的地址。

首先启动linux虚拟机中的tomcat(进入tomcat的bin目录中,执行./startup.sh文件开启tomcat)

tomcat启动后可以访问到192.168.200.129:8080

在这里插入图片描述

修改nginx.conf配置文件,将server_name localhost

修改为linux本机的IP地址,文件路径:/usr/local/nginx/conf/

在这里插入图片描述
如图中配置,当window浏览器访问192.168.200.129并且端口是80时,nginx会转发到http://127.0.0.1:8080的地址。

配置完成,还需要重新加载nginx才能生效

如上面的 nginx常用命令 配置中,我们已经对nginx命令做过软连接,所以我们就在当前目录下执行加载命令就可以

[root@Ansible conf]# nginx -s reload  //重新加载配置文件

验证反向代理配置是否成功,如果访问192.168.200.129 返回如下页面说明成功了

在这里插入图片描述

Nginx配置实例-反向代理 2

实现效果:使用nginx反向代理,根据访问的路径跳转到不通端口的服务器中

当访问192.168.200.129:80/a/html 直接跳转到127.0.0.1:8080

当访问192.168.200.129:80/b/html 直接跳转到127.0.0.1:8081

准备2个tomcat服务器,我们已经有一个tomcat服务了,端口是8080,现在还需要在准备一个tomcat服务,端口是8081。

创建 目录tomcat8081
注:此目录创建位置没有要求,那都可以。

[root@Ansible ~]# mkdir tomcat8081

把下载好的tomcat包复制到tomcat8081目录中并进行解压

[root@Ansible tomcat8080]# tar zxf apache-tomcat-7.0.105.tar.gz 
[root@Ansible tomcat8080]# ls
apache-tomcat-7.0.105  apache-tomcat-7.0.105.tar.gz

进入tomcat8081目录下,修改端口为8081

配置文件路径为:/tomcat8081/apache-tomcat-7.0.105/conf/server.xml
把配置文件中22行的8005修改为8015

在这里插入图片描述
把配置文件中71行的8080修改为8081,保存并退出
在这里插入图片描述

启动tomcat8081端口
启动路径为:/tomcat8081/apache-tomcat-7.0.105/bin

[root@Ansible bin]# ./startup.sh

在这里插入图片描述

查看8081端口是否启动

[root@Ansible bin]# ss -tunlp | grep 8080 

在这里插入图片描述

创建文件夹和测试页面

tomcat8080配置

在/webapps目录下创建我们要访问的文件路径,也就是我们访问192.168.200.129:8080/a/ 直接跳转到127.0.0.1:8080中的a目录

文件路径:/tomcat8080/apache-tomcat-7.0.105/webapps

[root@Ansible webapps]# mkdir a  //创建a目录

在a目录下创建我们要访问的html页面

在这里插入图片描述

测试8080页面

在这里插入图片描述

tomcat80801配置

在/webapps目录下创建我们要访问的文件路径,也就是我们访问192.168.200.129:8081/b/ 直接跳转到127.0.0.1:8080中的a目录

文件路径:/tomcat8080/apache-tomcat-7.0.105/webapps

[root@Ansible webapps]# mkdir b  //创建b目录

在这里插入图片描述

测试8081页面

在这里插入图片描述

nginx.conf文件配置

进入nginx的配置文件目录下,对nginx.conf文件进行反向代理配置
在/usr/local/nginx/conf/nginx.conf文件中添加如下配合

在这里插入图片描述

重新记载nginx配置

[root@Ansible conf]# nginx -s reload  //重新加载配置文件

测试

当访问192.168.200.129:80/a/html 直接跳转到127.0.0.1:8080

在这里插入图片描述

当访问192.168.200.129:80/b/html 直接跳转到127.0.0.1:8081
在这里插入图片描述

方向代理到这个就配置好了

Nginx配置实例-负载均衡

实现效果:浏览器访问地址http://192.168.200.129:8000端口,负载到8080和8081端口

准备两台tomcat服务器,一台8080,一台8081,这2台服务在上个实验中已经准备好了,这里就不用准备了。

创建目录
文件路径:/tomcat8081/apache-tomcat-7.0.105/webapps

[root@Ansible webapps]# mkdir a  //创建a目录

在a目录下创建我们要访问的html页面

[root@Ansible a]# echo "<h1>8081端口<h1/>" > html

在这里插入图片描述

nginx配置

此处需要注意的是,upstream myserver 模块是在http块中配置的
在这里插入图片描述

重新加载nginx配置文件 和 测试负载效果

[root@Ansible conf]# nginx -s reload  //重新加载配置文件

浏览器访问地址http://192.168.200.129:8000端口,负载到8080和8081端口
在这里插入图片描述
刷新下浏览器,会访问到tomcat的8081端口
在这里插入图片描述

负载均衡配置也配置好了

nginx的upstream目前支持5种方式的分配

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

2、加权轮询 weight 指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。 例如: upstream server {
server 192.168.200.129 weight=10;
server 192.168.200.128 weight=10; }

3、ip_hash 根据请求的ip的hash值分配到对应的后台服务器,可以保证同一ip请求总是到同一个后台服务器,可解决session问题。。 例如:
upstream server {
ip_hash;
server 192.168.200.129:8080;
server 192.168.200.128:8081; }

4、fair(第三方) 按后端服务器的响应时间来分配请求,响应时间短的优先分配。 upstream server {
server server1;
server server2;
fair;

}

5、url_hash 按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。
例:在upstream中加入hash语句,server语句中不能写入weight等其他的参数,hash_method是使用的hash算法
这个暂时没玩过

6、最少连接数least_conn 优先将请求分配给连接最少的服务器,这样可以避免将请求发给压力较大的服务器

负载均衡中配置IP地址的状态

实例: upstream bakend{ ip_hash; server 127.0.0.1:9090 down;
server 127.0.0.1:8080 weight=2; server 127.0.0.1:6060; server
127.0.0.1:7070 backup; }

状态说明:
1.down 表示单前的server暂时不参与负载
2.weight 默认为1.weight越大,分配的次数越多。
3.max_fails :允许请求失败的次数默认为1.当超过最大次数时,返回proxy_next_upstream 模块定义的错误
4.fail_timeout:在经历了max_fails次失败后,暂停服务的时间。max_fails可以和fail_timeout一起使用。
如: upstream svrver {
server 192.168.200.129:8080 weight=2 max_fails=2 fail_timeout=2;
server 192.168.200.129:8081 weight=1 max_fails=2 fail_timeout=1;
}
5.backup:热备 如果负载中有两台服务器,一台配置了backup,当另一台服务器挂掉的时候,才会启用这台服务器。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值