Nginx的简单了解与使用

一、产生背景

我们日常生活中经常遇到的问题

这是几年前的12306,现在的12306基本上不会出现这样的问题了

上述场景产生的主要 2 大原因:
1.巨大流量
2.单台服务器资源和能力有限在海量并发的环境下,用户每一次请求服务器,都需要大量的创建线程,每一次的线程都必须分配资源(CPU、内存、带宽、磁盘 IO等),当资源不足的时候就会使得服务器宕机而无法提供服务。
那么如何保证网站在流量峰值时能够顺利运作???

二、 负载均衡(Load Balance)
在阐述负载均衡之前先解释一下高并发的概念。

2-1、 、 高并发
见名知意,高(大量的),并发就是可以使用多个线程或者多个进程,同时处理(就是并发)不同的操作。简而言之就是每秒内有多少个请求同时访问。
2-2 、负载均衡
负载均衡:将请求/数据【均匀】分摊到多个操作单元上执行,负载均衡的关键在于【均匀】,也是分布式系统架构设计中必须考虑的因素之一。

2-3 、tomcat  并发图

有 tomcat 的并发测试图可以发现,当每秒 300 个请求同时访问tomcat 时,tomcat 已经开始承受不住,出现波动。那么大型网站是如何处理高并发的呢?以下是高并发场景下,实现负载均衡的一个分布式架构图

常见互联网分布式架构,分为客户端层、反向代理 nginx 层、站点层、服务层、数据层。只需要实现“将 请求/ / 数据 均匀分摊到多个操作单元上执行”,就能实现负载均衡

三、 Nginx的初探

1 、什么是 Nginx? ?
Nginx 是一款轻量级的 Web 服务器/ 反向代理服务器【后面有介绍】及电子邮件(IMAP/POP3)代理服务器。由俄罗斯的程序设计师Igor Sysoev 所开发,其特点是占有内存少,并发能力强,nginx 的并发能力确实在同类型的网页服务器中表现非常好。
•2004 年 10 月 4 日 第一个公开版本 0.1.0 发布。其将源代码以类 BSD 许可证的形式发布。
•官方测试 nginx 能够支撑 5 5  万并发链接,并且 CPU、内存等资消耗却非常低,运行非常稳定。

四、Nginx  纵深对比其优缺点

什么不讲  Apache ,反而讲  Nginx ???
•Nginx 和 apache 的优缺点
1.nginx 相对于 apache 的优点:

轻量级,同样起 web 服务,比 apache 占用更少的内存及资源高并发,nginx 处理请求是 异步非阻塞(如前端 ajax)的,而 apache 则是阻塞型的,在高并发下 nginx 能保持低资源低消耗高性能高度模块化的设计,编写模块相对简单还有,它社区活跃,各种高性能模块出品迅速(十几年时间发展)
2.apache 相对于 nginx 的优点:
Rewrite 重写 ,比 nginx 的 rewrite 强大模块超多,基本想到的都可以找到少 bug ,nginx 的 bug 相对较多。(出身好起步高)
3.Nginx 配置简洁, Apache 复杂

五、安装 Nginx

5-1 、安装依赖
依赖 gcc openssl-devel pcre-devel zlib-devel
安装:yum -y install gcc openssl-devel pcre-devel zlib-devel

 解压文件

5-3 、configure配置

进入解压后的源码目录,然后执行 configure 命令进行配置
./configure --prefix=/usr/soft/nginx

5-4、 编译并安装

make && make install

安装好后,会在/usr/soft 下生成 nginx 目录(这是我编译前指定的),这个目录就是 nginx 的软件了。

5-5 、nginx命令

一旦 nginx 启动,就可以通过调用带有 -s 参数的可执行文件来控制它。使用语法: nginx -s  信号可以是下列之一:
stop - 快速关机
quit - 优雅的关机
reload - 重新加载配置文件
reopen - 重新打开日志文件

例如,要停止 nginx 进程并等待工作进程完成当前请求的服务,可以执行以下命令:nginx -s qui(注意进入sbin目录下执行命令)

六、Nginx配置

6-1 、nginx配置详解

#进程数,建议设置和 CPU 个数一样或 2 倍
worker_processes 2;
#日志级别
error_log logs/error.log warning;(默认 error 级别)
# nginx 启动后的 pid 存放位置
#pid logs/nginx.pid;
events {
#配置每个进程的连接数,总的连接数= worker_processes * worker_connections
# 根据物理内存大小来配置,默认 1024
worker_connections 10240;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
#连接超时时间,单位秒
keepalive_timeout 65;
server {
listen 80;
server_name localhost
#默认请求
location / {
root html; #定义服务器的默认网站根目录位置
index index.php index.html index.htm; #定义首页索引文件的名称
}
#定义错误提示页面
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}

6-2、 、 负债均衡配置:
nginx 支持以下负载均衡机制(或方法):
a) 循环 - 对应用程序服务器的请求以循环方式分发,
b) 最少连接数 - 将下一个请求分配给活动连接数最少的服务器
c) ip-hash - 哈希函数用于确定下一个请求(基于客户端的 IP地址)应该选择哪个服务器。

6-2-1 默认负载平衡配置 默认负载平衡配置
使用 nginx 进行负载平衡的最简单配置可能如下所示:
http {
upstream shsxt{
server srv1.example.com;
server srv2.example.com;
server srv3.example.com;
}
server {
listen 80;
server_name localhost;
location / {
proxy_pass http://shsxt;
}
}
}
在上面的示例中,在 srv1-srv3 上运行相同应用程序的 3 个实例。如果没有专门配置负载均衡方法,则默认为循环法。所有请求都被 代理到服务器组 shsxt,并且 nginx 应用 HTTP 负载平衡来分发请求。

6-2-2  加权负载平衡
通过使用服务器权重,还可以进一步影响 nginx 负载均衡算法,谁的权
重越大,分发到的请求就越多。
upstream shsxt {
server srv1.example.com weight=3;
server srv2.example.com;
server srv3.example.com;
}
6-2-3  最少连接负载平衡
在连接负载最少的情况下,nginx 会尽量避免将过多的请求分发给繁忙
的应用程序服务器,而是将新请求分发给不太繁忙的服务器,避免服务
器过载。
upstream shsxt {
least_conn;
server srv1.example.com;
server srv2.example.com;
server srv3.example.com;
}
6-2-4  会话持久性
上述的循环或最少连接数的负载平衡方法,每个后续客户端的请求都可能被分发到不同的服务器。不能保证相同的客户端总是定向到相同的服务器。

如果需要将客户端绑定到特定的应用程序服务器 - 换句话说,就是始终选择相同的服务器而言,就要使客户端的会话“粘滞”或“持久” 。ip-hash 负载平衡机制就是有这种特性。使用 ip-hash,客户端的 IP 地址将用作散列键,以确定应该为客户端的请求选择服务器组中的哪台服务器。此方法可确保来自同一客户端的请求将始终定向到同一台服务器,除非此服务器不可用。
upstream shsxt{
ip_hash;
server srv1.example.com;
server srv2.example.com;
server srv3.example.com;
}

6-3 Nginx  的访问控制
Nginx 还可以对 IP 的访问进行控制,allow 代表允许,deny 代表禁止.
location / {
deny 192.168.78.1;
allow 192.168.78.0/24;
allow 10.1.1.0/16;
allow 192.168.1.0/32;
deny all;
proxy_pass http://shsxt;
}
从上到下的顺序,匹配到了便跳出。如上的例子先禁止了 192.168.78.1,接下来允许了 3 个网段,其中包含了一个 ipv6,最后未匹配的 IP 全部禁止访问.

猜你喜欢

转载自www.cnblogs.com/liu1459310172/p/9879383.html