一、概述
Linux提供稳定的系统资源分配和网络通信基础;
Nginx负责对Web Request的解析和分发;
Mysql负责对数据的持久化存储;
程序代码负责提供对业务逻辑的实现;
1、Nginx工作原理
为了支持服务端的高并发,nginx采用进程+epoll的异步IO模型;
Nginx运行时会有两类进程,master process和Worker process,两者的职责不同:
A、Master process负责监听IO事件和对Worker process的管理调度;
B、Worker process负责处理IO事件,每个Worker进程相互独立,一个Worker里面可能处理多个IO流(socket fd),linux内核通过epoll机制来支持epoll机制来支持Worker process异步处理多个IO流。
2、正向代理
当需要访问国外的google的时候,但是google被GFW给限制访问叻。这个时候,就需要一台代理服务器,我们先把请求发送到代理服务器,由代理服务器代替我们去向google站点发送请求,并按原路返回请求结果,这就是正向代理。在这个正向代理模型中,代理服务器隔离了服务请求端和服务提供端的直接交互,请求端知道服务端是谁,但是服务端无法知道请求端是谁。
3、反向代理模型
单台服务器无法支撑海量的并发请求,因此构建了一套服务器集群,集群中每台服务器都提供相同的服务,但如何有效地把请求分布到集群中具体的机器上呢?通过代理服务器,集群中每台服务器都有能力去提供服务,代理服务器制定请求转发的规则,负责把请求“均匀”地转分发到集群上的服务器,而这些服务器没有选择为哪一条请求服务的权利,只能被动接受代理服务器转发过来的请求并处理,然后再原路返回。
在反向代理模型中,代理服务器隔离了请求端和服务端的直接交互,服务端知道请求是谁,但请求端无法感知具体提供服务的服务端机器。
反向代理模型,可以有效地解决服务端负载均衡,避免某些服务器过载,提供整体服务的稳定性。
4、Nginx常用命令
nginx run 、stop、rerun;
nginx -t
nginx reload
二、Nginx配置管理——重点
Nginx配置好,才可以帮我们把请求转发给CGI(Common Gateway Interface)程序;
Nginx配置文件nginx.conf一般默认安装在/usr/local/etc/nginx/目录下;
nginx配置文件主要分成四部分:main(全局设置)、server(主机设置)、upstream(上游服务器设置,主要为反向代理、负载均衡相关配置)和 location(URL匹配特定位置后的设置),每部分包含若干个指令。
1、main部分设置的指令将影响其他所有部分的设置;
2、server部分的指令主要用于指定虚拟主机域名、IP和端口;
3、upstream的指令用于设置一系列的后端服务器,设置反向代理及后端服务器的负载均衡;
4、location部分用于匹配网页位置(比如,根目录“/”,“/images”,等等) ;
他们之间的关系是:server继承main、location继承server;upstream既不会继承指令也不会被继承。它有自己的特殊指令,不需要在其他地方的应用。
典型的Nginx配置文件nginx.conf的组成结构如下:
# some main config, such
as
:
# user www www;
# worker_processes 2; # 默认启动2个工作进程
# event {
#
use
epoll;
# worker_connections 2048;
# } # 使用epoll i/o复用
# ...
http {
# some http config ...
upstream { } # 配置反向代理时需要
server { # 配置virtual host
location <path-pattern> { # 匹配URL
}
}
server { # 可以同时配置多个server
}
# ...
三、总结
整个的重点是nginx的配置,其中虚拟主机的配置(server)、资源管理配置(location)、以及资源访问重定向映射(rewrite)是难点。业务场景多种多样,但location和rewrite的规则却万变不离其宗。
location提供了一种规则机制,帮助管理nginx服务器(集群)。在规则机制下,多条规则集合定义了服务的入口,通过优先级匹配选择算法递归地匹配查找出对应的location Block,来作为服务请求的处理策略。
rewrite在location的规则机制下,撕开一条口子,给niginx的配置提供了selection execution之外的异常路径,使得一些特殊场景的配置变得简单高效。(类比一下C语言的goto)
最重要的一条:所有的location Block在location block selection算法过程中,都不是独立的,有可能在每一次重定向的时候,都会重新对整个location blocks进行一次匹配。
来源:oschina
链接:https://my.oschina.net/u/2410373/blog/1836781