您的位置:首页 > 运维架构 > Nginx

Nginx 介绍

2016-06-07 14:51 309 查看
官方文档:

http://nginx.org/en/docs/

http://nginx.org/en/docs/beginners_guide.html

关于反向代理和负载均衡

参考:http://blog.csdn.net/keyeagle/article/details/6723408/

主进程/工作进程

nginx has one master process and several worker processes. The main purpose of the master process is to read and evaluate configuration, and maintain worker processes. Worker processes do actual processing of requests. nginx employs event-based model and OS-dependent mechanisms to efficiently distribute requests among worker processes.

nginx由1个主进程和N(可配制)个工作进程组成。主进程负责读取配置文件、管理工作进程。而工作进程负责处理实际的请求。nginx采用基于事件的模型和操作系统无关机制,可以高效的把请求分发给工作进程。

配制文件nginx.conf

nginx.conf 路径: /usr/local/nginx/conf, /etc/nginx, or /usr/local/etc/nginx.

关于CGI和FastCGI

https://www.sitepoint.com/setting-up-php-behind-nginx-with-fastcgi/

Connection processing methods

http://nginx.org/en/docs/events.html

支持的连接处理方法有(即:IO复用技术)

select

poll

kqueue (FreeBSD 4.1+, OpenBSD 2.9+, NetBSD 2.0, and Mac OS X.)

epoll (Linux 2.6+)

/dev/poll (Solaris 7 11/99+, HP/UX 11.22+ (eventport), IRIX 6.5.15+, and Tru64 UNIX 5.1A+)

eventport (Solaris 10)

关于请求处理

http://nginx.org/en/docs/http/request_processing.html

《深入理解Nginx模块开发与架构解析》学习笔记

Nginx是一个web服务器,使用基于事件驱动的架构能够处理百万级别的TCP连接,高度模块化的设计和自由许可证使得扩展Nginx功能的第三方模块层出不穷。

ngx_modules.c

运行configure后会生成一些文件,该文件位于objs目录。在里面定义了一个
ngx_modules
数组,它指明了每个模块在Nginx中的优先级。如果一个请求同时符合多个模块的处理规则,那么将按照模块在ngx_modules数组中的顺序选择最靠前的模块优先处理。不过对于HTTP过滤模块而言是相反的。

“优雅”地停止服务

如果希望Nginx正常地处理完当前所有的请求再停止服务,可以使用
-s quit
。(快速停止是
-s stop
)。首先关闭监听套接字,停止接收新的连接,然后把正在处理的连接全部处理完,最后退出进程。

运行中重新加载配置文件

-s reload
,首先会检测配置文件是否有误,如果正确就“优雅”地关闭,然后再启动Nginx。

平滑升级

通知旧的Nginx准备升级 ,通过发送
USR2
信号实现,旧的Nginx收到信号后会将pid文件重命名,这样可以使得新的Nginx成功启动

启动新的Nginx,此时有两个Nginx在运行

以“优雅”的方式关闭旧的Nginx。最后只有新版本的Nginx在运行了。

进程间关系

由一个master进程管理多个worker进程,一般worker进程的数量与服务器上的CPU数量相同,每个worker都是繁忙的,它们真正提供互联网服务。master只负责监控管理worker进程。worker进程之间通过共享内存、原子操作等进程间通信机制实现负载均衡等功能。

P29分析了为什么使用master/worker框架,与apache进行了对比。主要有两点:

1. 细化分工,各司其职。master只负责管理工作,某个worker出错时,master可以快速启动新的worker进行工作

2. 多个worker可以提供服务的健壮性,一个倒下了,还有其他进程在服务。此外可以充分利用常见的SMP多核架构,从而实现微观上真正的多核并发处理,因此采用多个worker进程。那么数量为什么与CPU核心数一致呢?对于Apache,每个进程在一个时刻只处理一个请求,如果并发请求增加,则会有上百个worker进程,这样导致进程间切换的开销变大。但是Nginx的一个worker进程可以同时处理的请求数目只受限于内存的大小,并且worker之间处理并发请求几乎没有同步锁的限制,worker进程通常不会进入睡眠状态。让worker数目与CPU核心数目相同,使得进程间切换带来的开销最小。

在执行configure时,可以将模块编译到nginx中,但是是否启用这些模块一般取决于配置文件中相应的配置项。每个nginx模块都有自己感兴趣的配置项,大部分模块必须在nginx.conf中读取到某个配置项后才会在运行时启用。例如配置http{ }时,ngx_http_module才会在nginx中启用,其他依赖ngx_http_module的模块也才能正常使用。

Nginx在运行时,至少必须加载几个核心模块和一个事件模块。

日志

在配置文件nginx.conf中配置日志文件的路径为:
error_log  logs/error.log  debug;
注意,debug模式需要在configure时加上–with-debug。

日志可以使用’tail -f’进行实时查看。(tail -f 是如何实现的?)

负载均衡的配置

Nginx作为反向代理服务器时,一般都要向上游服务器集群转发请求。这里的负载均衡是选择一种策略,尽量把请求平均的分布到每一台上游服务器上。

1. upstream块 ,该块定义了一个上游服务器集群,便于反向代理中的proxy_pass使用。如:

upstream backend {
server backend1.exp.com weight=5; #权重为5,默认为1
server backend2.exp.com;
}
server {
location / {
proxy_pass http://backend; }
}


访问 / 时,会以负载均衡的策略将请求分布到backend定义的集群上。

2. ip_hash

这能保证来自同一个用户的请求会落在固定的一台上游服务器中。这是为了解决缓存信息冗余的问题。因为上游服务器会缓存一些信息。如果同一个用户的请求落在不同的上游服务器中,就会造成资源浪费。

ip_hash会根据客户端ip计算出一个key,将key按照upstream集群中的上游服务器数量进行取模,根据取模结果将请求转发到相应的服务器中。

ip_hash与weight不能同时使用。

反向代理

proxy_pass URL

这是将当前请求反向代理到URL指定的服务器上。

HTTPS

http://blog.creke.net/762.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: