nginx基础及应用

Nginx基础

一、Nginx:原叫engine X, 是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP反向代理服务器。Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄文:Рамблер)开发的,第一个公开版本0.1.0发布于2004年10月4日。 nginx的模块化设计使得它具有较好的扩展性,另外,nginx还具有高可靠性、低内存消耗;还支持热部署(不停机更新配置文件、版本更新等)、事件驱动、AIO、map.

nginx变种:tengine----是由淘宝网发起的Web服务器项目。它在Nginx的基础上,针对大访问量网站的需求,添加了很多高级功能和特性。它的目的是打造一个高效、安全的Web平台。

二、Nginx基本模块

核心模块:HTTP 模块、 EVENT 模块和 MAIL 模块
基础模块: HTTP Access 模块、HTTP FastCGI 模块、HTTP Proxy 模块和 HTTP Rewrite模块,
第三方模块:HTTP Upstream Request Ha

Nginx 的高并发得益于其采用了 epoll 模型,与传统的服务器程序架构不同,epoll 是linux 内核 2.6 以后才出现的。 Nginx 采用 epoll 模型,异步非阻塞,而 Apache 采用的是select 模型 sh 模块、 Notice 模块和 HTTP Access Key模块。

Nginx扩展功能:基于名称和IP的虚拟主机;支持keppalive;支持平滑升级;定制访问日志、支持使用日志 缓冲区提供日志存储性能;支持url rewrite;支持路径别名;支持基于IP及用户的访问控制;支持速率限制,支持并发限制

三、Nginx的基本架构:

四、Nginx常用功能

1、Http代理,反向代理:作为web服务器最常用的功能之一,尤其是反向代理。

Nginx在做反向代理时,提供性能稳定,并且能够提供配置灵活的转发功能。Nginx可以根据不同的正则匹配,采取不同的转发策略,比如图片文件结尾的走文件服务器,动态页面走web服务器,只要你正则写的没问题,又有相对应的服务器解决方案,你就可以随心所欲的玩。并且Nginx对返回结果进行错误页跳转,异常判断等。如果被分发的服务器存在异常,他可以将请求重新转发给另外一台服务器,然后自动去除异常服务器。

2、负载均衡

Nginx提供的负载均衡策略有2种:内置策略和扩展策略。内置策略为轮询,加权轮询,Ip hash。扩展策略,就天马行空,只有你想不到的没有他做不到的啦,你可以参照所有的负载均衡算法,给他一一找出来做下实现。

理解这三种负载均衡算法的实现

 Ip hash算法,对客户端请求的ip进行hash操作,然后根据hash结果将同一个客户端ip的请求分发给同一台服务器进行处理,可以解决session不共享的问题。 

3、web缓存

Nginx可以对不同的文件做不同的缓存处理,配置灵活,并且支持FastCGI_Cache,主要用于对FastCGI的动态程序进行缓存。配合着第三方的ngx_cache_purge,对制定的URL缓存内容可以的进行增删管理。

五、Nginx----IO模型

IO模型:blocking、nonblocking、multiplexing、event-driven、AIO

Nginx:non-blocking、event-driven、AIO

IO类型详细参考https://blog.csdn.net/minioesina/article/details/89812494

Nginx配置----nginx.conf

main配置段:全局配置段

event{}:定义event模型工作特性

http{}:定义http协议相关的配置

配置指令:要以分号结尾,语法格式

directive value1 [value2...]

支持使用变量:

内置变量:模块自提供的

自定义变量:set var_name value

主配置段的指令:用于调试、定位问题,正常运行必备的配置,优化性能的配置,事件相关的配置

正常运行必备的配置:

1、user USERNAME [GROUPNAME]  #指定运行的用户及组

user nginx nginx;

2、pid /path/to/pid_file;    #指定nginx守护进程的pid文件

pid /var/run/ngnix/nginx.pid;

3、worker_rlimit_nofile #;   #指定所有worker进程所能够打开的最大文件句柄数

性能优化配置:

1、worker_processes #;  worker进程的个数,通常应该少于cpu个数

2、worker_cpu_affinity cpumask ...;   #提升缓存的命中率,因为context switch会产生CPU的不必要的消耗

      例:worker_cpu_affinity 0000001 00000010 00000100;

3、timer_resolution;   #计时器解析度,降低此值,可以减少gettimeofday()系统调用的次数;默认情况下,每次内核的事                   件调用(如epoll,select,poll,kqueue等)返回时,都会执行一次gettimeofday,实现内核的时钟来更新nginx的缓存时钟

4、worker_priority number;  #指明worker进程的nice值,nice值越小,优先级越高

事件相关的配置

1、accept_mutex {off|on};    #master高度用户请求至各worker进程时使用的负载均衡锁;on表示能让多个worker轮流的、                   序列化的去响应新请求

2、lock_file file;    #accept_mutex用到的锁文件路径

3、use [epoll|rtsig|select|poll];   #指明使用的事件模型,建议让nginx自行选择

4、worker_connections

用于调试、定位问题配置(安装时安装了调试功能  --with-debug)

1、daemon {on|off};   #是否以守护进程方式运行nginx,调试时应设置为off

2、master_process {on|off};    #是否以master/worker模型来运行nginx

3、error_log file | stderr | syslog:server-address[,paraneter-value] | memory:size [debug | info | notice | warn | error |crit |                   alert | emerg]

nginx作为web时的常用配置 

配置框架:

http {

      upstream { 

      }

      server {

              location url {

                      root "/path/to/somedir";

                      ....

              }#类似于httpd中的<location>;用于定义url与本地文件系统 的映射关系

              location url {

                      if ... {

                          ...

                        }

               } 

      }#每个server类似于httpd中的一个<Virtualhost>;server可以有多个

      server {

      }

}#注意:与http相关的指令仅能够放置于http、server、location、upstream、if上下文,但有些指令只能用于这5种的某些种

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章