Nginx基础知识点

一、关于nginx

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

  • Http静态资源服务器
    存储静态资源,如图片文件等。
  • 负载均衡
    如果一台服务器不能承受并发访问压力时,我们可以新增一个服务,其中用nginx可以实现一个入口访问,然后根据nginx的分发策略将全部访问请求分发到不同的服务器上,分散访问压力,使得服务正常运行。
  • 反向代理
    隐藏后端资源服务器信息,与正向代理相反。流程就是客户端发起请求到nginx,nginx经过查询配置,获取到后端真正服务器地址,请求后端服务,然后返回数据给客户端。

    二、反向代理

    那么怎样用nginx来实现一个反向代理服务器呢?

首先启动一个tomcat服务器,用它来模拟后台服务。

配置文件为conf/server.xml。


我们不想让外界知道后台服务的地址,那么我们就需要配置nginx方向代理。

配置文件为conf/nginx.conf

删除默认的server配置:

添加新的server配置:

1
2
3
4
5
6
7
8
server {
listen 80;
server_name localhost;
location / {
proxy_pass http://localhost:8080;
proxy_set_header Host $host:$server_port;
}
}

此配置意为监听localhost:80/,并将这上面的所有请求代理到localhost:8080服务。

启动nginx:

点击双击nginx.exe,黑窗口一闪而过

那怎样查看是否启动成功呢?

打开任务管理器查看是否有两个nginx进程:

其中一个是nginx的守护进程。

当然也可以通过命令行来查看:

1
tasklist | findstr nginx

特别需要注意的是,nginx的位置不能是中文文件夹下否则会报错。

错误日志可以在logs/error.log中查看:

浏览器访问80端口:

成功实现反向代理。

三、负载均衡

nginx中,有多种负载均衡策略

  • 轮询
    在服务列表中根据时间将请求依次分配到服务器。

  • 权重
    根据重要程度分配,权重值越大,转发到这台服务器的请求就会越多。

  • IP Hash
    根据客户端的ip进行hash算法,使得某ip访问的一直是固定的某台服务器,这样可以解决session的问题。

  • Url Hash
    需要安装第三方模块,根据url进行hash算法,使得某url对应的一直是固定的某台服务器。

  • Fair
    需要安装第三方模块,按照后端服务响应时间来分配,响应时间短的优先分配。

    我们主要来介绍一下轮询、权重、IP Hash这三种nginx自身能做的策略。

    1.1启动两个tomcat服务

    刚刚我们已经启动了一个8080服务,现在将tomcat包复制一份


并修改其中的/conf/server.xml:

将shutdown端口由8005改为8006:

将http端口由8080改为8081:

将ajp端口由8009改为8010:

分别在两个tomcat的/webapps/ROOT/index.jsp中添加标识:

启动8081服务:

1.2轮询

nginx配置:

1
2
3
4
upstream local_server{
server localhost:8080;
server localhost:8081;
}

local_server使我们自己起的名字,server表示可用的后台服务。

在nginx.exe所在目录打开命令行,执行重启命令:

1
nginx -s reload

重新访问localhost,会看到在两个服务之间来回切换:


1.3权重

nginx配置

1
2
3
4
upstream local_server{
server localhost:8080 weight=8;
server localhost:8081 weight=2;
}

重启nginx,并在页面访问localhost,发现8080页面出现频率要比8081高得多。

1.4IP Hash

nginx配置:

1
2
3
4
5
upstream local_server{
ip_hash;
server localhost:8080;
server localhost:8081;
}

测试方式同上。

查看评论