Nginx

一、简介

Nginx (engine x) 是一个高性能的HTTP反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄文:Рамблер)开发的,第一个公开版本0.1.0发布于2004年10月4日。

其将源代码以类BSD许可证的形式发布,因它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。2011年6月1日,nginx 1.0.4发布。

Nginx是一款轻量级Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东新浪网易腾讯淘宝等。

二、反向代理和正向代理的区别

一、正向代理

正向代理,意思是一个位于客户端和原始服务器之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。客户端才能使用正向代理。

img

二、反向代理

反向代理方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器。

img

正向代理代理客户端,反向代理代理服务器

三、在Linux下面安装Nginx

具体的安装教程在菜鸟教程里面有就是版本额话自己选择就可以了

那么问题来了,我们真实的nginx在哪呢?

image-20210119205205501

我们进入以后发现了问题,运行会告诉我们一个错误

image-20210119205310903

他会告诉我们地址已经被占用了;

这个时候,我们仿照redis可以修改一下他的配置文件再看一下结果

netstat -lnp|grep 80:查看端口的占用情况

这里一直有问题,所以我下载了一个window版本的使用

在浏览器输入localhost就可以直接使用,出现下面这个页面就代表成功

image-20210119221546016

我们如果打不开,使用cmd也可以实现同样的效果;

为了测试的方便,我在虚拟机实现这个界面

我们把nginx这个环境变量添加到我们的环境变量中:

1
ln -s /usr/local/nginx/sbin/nginx /usr/local/bin/

四、Nginx的基本命令

这个是在Windows nginx目录下直接使用CMD命令测试:

一、查询Nginx的版本号

1
nginx -version

二、启动Nginx

1
start nginx

三、关闭nginx

1
nginx -s stop

四、重新加载配置文件

1
nginx -s reload

重新加载配置文件的话,就需要nginx先启动;

五、nginx配置实现反向代理

第一种、输入地址跳转到本地

要实现的功能:输入www.123.com跳转到其他地方,例如tomcat的首页

第一步,在host文件上配置域名解析,把www.123.com 配置成自己的虚拟机的IP地址

==Host文件位置:C:\Windows\System32\drivers\etc==

然后再浏览器输入www.123.com查看效果

image-20210121204443690

第二步、修改配置文件

在Nginx的conf目录下

修改几个地方:

image-20210121211045246

然后在测试一边就会出现下面这个图:

image-20210121211121857

实验到此完成

就实现了nginx第一个功能,反向代理

第二种:根据不同的服务名跳转到不同的地方

第一步:修改配置文件

1
2
3
4
5
6
7
8
9
10
server {
listen 9001;
server_name 192.168.145.128;
location ~/blog/ {
proxy_pass http://www.saxonmo.com;
}
location ~/80/ {
proxy_pass http://localhost:8080;
}
}

监听的端口是9001,如果服务名是blog那么就跳转到我的博客页,如果是80就跳转到tomcat

第二步、重启配置

1
nginx -s reload

然后查看效果:

输入80:

image-20210122091004514

虽然没有出现那个东西,但是右下角已经告诉我们tomcat已经使用了

输入blog

image-20210122091104371

虽然没有页面显示,但是他也是跳转了不是吗;

六、nginx实现负载均衡

就是同一个地址,但是可能会进入到不同的地方,就像微服务里面的那样

我要实现的功能就是使用同一个路径可以访问到nginx首页也可以分配到tomcat上面

第一步修改配置文件:

image-20210122105635496

使用upstream+名字设置访问的名字,下面加上server地址,表示可以跳转的地方;

下面监听的server服务名字下面的proxy_pass就是你的服务名

然后使用浏览器访问就会发现他会在两个之间来回切换

跳转到Nginx欢迎页就是9001对应的内容

image-20210122110119447

再点击一次就跳转到8080页面

image-20210122110232725

感觉就和springcloud Netflix一样,所以他们之间有啥联系就是我接下来要探索的问题,先留个坑;

以上我们就实现了一个简单的负载均衡

负载均衡算法:

一、轮询(默认)

就是一个一个来,相当于排队一样,是默认的策略,如果服务器宕机,就会把宕机的从里面删除

二、权重(weight)

权重越大,分配的客户越多,就是权重越大,分配到的几率越大

三、Ip_hash

你要第一次访问的时候,以后也用这个IP地址来访问,那么访问后端服务器都是同一个服务器,用来解决session问题

方法也简单,就是在upstream里面添加上ip_hash就可以了

image-20210122111910948

四、fair(第三方)

、fair比 weight、ip_hash更加智能的负载均衡算法,fair算法可以根据页面大小和加载时间长短智能地进行负载均衡,也就是根据后端服务器的响应时间 来分配请求,响应时间短的优先分配。Nginx本身不支持fair,如果需要这种调度算法,则必须安装upstream_fair模块。

七、Nginx动静分离

动静分离的意思就是我们访问静态资源走一个目录,我们走动态访问走一个路径,提升访问速度

一、准备工作

在根目录下准备一个data ,data里面有两个文件夹一个叫image另一个叫www;

image-20210122121249047

准备完成以后修改配置文件,修改成如下的配置

image-20210122121954046

location下面添加地址:就可以通过不同的地址访问不同的资源,出现下面的情况就对了

image-20210122122106856

image-20210122122119754

不同的访问,不同的页面

八、nginx的高可用的部署

高可用和集群的概念在前面学习框架的过程中就已经了解,所以这里就不做过多的赘述了;直接上操作;

因为集群和高可用的原因,所以我们不能使用一台服务器,就是老人常说的不能在一棵树上吊死,所以我们要准备两台机子,我的话,是准备了自己的服务器和一台本地的虚拟机来实现一个简单的集群搭建;

Ip地址配置如下:

1
2
3
4
虚拟机:
192.168.44.128
服务器:
120.79.3.138

撒~,接下来开始实验吧:

第一步、环境打搭建

给两台机子都下载和安装Nginx和集群环境搭建需要的下载文件 keepalived

1
yum install keepalived -y

下载完成后会在/etc/keepalived下面有一个配置文件,如果发现配置文件的话基本准备工作就完成了;接下来就开始集群的搭建

第二步、集群的搭建

修改主机的keepalived(本地虚拟机)配置文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
! Configuration File for keepalived

global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 192.168.200.1
smtp_connect_timeout 30
router_id LVS_DEVEL
}
vrrp_script chk_nginx {
script "/etc/keepalived/nginx_check.sh"
interval 2
weight -20
}
vrrp_instance VI_1 {
state MASTER
interface ens33
mcast_src_ip 192.168.44.1288
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
track_script{
chk_nginx
}
virtual_ipaddress {
192.168.200.16
}
}


这里做不出来,不知道哪里有错;先留一下;

检测脚本:

1
2
3
4
5
6
7
8
9
#!/bin/bash
A=`ps -C nginx–no-header |wc -l`
if [ $A -eq 0 ];then
/usr/local/webserver/nginx/sbin/nginx
sleep 2
if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
killall keepalived
fi
fi