大家好,欢迎来到IT知识分享网。
Nginx 概述 第1章
1.1 Nginx 简介
Nginx (engine x) 是一个轻量级的、高性能的、基于 Http 的、反向代理服务器,静态 web
服务器。Nginx 最初是由俄罗斯人 Igor Sysoev(伊戈尔·赛索耶夫)使用 C 语言为俄罗斯访问量第
二的 Rambler.ru 站点开发的一款服务器。2004 年 10 月发布第一个版本。
Nginx 的官网: http://nginx.org
国内大型的站点,例如百度、京东、新浪、网易、腾讯、淘宝等,都使用了 Nginx。
https://www.netcraft.com/
1.2 代理服务器
1.2.1 正向代理
(1 ) 隐藏
(2 ) 翻墙
(3 ) 提速
(4 ) 缓存
(5 ) 授权
1.2.2 反向代理
(1 ) 保护隐藏
(2 ) 分布式路由
(3 ) 负载均衡
(4 ) 动静分离
(5 ) 数据缓存
1.2.3 总结
正向代理特点:
正向代理是对客户端的代理
正向代理是架设在客户端的主机
客户端在使用正向代理服务器时是知道其要访问的目标服务器地址信息
反向代理特点:
反向代理是对服务端的代理
反向代理是架设在服务端的主机
客户端在使用反向代理服务器时根本就不知道自己真正要访问的目标服务器地址信息
1.3 Nginx 的特点
1.3.1 高并发
一个 Nginx 服务器在不做任何配置的情况下并发量可达 1000 左右。在硬件条件允许的前提下,Nginx 可以支持高达 5-10 万的并发量(除了 Nginx 的设置外,Linux 主机需要做大量的设置来配合 Nginx)。对比一下 Tomcat。Tomcat 服务器默认的并发量为 150(不做任何配置)。即,当有超过150 个用户同时访问某 Servlet 时,Tomcat 的响应就会变得非常慢。
1.3.2 低消耗
官方给出的测试结果,10000 个非活跃连接,在 Nginx 中仅消耗 2.5M 内存。对于一般性的 DoS 攻击来说就不是事儿,但对于 DDoS 也会是问题。
1.3.3 热部署
可以在 7*24 小时不间断服务的前提下,进行 Nginx 版本的平滑升级,Nginx 配置文件的平滑修改。即在不停机的情况下升级 Nginx,修改替换 Nginx 配置文件。
1.3.4 高可用
Nginx 只所以可以实现高并发,是因为其具有很多工作进程 worker。当这些工作进程中的某些出现问题停止工作时,并不会影响整个系统的整体运行。因为其它 worker 会接替那些出问题的线程。
1.3.5 高扩展
Nginx 只所以现在的用户很多,是因为很多功能都已经开发好并模块化。若需要哪些功能,只需要安装相应功能的扩展模块即可。根据编写扩展模块所使用的语言的不同,可以划分为两类:C 语言扩展模块与 LUA 脚本扩展模块。 http://openresty.org/cn/
1.4 Nginx 的下载与安装
1.4.1 Nginx 的下载
nginx 的官网为: http://nginx.org。
1.4.2 Nginx 的源码安装
(1 ) 装 安装 Nginx
A 、 传 上传 Nginx
将下载好的 Nginx 上传到新复制的主机的/usr/tools 目录。
B 、 装 安装 gcc
由于 Nginx 是由 C/C++语言编写的,所以对其进行编译就必须要使用相关编译器。对于C/C++语言的编译器,使用最多的是 gcc 与 gcc-c++,而这两款编译器在 CentOS7 中是没有安装的,所以首先要安装这两款编译器。
C 、 安装依赖库
基本的 Nginx 功能依赖于一些基本的库,在安装 Nginx 之前需要提前安装这些库。
D 、 创建解压目录
在/usr 下创建 apps 目录,用于存放解压后的安装包程序。
E 、 压 解压 Nginx
将 Nginx 解压到/usr/apps 目录中。
进入到/usr/apps 目录中的 Nginx 解压包目录,查看 Nginx 的目录。
F 、 成 生成 makefile
在 Nginx 解压目录下运行 make 命令,用于完成编译。但此时会给出提示:没有指定目标,并且没有发现编译文件 makefile。编译命令 make 需要根据编译文件 makefile 进行编译,所以在编译之前需要先生成编译文件 makefile。使用 configure 命令可以生成该文件。
G 、 编译安装
(2 ) 使 使 nginx 命令随处可用
在 Nginx 的安装目录/usr/local/nginx 中有一个 sbin 目录,其中存放着 nginx 的命令程序nginx。
1.4.3 Nginx 命令
(1 ) 项 查看命令选项 nginx -h
使用 nginx –h 可以查看 Nginx 命令的选项。
(2 ) 看 相看 Nginx 版本信息 nginx –v 或-V
nginx –v:显示 Nginx 版本信息。
nginx –V:显示更多的版本相关信息,例如 gcc 的版本,OpenSSL 的版本等。
(3 ) 令 测试配置文件命令 nginx -tq
nginx –t:测试配置文件是否正确,默认只测试默认的配置文件 conf/nginx.conf。
nginx –T:测试配置文件是否正确,并显示配置文件内容。
nginx –tq:在配置文件测试过程中,禁止显示非错误信息,即只显示错误信息。
可以结合-c 选项指定要测试的配置文件。注意,其不会启动 nginx。
(4 ) 令 停止命令 nginx –s stop/quit
在 nginx 命令后通过-s 选项,可以指定不同的信号完成不同的功能。
nginx –s stop:强制停止 Nginx,无论当前工作进程是否正在处理工作。
nginx –s quit:优雅停止 Nginx,使当前的工作进程完成当前工作后停止。
(5 ) 令 平滑重启命令 nginx –s reload
在不重启 Nginx 的前提下重新加载 Nginx 配置文件,称为平滑重启。
(6 ) nginx –s reopen
重新打开日志文件。
(7 ) nginx –p
指定 Nginx 配置文件的存放路径。
(8 ) 令 启动命令 nginx –c file
nginx –c(小写字母)可启动Nginx,启动成功后无任何提示。若不指定配置文件,则默认加载的是 Nginx 安装目录下的 conf/nginx.cnf。
(9 ) nginx –g
设置配置文件以外的全局指令。
1.4.4 页面访问测试
(1 ) 关闭防火墙
(2 ) 浏览器访问
由于 Nginx 服务器默认的端口号为 80,所以在浏览器中直接输入 Nginx 的主机名或 IP,就可以看到 Nginx 欢迎页面。只要可以看到以下页面信息,则说明 Nginx 安装运行成功。
Nginx 核心配置 第2章
2.1 Nginx 性能调优
在 Nginx 性能调优中,有两个非常重要的理论点(面试点)需要掌握。所以,下面首先讲解这两个知识点,再进行性能调优的配置。
2.1.1 零拷贝(Zero Copy )
(1 ) 零拷贝基础
零拷贝指的是,从一个存储区域到另一个存储区域的 copy 任务没有 CPU 参与。零拷贝通常用于网络文件传输,以减少 CPU 消耗和内存带宽占用,减少用户空间(用户可以操作的内存缓存区域)与 CPU 内核空间(CPU 可以操作的内存缓存区域及寄存器)的拷贝过程,减少用户上下文(用户状态环境)与 CPU 内核上下文(CPU 内核状态环境)间的切换,提高系统效率。DMA 控制器 Direct Memory Access,直接内存存取。ALU 算术逻辑运算器
(2 ) 传统拷贝方式
下面均以“将一个硬盘中的文件通过网络发送出去”的过程为例,来详细分析不同拷贝方式的实现细节。首先通过应用程序的 read()方法将文件从硬盘读取出来,然后再调用 send()方法将文件发送出去。发生 4 次空间切换,发生 4 次 copy,其中有 2 次 CPU 参与。
(3 ) 零拷贝方式
Linux 系统(CentOS6 及其以上版本)对于零拷贝是通过 sendfile 系统调用实现的。发生 2 次空间切换,发生 3 次 copy,其中有 0 次 CPU 参与。
(4 ) Gather Copy DMA 零拷贝方式
由于该拷贝方式是由 DMA 完成,与系统无关,所以只要保证系统支持 sendfile 系统调用功能即可。该方式中没有数据拷贝到 socket buffer。取而代之的是只是将 kernel buffer 中的数据描述信息写到了 socket buffer 中。数据描述信息包含了两方面的信息:kernel buffer 中数据的地址及偏移量。发生 2 次空间切换,发生 2 次 copy,其中有 0 次 CPU 参与。
(5 ) mmap 零拷贝
mmap 零拷贝是对零拷贝的改进。当然,若当前主机的 DMA 支持 Gather Copy,mmap同样可以实现 Gather Copy DMA 的零拷贝。该方式与零拷贝的唯一区别是,应用程序与内核共享了 Kernel buffer。由于是共享,所以应用程序也就可以操作该 buffer 了。当然
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/115699.html