This is an old revision of the document!
nginx [engine x] 是一个 HTTP ,反向代理,邮件代理,通用 TCP/UDP 代理服务器,最初由 Igor Sysoev 设计实现。
nginx 有一个主进程和若干工作进程。主进程的主要作用是读取和评估配置信息,以及维护工作进程。工作进程对请求进行实际处理。nginx使用基于事件的模型和依赖于操作系统的机制来有效地在多个工作进程之间分配请求。工作进程的数量在配置文件中定义,可以固定为某个值,也可以根据可用CPU内核的数量进行自动调整。
要启动nginx,运行可执行文件。启动后,就可以通过使用-s
参数调用可执行文件来对其进行控制。使用以下语法:
nginx -s signal
其中signal可能是以下之一:
要获取所有正在运行的nginx进程的列表,可以使用ps实用程序,例如:
ps -ax | grep nginx
nginx及其模块的工作方式在配置文件中确定。默认情况下,配置文件名为nginx.conf,并放置在目录/usr/local/nginx/conf、/etc/nginx或/usr/local/etc/nginx中。
nginx由模块组成,这些模块受配置文件中的指令控制。 指令分为简单指令和块指令。 一个简单的指令由指令名称和参数组成,用空格分隔,并以分号(;)结尾。块指令的结构与简单指令相同,但它不是以分号结尾,而是带有一组用花括号({})括起来的附加指令(instruction)。 如果一个块指令可以包含其他指令(directive),则将其称为上下文(如:events, http, server, location)。
在配置文件中,如果一个指令不在任何上下文中,则被视为在主上下文中。events
和http
指令位于主上下文中,server
指令位于http
中,而location
指令位于server
中。
#号后的内容被视为注释。
网络服务器的一项重要任务是分发文件(例如图像或静态HTML页面)。这里将实现一个示例,其中将根据请求从不同的本地目录提供文件:/data/www(包含HTML文件)和/data/images(包含图像)。这将需要设置http
指令内的server
块指令,并在其中包含两个location
块。配置文件的server
块如下:
server { location / { root /data/www; } location /images/ { root /data; } }
通常,配置文件可以包括多个server
块,这些server
块通过它们侦听的端口和服务器名称来区分。 一旦nginx决定了哪个服务器处理请求,它就会根据server
块内定义的location
指令的参数检查请求中指定的URI。
location
块指定的前缀与请求中的URI进行匹配。对于匹配的请求,会将URI添加到root
指令中指定的路径,以形成本地文件系统上所请求文件的路径。 如果有多个匹配的location
块,nginx将选择前缀最长的location
块。 上面的位置块提供了最短的前缀,长度为1,因此,只有在所有其他位置块均未提供匹配项时,才会使用该块。对于以 /images/ 开始的请求,location /也能匹配,但location /images/有更长的前缀,所以匹配后者。
nginx的一经常的用途是作为代理服务器,这意味着服务器接收请求,将请求传递给被代理的服务器,然后从被代理服务器接收响应并将它们发送给客户端。
这里配置一个基本的代理服务器,该服务器对图像请求从本地目录中的文件提供服务,对所有其他请求发送到被代理的服务器。本示例中,两个服务器将定义在单个nginx实例上。
首先,在nginx配置文件中添加一个包含以下内容的server
块来定义被代理服务器:
server { listen 8080; root /data/up1; location / { } }
这里, root
指令位于server
环境下,在匹配的block
块中没有自己的root
指令时使用这个路径。
接下来,配置代理服务器:
server { location / { proxy_pass http://localhost:8080/; } location ~ \.(gif|jpg|png)$ { root /data/images; } }
第一个location
块,使用 proxy_pass
,并在参数中指定被代理服务器的协议、名称和端口。第二个location
块,使用正则表达是匹配所有以.gif, .jpg, .png的URIs 并映射到 /data/images目录中。
nginx在选择 location
块是,首先检查指定了前缀的location
块,并记住前缀最长的location
块;然后检查正则表达式,如果有匹配,则选取这个location
块,否则,选取前面记忆的location
块。
nginx可用于将请求路由到FastCGI服务器,该服务器运行各种框架和编程语言(例如PHP)构建的应用程序。
代理FastCGI服务器最基本的Nginx配置包括:使用fastcgi_pass
指令而不是proxy_pass
指令来代理CGI请求,以及使用fastcgi_param
指令来设置传递给FastCGI服务器的参数。在PHP中,SCRIPT_FILENAME
参数用于确定脚本名称,而QUERY_STRING
参数用于传递请求参数。
server { location / { fastcgi_pass localhost:9000; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param QUERY_STRING $query_string; } location ~ \.(gif|jpg|png)$ { root /data/images; } }
这里,通过FastCGI协议,路由除静态图像外的所有请求到localhost:9000上的被代理服务器。
nginx 支持下列命令行参数: