Nginx
前言,本想着一篇文章写完Nginx所有相关知识点,但是写着写着发现太多了,破不得以拆分为多篇文章。我会尽量保证文章不是很散,利于查找,与此同时,我也会提供一个目录对文章进行归类。
什么是nginx
Nginx是一个开源、高性能、可靠的HTTP中间件、代理服务。
关于正向代理与反向代理
正向代理代理的客户端,而反向代理代理的则是服务端。比如,如果挂vpn代理访问google就是正向代理。
常见的web服务器
Apache、Nginx、Lighttpd、Tomcat、Jetty、Weblogic、IIS、Jboss、Netty、Glassfish、Resin、Websphere
Apache、Nginx、Lighttpd服务器,都是静态web服务器,在Nginx之前,绝大部分企业,都采用Apache使用Apache,Lighttpd则比较轻量级。Jetty、Tomcat则是动态的Http服务器。
nginx的优势
IO多路复用 epoll
什么是IO多路复用
I/O就是指的我们网络I/O,多路指多个TCP连接(或多个Channel),复用指复用一个或少量线程。串起来理解就是很多个网络I/O复用一个或少量的线程来处理这些连接。如下图:

I/O复用 解决的是并发性请求的问题。处理多个并发请求,要产生多个I/O流来进行系统内核数据的读取。常用的两种处理方式是串行,前一个阻塞,后面无法继续进行处理、并行处理请求-实现最大并发和吞吐。
多路复用的三种方式:select 、poll、epoll
内核(kernel)利用文件描述符(file descriptor)来访问文件。文件描述符是非负整数。打开现存文件或新建文件时,内核会返回一个文件描述符。读写文件也需要使用文件描述符来指定待读写的文件。
轻量级
初始功能模块少,可手动添加移除模块
代码模块化,便于代码拓展
CPU亲和

现在的CPU大多都是多核的,而Nginx由多个worker进程同时工作,每个worker进程都与固定的一个CPU核心绑定,减少切换CPU的cache miss(缓存未命中,查找地址不在Cache中),从而获取更好的性能。
CPU Cache:
Cpu Cache是一个快速缓存,访问速度比内存块很多,但是空间小,只能缓存部分内存数据
按照功能划分,可以分为:指令缓存(code cache)、数据缓存(data cache)、TLB缓存(translation lookaside buffer,加速虚拟地址转物理地址)
按照速度划分,大部分主流CPU都有二级甚至三级缓存:L1、L2、L3
sendfile文件处理机制
Nginx采用sendfile处理机制,所以静态文件的处理相当快。
Sendfile(零拷贝):
普通的静态资源处理方式需要将文件加载到内核空间(Kernel Space)中,再拷贝到用户空间(User Space)中,这个过程发生了多次切换

而静态文件无需用户空间,所以使用sendfile零拷贝的方式更为合适:

安装nginx
nginx的版本
Mainline version 开发版
Stable version 稳定版
Legacy version 历史版本
下载地址
下载地址:http://nginx.org/en/download.html
在此页面上共有如下几个可以下载的选项:
Mainline version
Stable version
Legacy versions
Source Code 源代码
Pre-Built Packages
除此之外,还有如下几个选项:

使用yum安装
具体请参考官方文档:http://nginx.org/en/linux_packages.html
配置完成后,可以通过yum list | grep nginx查看可安装的包。使用如下命令安装nginx:
Ubuntu下安装
编译安装
确认gcc、g++开发类库是否装好:
安装PCRE正则表达式库:
安装openssl依赖:
安装zlib依赖:
安装nginx:
编译参数
路径可参考nginx目录结构一节
在编译nginx时,即执行./configure命令时,可以指定一些参数为对nginx进行定制,比如指定nginx模块的位置:
如果你已经安装了nginx,可以通过命令nginx -V查看支持的参数:
nginx的目录结构
如果是yum 安装,安装后的文件分散于各个目录,可以使用命令
rpm -ql nginx查看所有安装后的文件
安装nginx后目录结构如下:
启动停止重启nginx
关于Nginx模块
nginx的模块分为两种:
nginx官方模块
第三方模块
查看nginx编译时自带的模块:
最后更新于
这有帮助吗?